SOA实验报告---用java程序生成WSDL文件
- 格式:doc
- 大小:2.73 MB
- 文档页数:5
java解析wsdl文档获取方法与参数Java是一种流行的编程语言,它提供了多种方法来解析WSDL文档,从而获取方法和参数。
本文将分步骤阐述如何使用Java解析WSDL 文档以获取方法和参数。
1. 首先,我们需要了解什么是WSDL。
WSDL全称为Web Services Description Language,即Web服务描述语言。
它是一种XML格式的文档,用于描述Web服务的接口和相关信息。
2. 在Java中,我们可以使用JAX-WS包来解析WSDL文档。
JAX-WS是Java API for XML Web Services的缩写,它提供了一个标准的方式来创建和部署Web服务。
3. 要解析WSDL文档,我们需要创建一个JAX-WS客户端。
可以通过使用wsimport命令生成JAX-WS客户端代码,该命令将根据WSDL 文档生成客户端Java类。
4. 使用JAX-WS客户端代码,我们可以使用以下步骤来获取WSDL 文档中的方法和参数。
a. 创建一个服务对象,该对象包含服务的名称和所需的端口。
例如,以下代码片段创建了一个服务对象,该对象包含名称为“HelloService”的服务和名为“HelloPort”的端口。
```HelloService service = new HelloService();HelloPort port = service.getHelloPort();```b. 使用端口对象调用Web服务的方法。
例如,以下代码片段调用了“HelloWorld”方法,并传递了一个字符串参数。
```String response = port.HelloWorld("David");```c. 通过调用“getBinding”方法获取服务端点的绑定。
例如,以下代码片段获取服务端点的绑定。
```Binding binding = port.getBinding();```d. 通过调用“getBindingOperation”方法获取绑定操作。
java soap调用要在Java中调用SOAP服务,需要遵循以下步骤:1. 生成客户端代码:使用wsimport工具生成客户端代码,该工具可以从WSDL 文件生成Java代码,用于与SOAP服务交互。
可以通过命令行执行以下命令生成客户端代码:wsimport -s <outputDir> <wsdlUrl>其中,`<outputDir>`是生成的Java代码的输出目录,`<wsdlUrl>`是SOAP 服务的WSDL文件的URL。
2. 创建客户端代理类:在Java代码中创建客户端代理类,用于与SOAP服务进行通信。
客户端代理类需要引用生成的客户端代码,并提供方法来调用SOAP 操作。
3. 初始化SOAP服务接口:在客户端代理类中初始化SOAP服务接口。
在初始化时,需要指定SOAP服务的WSDL文件的URL,并创建服务端点终端。
4. 调用SOAP操作:通过客户端代理类提供的方法调用SOAP操作,传递适当的参数和请求消息。
可以根据需要处理返回的响应消息。
下面是一个简单的示例代码:javaimport com.example.soapclient.generated.*;public class SoapClient {public static void main(String[] args) {生成的客户端代码包名为com.example.soapclient.generated,根据实际情况修改HelloWorldService service = new HelloWorldService();HelloWorldPort port = service.getHelloWorldPort();调用SOAP操作String response = port.sayHello("World");处理响应消息System.out.println(response);}}在上面的示例中,假设生成的客户端代码包名为`com.example.soapclient.generated`,其中`HelloWorldService` 是根据WSDL 文件生成的客户端代码中的服务类,`HelloWorldPort` 是服务类中的端口类,`sayHello` 是用于调用SOAP 操作的方法。
1.为eclipse安装Axis2插件,将我提供的Axis2_Codegen_Wizard_1.4.0文件夹放到MyEclipse 6.0\eclipse\plugins 下,如果是其他版本的Eclipse则需要下载相应插件(注意:要将myeclipse关闭后重新打开才能生效)2.我的示例创建了一个名为axisClient的Web项目。
3.然后在src上New—Other。
可以看到我们配置的Axis2插件已经成功了。
然后选择Axis2 Wizards下的Axis2 Code Generator,Next。
5. /WebServices/WeatherWS.asmx?wsdl是一个提供免费天气预报服务的网络WSDL文件。
我们先打开该网页,将其中的内容另存为WSDL文件(保存的时候以.WSDL结尾)。
6.选择要生成java源文件的wsdl文件的位置。
如下图:7.选择默认即可,当然也可以自己配置,比如自己设置客户端生成应用文件的包。
8.为要生成的文件选择存放的地点。
我们将他放在我们项目的src目录下,然后Finish。
9、刷新我们的axisClient项目,右键——refresh。
然后可以看到,我们的src目录下生成了,build.xml和src.custom包,包下面有两个文件:WeatherWebServiceCallbackHandler.Java和WeatherWebServiceStub.java。
我们自己将这两个文件调整到custom下。
package custom;import java.rmi.RemoteException;import org.apache.axis2.AxisFault;import custom.WeatherWebServiceStub.GetWeatherbyCityName;import custom.WeatherWebServiceStub.GetWeatherbyCityNameResponse;public class ClientTest {public static void main(String[] args) throws RemoteException {//客户端访问类WeatherWebServiceStub wwss=new WeatherWebServiceStub();/** 因为查询天气的城市参数是GetWeatherbyCityName对象,* 所以需要实例,然后设置要查询天气的城市*/GetWeatherbyCityName gwcn=new GetWeatherbyCityName();gwcn.setTheCityName("西安");/** 查询天气* 返回GetWeatherbyCityNameResponse对象* 该对象的getGetWeatherbyCityNameResult().getString()可以返回一个包含天气信息的数组* 循环数组,输出信息*/GetWeatherbyCityNameResponse gwcnr=wwss.getWeatherbyCityName(gwcn);for(String s:gwcnr.getGetWeatherbyCityNameResult().getString()){System.out.println(s);}新版本代码如下:。
实验五 WSDL Web服务描述语言1、实验目的和要求(1)理解WSDL的概念及特点;(2)理解WSDL的专用术语;(3)掌握WSDL的组成元素;(4)理解抽象接口和具体实现的定义;(5)掌握WSDL的设计方法;(6)掌握从WSDL到Java类的“自上而下”的Web Service设计方法。
2、实验环境(1)PC机;(2)互联网;(3)谷歌、百度搜索引擎;(4)MyEclipse;(5)Http Analyzer。
3、实验内容(1)使用MyEclipse设计WSDL;(2)根据WSDL创建Web Service;(3)创建客户端使用Web Service;(4)侦测通信请求和响应。
4、实验实现过程模拟情景:系统分析师:需要设计一个Web Service,功能为:a)传入两个整数,返回它们的和;b)传入一个字符串,返回它的长度。
根据此要求,设计好Web Service的WSDL文档,交给开发工程师。
开发工程师:根据接收到的WSDL文档,创建相应的Java类,并完成功能的实现代码。
请认真听老师讲解以上实验过程,留意屏幕演示步骤。
主要步骤包括:(1)使用MyEclipse可视化工具设计WSDL文档,使Web Service的描述符合需求;(2)根据第(1)步生成的WSDL,使用MyEclipse创建Web Service的基本框架;(3)完成具体的实现代码;(4)部署Web Service到服务器;(5)创建Web Service客户端以检测服务运行效果;(6)必要时使用Http Analyzer侦测通信请求和响应。
建一个webservise项目,选择JAX-WS:选择新建的工程,右键new ->Other->myEclipse->Web Service->WSDL,点击Next,进入下个页面配置如下:targetNamespace把改为localhost:8080Finish以后:在圈里面的标签要添加一个方法(以为我此前已经再新建了一个方法:Plus和Len方法)改为:这里要改:选择新建的工程,右键new ->Other->myEclipse->Web Service->web Service,点击Next,进入下个页面配置如下:创建一个测试类测试:结果:代码区:WSDL:<?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions xmlns:soap="/wsdl/soap/" xmlns:tns="http://localhost:8080/webserviseTest/"xmlns:wsdl="/wsdl/"xmlns:xsd="/2001/XMLSchema" name="webserviseTest" targetNamespace="http://localhost:8080/webserviseTest/"><wsdl:types><xsd:schema targetNamespace="http://localhost:8080/webserviseTest/"> <xsd:element name="Plus"><xsd:complexType><xsd:sequence><xsd:element name="x" type="xsd:float" /><xsd:element name="y" type="xsd:float"></xsd:element></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="PlusResponse"><xsd:complexType><xsd:sequence><xsd:element name="sum" type="xsd:float"/></xsd:sequence></xsd:complexType></xsd:element><xsd:element name="Len"><xsd:complexType><xsd:sequence><xsd:element name="str" type="xsd:string"></xsd:element> </xsd:sequence></xsd:complexType></xsd:element><xsd:element name="LenResponse"><xsd:complexType><xsd:sequence><xsd:element name="len" type="xsd:int"></xsd:element> </xsd:sequence></xsd:complexType></xsd:element></xsd:schema></wsdl:types><wsdl:message name="PlusRequest"><wsdl:part element="tns:Plus" name="parameters"/></wsdl:message><wsdl:message name="PlusResponse"><wsdl:part element="tns:PlusResponse" name="parameters"/></wsdl:message><wsdl:message name="LenRequest"><wsdl:part name="parameters" element="tns:Len"></wsdl:part></wsdl:message><wsdl:message name="LenResponse"><wsdl:part name="parameters" element="tns:LenResponse"></wsdl:part></wsdl:message><wsdl:portType name="webserviseTest"><wsdl:operation name="Plus"><wsdl:input message="tns:PlusRequest"/><wsdl:output message="tns:PlusResponse"/></wsdl:operation><wsdl:operation name="Len"><wsdl:input message="tns:LenRequest"></wsdl:input><wsdl:output message="tns:LenResponse"></wsdl:output> </wsdl:operation></wsdl:portType><wsdl:binding name="webserviseTestSOAP" type="tns:webserviseTest"><soap:binding style="document"transport="/soap/http"/><wsdl:operation name="Plus"><soap:operation soapAction="http://localhost:8080/webserviseTest/Plus"/> <wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="Len"><soap:operation soapAction="http://localhost:8080/webserviseTest/Len"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="webserviseTest"><wsdl:port binding="tns:webserviseTestSOAP" name="webserviseTestSOAP"> <soap:addresslocation="http://localhost:8080/wsdlToJavabeanTest/webserviseTestSOAP"/> </wsdl:port></wsdl:service></wsdl:definitions>WebServiceTest类:package com.ren.wsdlToJavabeanTest;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.ws.RequestWrapper;import javax.xml.ws.ResponseWrapper;@WebService(name = "webserviseTest", targetNamespace ="http://localhost:8080/webserviseTest/")public interface WebserviseTest {/**** @param y* @param x* @return returns float*/@WebMethod(operationName = "Plus", action ="http://localhost:8080/webserviseTest/Plus")@WebResult(name = "sum", targetNamespace = "")@RequestWrapper(localName = "Plus", targetNamespace ="http://localhost:8080/webserviseTest/", className ="com.ren.wsdlToJavabeanTest.Plus")@ResponseWrapper(localName = "PlusResponse", targetNamespace = "http://localhost:8080/webserviseTest/", className ="com.ren.wsdlToJavabeanTest.PlusResponse")public float plus(@WebParam(name = "x", targetNamespace = "") float x,@WebParam(name = "y", targetNamespace = "") float y);/**** @param str* @return returns int*/@WebMethod(operationName = "Len", action ="http://localhost:8080/webserviseTest/Len")@WebResult(name = "len", targetNamespace = "")@RequestWrapper(localName = "Len", targetNamespace ="http://localhost:8080/webserviseTest/", className ="com.ren.wsdlToJavabeanTest.Len")@ResponseWrapper(localName = "LenResponse", targetNamespace = "http://localhost:8080/webserviseTest/", className ="com.ren.wsdlToJavabeanTest.LenResponse")public int len(@WebParam(name = "str", targetNamespace = "") String str); }webserviseTestSOAPImpl类:package com.ren.wsdlToJavabeanTest;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.ws.RequestWrapper;import javax.xml.ws.ResponseWrapper;@javax.jws.WebService(endpointInterface ="com.ren.wsdlToJavabeanTest.WebserviseTest", targetNamespace ="http://localhost:8080/webserviseTest/", serviceName = "webserviseTest", portName = "webserviseTestSOAP")public class webserviseTestSOAPImpl {public float plus(float x, float y) {// TODO Auto-generated method stub//throw new UnsupportedOperationException("Not implemented yet.");return x+y;}public int len(String str) {// TODO Auto-generated method stub//throw new UnsupportedOperationException("Not implemented yet.");return str.length();}}Test类:package com.ren.wsdlToJavabeanTest;public class Test {public static void main(String[] args) {WebserviseTest_Service service=new WebserviseTest_Service();WebserviseTest ws=service.getWebserviseTestSOAP();System.out.println(ws.plus(1, 1));System.out.println(ws.len("student"));}}。
根据java类生成WebService0、先从菜单上选择自动编译,此项一定要选。
1、右键点击需要生成WebService的类,选择“create Web service”2、出现如图所有对话框,配置好后,点击“next”3、出现如下对话框勾上你想公布的WebService 接口方法,其他默认,点击下一步即可,注意要publish 该工程,否则可能无法生成server-config.wsdd ,导致后期无法部署该服务。
此处选择到“start service ”的位置 如果需要同时生成客户端,这里可以适当选择勾上这里这里配置成测试的容器注意这里的EAR 不要选错1.新建项目(Dynamic Web Project)2.填写正确的项目,一路“next”直到完成。
3.新建文件夹wsdl,把厂家提供的wsdl文件放入该文件夹下。
4.5.将文件server-config.wsdd文件copy到WebContent/WEB-INF下面6.7.8.Finsh完成后,修改增加配置文件server-config.wsdd,服务端代码增加在ISPPNPIserviceImpl.java类中,至此,服务端开发已经完成,可以打包ear部署测试。
AAA客户端新建步骤:项目名为NPIServiceAAAClient 1.新建项目(Java Project)2.3.4.新建文件夹wsdl,把厂家提供的wsdl文件放入该文件夹下。
5.6.把lib包copy到项目下,并且添加到项目:7.8.把XmlToRoot.java和RootToXml.java两个类copy放到.ispp.ispp_npi包下。
将Msg_head.java和ResponseSubClass.java中的成员变量设置成public,注意:private ng.String name; // attribute这些属性不要改,保持private。
至此,客户端开发已经完成,可以打包jar测试注意事项:(安徽测试ivpn发现的问题)1.wsdl文件应该取独立的wsdl,不取接口文档里面的,生成客户端代码的时候先修改命名空间为/ivpn/而不是默认的/ispp_npi/2、命令配置:(增加集团)注意节点<?xml version="1.0" encoding="GB2312"?><Interface_msg><Directive><ServiceClass Name="CSService"><ServiceSubClass Name="CSVpnGroupService"><Method Name="CreateVPN"><VPNNUM>9999</VPNNUM><VPNNAME>99</VPNNAME><VPNTYPE>99</VPNTYPE><SERVICESTART>99</SERVICESTART><SERVICESTOP>99</SERVICESTOP><HALL>99</HALL><FEEGROUP>99</FEEGROUP><VPNKIND>99</VPNKIND></Method></ServiceSubClass></ServiceClass></Directive></Interface_msg>3、注意命名空间/ivpn/不是4、乱码问题没解决5、xmltoroot类中elemList = new ArrayList<Leaf>();不能定义为static,否则就会每次发送的xml是一样的Ppc ews_id=23531。
soap服务端wsdl⽣成java代码及部署环境:eclipse3.7 + Tomcat7.0.29 + axis(eclipse⾃带,1.x系列)新建⼀个dynamic Web Project如果eclipse仅仅安装Tomcat的话,可以忽略这个主意事项。
否则,在Target runtime 选项选择Tomcat或者None(因为选择其他服务器的话,从wsdl⽆法反向⽣成java)右键项⽬,new-->other-->web services-->wsdl filenext 输⼊⽂件名, next在Target namespace 输⼊命名空间,/soap(这个决定你反向⽣成java⽂件所在的包,反向⽣成java后的包名为com.test.soap)⾄于soap binding普遍采⽤document,rpc的好像⽐较⿇烦。
点击finishwsdl⽂件design视图,⼀般通过更改这个视图来改wsdl,改源码太⿇烦了,由于这篇博客主要讲部署问题,所以soap不谈,需要的话请看,endpoint可以不⽤改,改了我也不知道会咋样。
右键⼯程,new-->other-->web services-->web service-->nextweb service type 选择Top down java bean Web service (down那个是⽤java类⽣成soap服务的)service service difinition :wsdl所在位置服务我选deploy service(由于第⼀次认真接触这个,其他的不知道啥作⽤) service旁边的Configuration 点击相应的项,server runtime选择Tomcat ,web service runtime选择Axis,不选Axis2(Axis2配置⽐较繁琐,同事说⽤Axis即Axis1.x系列) service project:选择你的项⽬⾄于client 选择no client ⼀般默认如果之前新建项⽬时的Target runtime不是tomcat或者none,此时就会报错。
SoapUI测试工具WSDL文件生成
最近找到一款测试工具SoapUI--接口测试工具,觉得挺不错。
所以粗略的研究了一下,在此特地总结了一下。
使用SOAPUI测试工具时,谈到最多的是导入WSDL文件新建工程。
由于对开发不熟,所以一直纠结如何生成WSDL文件这个问题。
后来,终于找到了WSDL文件的生成方式,使用Eclipse或者PHP_ZendStudio。
1.启动Eclipse工具导入项目工程
2.选择File->New->Other,选择Web Services中WSDL,点击Next
3.选择目标文件父目录,并新建wsdl文档名称;如下图
4.点击Next并至Finish
5.点击Finish完成后,进入如下界面
6.用户可自行编辑设置测试步骤项。
7.WSDL文件生成后,可按SOAPUI用户手册进行导入并进行测试。
1、为什么说SOA是软件技术发展到一定阶段的产物?a)、我们不再能一致化系统,维持对系统的控制,需要一个新的方法---一个接受异质、带来分散的方法;b)、需要一个解决“业务/IT”鸿沟的方法2、在何种情况我应该首先考虑采用SOA架构?大型分布式系统中优先使用SOA架构。
3、从计算环境演变中,我可以发现何种规律?计算环境的演变过程:1)主机时代。
2)客户/服务器计算环境。
3)基于多层架构和中间件的分布式计算环境。
4) 面向服务的计算环境。
计算环境的演变过程是逐渐解耦的过程。
4、SOA是一种具体技术吗?SOA不是一种具体的技术,SOA是一种架构风格。
广义上认为SOA是包含运行环境、编程模型、架构风格和相关方法论在内的一整套新的的分布式软件系统构造方法和环境,涵盖服务的整个生命周期:建模-开发-整合-部署-运行-管理.5、请描述一下现实世界中的服务模型6、传统的大型分布式软件有哪些不足?1)复杂性不一致2)业务与IT的不一致3)已存在的遗产软件4)异构问题5)生命周期的问题6)参与者(所有者)的问题7)灵活性问题8)冗余问题7、 SOA是银弹吗?为什么?不是,SOA对特定的环境(具有不同所有者的异质分布式系统)而言是理想的解决方案,对其它系统而言可能不是一个好的方法,采用SOA是需要付出一定的代价的。
8、为什么SOA架构可以帮助解决IT与业务的不一致?基于服务可在业务层进行建模,从而支持顶层设计。
并且,在服务实现之前就可对顶层架构进行验证9、什么是服务,理想中的服务应包含哪些特性?服务是整个SOA实现的核心。
一项“服务”(理想中)是一个自足的,无状态的业务功能,通过定义良好的标准接口,它接受一个或多个请求,返回一个或多个应答。
服务能执行离散的工作单元,服务不应依赖于其它功能或过程a) 自足性b) 粗粒度c) 可见、可发现d) 无状态e) 幂等性f) 重用性g) 服务质量与服务等级h) 前提和后置条件i) 供应商分散j) 可互操作址。
wsdl是通过gsoap自动生成的。
也就是说再没有wsdl文件的时候可以先定义xxxx.h文件,xxxx.h的定义里面要包括//gsoap ns service nam e: severName 等项。
然后通过soapcpp2.exe xxxx.h来生成wsdl文件等。
如果有可以利用的wsdl文件则可以先生成.h文件再生成soap依赖文件,如:soapStub.h等。
;;;;;;;;;;;;;;;;;;;;;准备:到/projects/gsoap2/files/下载gsoap最新版本,笔者写此文章时最新版本是gsoap_2.7.13.tar.gz,解压缩,笔者解压缩到了D:/software下。
Step1:创建要发布的C++头文件,指定服务操作(calcu.h)在头文件中定义了三个操作:加、减和开方。
参数a和b是输入型参数,result 用来保存结果,返回值说明调用是否成功。
为图方便,笔者将此文件建在gsoap RPC编译器同一目录下,即D:/software/gsoap-2.7.13/gsoap/bin/win32,文件内容如下://gsoap ns service name: calc//gsoap ns service style: rpc//gsoap ns service namespace: /calc.wsdl//gsoap ns service location: /calc.cgi//gsoap ns schema namespace: urn:calcint ns__add(double a, double b, double *result);int ns__sub(double a, double b, double *result);int ns__sqrt(double a, double *result);说明:service name:提供的服务的名称。
service style:Web Service绑定类型。
java 调用webservice的各种方法总结现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!!由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法。
一、利用jdk web服务api实现,这里使用基于SOAP message 的Web 服务1.首先建立一个Web services EndPoint:package Hello;import javax.jws.WebService;import javax.jws.WebMethod;import javax.xml.ws.Endpoint;@WebServicepublic class Hello {@WebMethodpublic String hello(String name) {return "Hello, " + name + "\n";}public static void main(String[] args) {// create and publish an endpointHello hello = new Hello();Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);}}2.使用apt 编译Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成jaws目录3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示4.使用wsimport 生成客户端使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl这时,会在当前目录中生成如下文件:5.客户端程序:1class HelloClient{2public static void main(String args[]) {3 HelloService service = new HelloService();4 Hello helloProxy = service.getHelloPort();5 String hello = helloProxy.hello("你好");6 System.out.println(hello);7 }8}9以上方法还稍显繁琐,还有更加简单的方法二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的利用xfire开发WebService,可以有三种方法:1一种是从javabean 中生成;2 一种是从wsdl文件中生成;3 还有一种是自己建立webservice步骤如下:用myeclipse建立webservice工程,目录结构如下:首先建立webservice接口,代码如下:1package com.myeclipse.wsExample;2//Generated by MyEclipse34public interface IHelloWorldService {56 public String example(String message);78} 接着实现这个借口:1package com.myeclipse.wsExample; 2//Generated by MyEclipse34public class HelloWorldServiceImpl implements IHelloWorldService { 56 public String example(String message) {7 return message;8 }910} 修改service.xml 文件,加入以下代码:1<service>2 <name>HelloWorldService</name>3 <serviceClass>4 com.myeclipse.wsExample.IHelloWorldService5 </serviceClass>6 <implementationClass>7 com.myeclipse.wsExample.HelloWorldServiceImpl8 </implementationClass>9 <style>wrapped</style>10 <use>literal</use>11 <scope>application</scope>12 </service> 把整个项目部署到tomcat服务器中,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:然后再展开HelloWorldService后面的wsdl可以看到:客户端实现如下:1package com.myeclipse.wsExample.client;23import .MalformedURLException;4import .URL;56import org.codehaus.xfire.XFireFactory;7import org.codehaus.xfire.client.Client;8import org.codehaus.xfire.client.XFireProxyFactory;9import org.codehaus.xfire.service.Service;10import org.codehaus.xfire.service.binding.ObjectServiceFactory;1112import com.myeclipse.wsExample.IHelloWorldService;1314public class HelloWorldClient {15public static void main(String[] args) throws MalformedURLException, Exception {16// TODO Auto-generated method stub17Service s=new ObjectServiceFactory().create(IHelloWorldService.class);18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());19String url="http://localhost:8989/HelloWorld/services/HelloWorldService";2021 try22 {2324 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);25 String st=hs.example("zhangjin");26 System.out.print(st);27 }28 catch(Exception e)29 {30 e.printStackTrace();31 }32 }3334}35 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:1public static void main(String[] args) throws MalformedURLException, Exception {2 // TODO Auto-generated method stub3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class);4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 567//远程调用.net开发的webservice8Client c=new Client(new URL("/webservices/qqOnlineWebService.asmx?wsdl"));9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});1011//调用.net本机开发的webservice12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl"));13Object[] o1=c1.invoke("HelloWorld",new String[]{});1415}三、使用axis1.4调用webservice方法前提条件:下载axis1.4包和tomcat服务器,并将axis文件夹复制到tomcat服务器的webapp文件夹中这里我就说一下最简单的方法:首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下:1import javax.xml.rpc.Service;2import javax.xml.rpc.ServiceException;3import javax.xml.rpc.ServiceFactory;45import .MalformedURLException;6import .URL;7import java.rmi.RemoteException;89import space.QName;1011public class TestHelloWorld {121314 public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {15 // TODO Auto-generated method stub1617 String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl";18 String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws";19 String serviceName = "HelloWorldService";20 String portName = "HelloWorld";2122 ServiceFactory serviceFactory = ServiceFactory.newInstance();23 Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));24 HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);25 System.out.println("return value is "+proxy.getName("john") ) ;2627 }2829}30四、使用axis2开发webservice(这里首先感谢李宁老师)使用axis2 需要先下载axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip/axis2/同理,也需要将axis2复制到webapp目录中在axis2中部署webservice有两种方法,第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明下面分别说明使用方法:1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
使⽤SOAPUI作为服务端测试soap接⼝(WSDL)
在最近⼯作中有测试Java编写的soap客户端对于服务端提供的错误报⽂内容进⾏解析的需要,由于⾃⼰使⽤Java写的soap服务端代码不能明显的看出报⽂内容,所以使⽤soapUI⼯具作为服务端⽤于测试。
在⽹上搜索很久也没有搜索到对于soap格式的服务端模拟教程,于是⾃⼰写了⼀个教程⽤于以后查看或者有同样需求的⼩伙伴借鉴,如有问题,请及时指出。
准备:
1、soapUI ⼯具;
2、wsdl 标准⽂件
3、相应报⽂。
那就开始吧~
⼀、使⽤soapUI创建⼀个soap项⽬
选择WSDL⽂件并输⼊项⽬名称
⼆、在刚刚创建的项⽬上点击右键,创建新的soap MockService。
并创建名字,我这⾥就使⽤默认的名字
创建好后,右键点击 MockService 1,显⽰其 MockService 编辑器
三、在 MockService 编辑器的设置中设置 Parh 、Port 、Host,设置完成后点击ok进⾏保存:
四、再在左边项⽬中选择 MockService 1 并点击右键,新建⼀个 MockOperation 。
点击下拉箭头,选择要响应的接⼝,然后点击确定。
五、在确定后会弹出刚才创建的响应的窗⼝,在右边就是填写正常情况下的返回报⽂。
⽽错误响应的报⽂在左上⾓可以创建
点击是
然后就可以看到标准soap错误返回的报⽂格式啦,我们只要在其中填充⾃⼰想要的返回报⽂即可。
六、⼀切准备就绪,现在开始启动,在刚才创建的 MockService 1 上点击右键显⽰ MockService 编辑器,点击开始按钮就可以启动服务开始测试了。
Java集成SOAP简述一、SOAP简介SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在网络上进行远程过程调用(RPC)。
它使用标准的HTTP协议进行通信,可以在不同的操作系统、编程语言和网络环境中进行交互。
SOAP消息由XML构成,具有良好的可读性和可扩展性。
它允许不同的应用程序通过网络进行通信,使用SOAP消息传递数据、调用远程方法,并获取返回结果。
二、Java集成SOAPJava提供了丰富的API和工具,用于集成SOAP协议。
在Java中,我们可以使用以下几种方式来实现SOAP通信:1. JAX-WSJAX-WS(Java API for XML Web Services)是Java EE平台的一部分,提供了一套用于开发和部署Web服务的API。
它使用标准的SOAP协议进行通信,支持WSDL (Web Services Description Language)描述和生成工具。
使用JAX-WS,我们可以通过创建Java类和注解来定义Web服务,然后使用工具生成WSDL描述文件。
客户端可以根据WSDL文件生成相应的Java客户端代码,以便调用远程方法。
2. Apache AxisApache Axis是一个开源的SOAP引擎,用于构建和部署基于SOAP的Web服务。
它提供了一组API和工具,用于开发和集成SOAP服务。
使用Apache Axis,我们可以通过创建Java类和配置文件来定义Web服务。
然后,我们可以使用Axis提供的工具生成WSDL描述文件,并将Web服务部署到应用服务器上。
3. Apache CXFApache CXF是一个开源的Web服务框架,支持SOAP、REST和其他Web服务协议。
它集成了Apache Axis和XFire两个项目的优点,提供了一套强大的API和工具,用于开发和部署Web服务。
使用Apache CXF,我们可以通过创建Java类和注解来定义Web服务。
SOA实验报告---用java程序生成WSDL文件用java程序生成WSDL文件1.先写一个简单的java程序
2.先生成WSDL文件以下为流程图
下一步:
下一步:
选择相应的classes:
下一步:
完成:
成功生成WSDL文件
3.然后根据WSDL文件生成java客户端测试代码
下一步:
下一步:
完成:
然后继续重复上次动作到:
这次选择这样:
然后按照上次的顺序做法完成结果如下:
但是为什么会出错呢别急这是我们没有引入axis2 jar包
然后就成功了
4.然后写入测试的代码:
如下图:
然后写Main函数调用这个测试:
然后运行可以看到运行成功:
如果想发布在第一次实验做过了在此我就不演示了。
实现四则运算的Web Service编程实验一、实验目的1. 理解Web服务的概念。
2. 掌握CXF服务开发环境的配置。
3. 熟悉CXF开发框架的使用。
4. 学习远程过程调用及文档风格的Web服务。
5. 掌握服务函数、接口类型、绑定、端口、目标命名空间等基本概念。
6. 理解WSDL的概念。
二、实验环境操作系统:Windows10IDE:MyEclipse2015CXF:Apache-cxf-2.4.2JDK:JavaSE-1.7二、实验过程1.新建名为CXF_Project的Java Project,导入CXF的核心jar包和相关联的jar包。
(1)--SOAP2.新建包com.ncut.cxf、接口ICalsService和实现类CalsServiceImpl。
3.接口里编写四则运算函数。
import javax.jws.WebService;@WebServicepublic interface ICalsService {public int add(int num1,int num2);public int sub(int num1,int num2);public int mul(int num1,int num2);public int division(int num1,int num2);}4.实现类重写接口方法并编写发布web服务方法。
5.启动服务,在IE里输入地址http://localhost:3456/cals?wsdl查看服务手册。
6.用wsdl2java命令自动生成客户端。
7.新建名为CXF_Client的Java Project,将生成的客户端导入到项目里并新建”App”类。
8.在App类里实现Web服务调用。
public class App {public static void main(String[] args) {ICalsServiceService iss = new ICalsServiceService();ICalsService cs = iss.getICalsServicePort();int add = cs.add(2, 8); //调用加法int sub = cs.sub(6, 2); //调用减法int mul = cs.mul(5, 8); //调用乘法int division = cs.division(15, 5); //调用除法System.out.println("加法结果:"+add );System.out.println("减法结果:"+sub);System.out.println("乘法结果:"+mul);System.out.println("除法结果:"+division);}}9.启动客户端,查看调用结果。
java解析wsdl文档获取具体的方法与参数Java解析WSDL文档获取具体的方法与参数WSDL是Web Services Description Language的缩写,是一种基于XML的语言,用于描述Web服务的功能、参数和协议等信息。
WSDL文档定义了Web服务的接口,以及调用Web服务的参数和返回值。
本文将介绍Java中解析WSDL文档获取具体的方法与参数的方法。
1. 使用Java自带工具解析WSDL文档Java自带了一个工具叫做wsimport,用于生成Java客户端代码,并解析WSDL文档。
在终端中执行以下命令:wsimport -keep -verbose [WSDL URL]其中,-keep选项表示保留生成的Java代码,-verbose选项表示显示详细的生成信息。
执行该命令后会在当前目录下生成一个包含WebService端点的Java代码。
2. 使用Apache CXF解析WSDL文档Apache CXF是一个开源的Web服务框架,支持SOAP、REST和XML等协议。
使用Apache CXF可以很方便地生成客户端代码,并解析WSDL文档。
以下是使用Apache CXF解析WSDL的步骤:(1)添加Maven依赖:```<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-bundle</artifactId><version>[版本号]</version></dependency>```(2)使用CxfClientFactoryBean创建客户端对象:```javaCxfClientFactoryBean factory = new CxfClientFactoryBean(); factory.setAddress("[Web服务的地址]");factory.setServiceClass([服务接口类].class);factory.setWsdlLocation("[WSDL文档的URL]");[服务接口类] client = (服务接口类)factory.create();3. 手动解析WSDL文档如果不想使用自带工具或者第三方框架,可以手动解析WSDL文档。
用java程序生成WSDL文件1.先写一个简单的java程序
2.先生成WSDL文件以下为流程图
下一步:
下一步:
选择相应的classes:
下一步:
完成:
成功生成WSDL文件
3.然后根据WSDL文件生成java客户端测试代码
下一步:
下一步:
完成:
然后继续重复上次动作到:
这次选择这样:
然后按照上次的顺序做法完成结果如下:
但是为什么会出错呢别急这是我们没有引入axis2 jar包
然后就成功了
4.然后写入测试的代码:
如下图:
然后写Main函数调用这个测试:
然后运行可以看到运行成功:
如果想发布在第一次实验做过了在此我就不演示了。