webservice四种发布方式及客户端调用
调用Webservice几种方法的总结
现在有几种调用webservice的方法,总结一下:
①stub方式。
这种方式,是利用axis的WSDL2Java工具类。
这个是根据webservice的wsdl生成客户端类。
这样就可以像是在调用本地的类一样来调用webservice,很简单。
需要一个批处理,如下:
②动态代理
2.1. axis1.4
解释一下:编写流程:
1.创建axis的客户端服务service
2.由service创建call(call就是要进行调用的对象)
3.需要设置call对象的属性targetEndpointAddress(目标地址)和operationName(操作方法就是要调用的方法,其中这个方法需要QName(用于定位方法的)对象),new QName(path,”putInfo”)其中path是名称空间,putInfo 是这个名称空间中的一个方法(要调用的方法)。
4.最后就是调用webservice的方法了,invoke,这个方法需要传入需要的传入的参数,并且这个参数以对象数组的方式传过去。
此方法会返回返回值。
2.2 axis2
注释详细,不解释了。
Web-Service发布及调用
Web 2021/3/10 Service。 讲解:XX
6
Android应用调用Web Service
– 调用完成后,访问SoapSerializationEnvelope 对象的bodyIn属性,该属性返回一个 SoapObject对象,解析该SoapObject对象,即 可获取调用Web Service 的返回值。
– SOAP(Simple Object Access Protocol):简单 对象访问协议。
– WSDL(Web Service Description Language): Web Service描述语言。
– UDDI(Universal Description, Description and Integration)统一描述、发现和整合协议。
• 使用call方法调用WebService方法 • String SOAP_ACTION =
"/getWeatherbyCity Name"; • ht.call(SOAP_ACTION, envelope); • 注意网络权限
2021/3/10
讲解:XX
13
2021/3/10
讲解:XX
10
调用WebService(三)
• 生成调用Webservice方法的SOAP请求信 息。
• SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER 11);
讲解:XX
9
调用WebService(二)
• 设置调用方法的参数值,如果没有参数, 可以省略
• rpc.addProperty(“theCityName”, “武汉"); • addProperty方法的第1个参数虽然表示调
java调用WebService(客户端)
java调用WebService(客户端)看下了网上大部分都是写java来编写WS服务端,小编这边就小写了下JAVA的调用端。
WebService可以有Get、Post、Soap、Document四种方式调用,以下是四种方式的参照说明。
对于SOAP协议多写了个CXF的调用(对于CXF必须有以下包:)以下是调用代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import .URL;import .URLConnection;import .URLEncoder;import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;/*** 功能描述:WebService调用**/public class ClientTest {/*** 功能描述:HTTP-GET**/public String get() {URL url;BufferedReader bin = null;StringBuilder result = new StringBuilder();try {String urlTemp = "//WebServices/WeatherWebService.asmx/getSupportCity?byProvin ceName="+ URLEncoder.encode("福建", "UTF-8");// URLEncoder用来参数编码url = new URL(urlTemp);InputStream in = url.openStream(); // 请求bin = new BufferedReader(new InputStreamReader(in, "UTF-8"));String s = null;while ((s = bin.readLine()) != null) {result.append(s);}} catch (Exception e) {e.printStackTrace();} finally {if (null != bin) {try {bin.close();} catch (IOException e) {e.printStackTrace();}}}return result.toString();}/*** 功能描述:HTTP-POST**/public String post() {OutputStreamWriter out = null;StringBuilder sTotalString = new StringBuilder();try {URL urlTemp = new URL("/WebServices/WeatherWebService.asmx/getSupportCity");URLConnection connection = urlTemp.openConnection();connection.setDoOutput(true);out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");StringBuffer sb = new StringBuffer();sb.append("byProvinceName=福建");out.write(sb.toString());out.flush();String sCurrentLine;sCurrentLine = "";InputStream l_urlStream;l_urlStream = connection.getInputStream();// 请求BufferedReader l_reader = new BufferedReader(new InputStreamReader(l_urlStream));while ((sCurrentLine = l_reader.readLine()) != null) {sTotalString.append(sCurrentLine);}} catch (Exception e) {e.printStackTrace();} finally {if (null != out) {try {out.close();} catch (IOException e) {e.printStackTrace();}}}return sTotalString.toString();}/*** 功能描述:请求HTTP-SOAP**/public String getSoapInputStream() {try {String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"/2001/XMLSchema-instance\"xmlns:xsd=\"/2001/XMLSchema\"xmlns:soap=\"/soap/envelope/\"><soap:Body><getSupportCity xmlns=\"/\"><byProvinceName></byProvinceName></getSupportCity></ soap:Body></soap:Envelope>";URL url = new URL("/WebServices/WeatherWebService.asmx?wsdl");URLConnection conn = url.openConnection();conn.setUseCaches(false);conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Content-Length", Integer.toString(soap.length()));conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");conn.setRequestProperty("SOAPAction","/getSupportCity");OutputStream os = conn.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");osw.write(soap);osw.flush();osw.close();StringBuilder sTotalString = new StringBuilder();String sCurrentLine = "";InputStream is = conn.getInputStream();BufferedReader l_reader = new BufferedReader(new InputStreamReader(is));while ((sCurrentLine = l_reader.readLine()) != null) {sTotalString.append(sCurrentLine);}return sTotalString.toString();} catch (Exception e) {e.printStackTrace();return null;}}/*** 功能描述:使用CXF 请求HTTP-SOAP**/public String soap() {JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();String url = "/webservices/qqOnlineWebService.asmx?wsdl";//:17001/DefDispatcher/dispatche?wsdlClient clientTemp = clientFactory.createClient(url);Object[] arg;String result = "";try {arg = clientTemp.invoke("qqCheckOnline", "8698053");// 查询8698053在线状态,QQ号码// String,默认QQ号码:8698053。
调用webservice的几种方式
调用webservice的几种方式webservice是一种服务,它可以让不同类型的应用程序通过网络交换数据和信息,通过联网,客户可以与服务器端通信,而服务器端可以生成一些特定的网络服务。
webservice使得手机端客户可以实时调用服务器端的接口,从而获取相应的资源和信息,也就是说客户和服务器端之间的计算机网络协议可以实现webservice方式的交互。
通常情况下,webservice有几种不同的实现方式。
下面简单介绍几种可以实现webservice的方式。
1. 使用Axios或低层Javascript原生api发起HTTP请求。
Axios是一个支持浏览器和node.js的客户端框架,用来发起http请求。
它可以实现前后端数据交互,实现webservice。
2. 使用传统soap协议发起HTTP请求。
soap(simple object access protocol)是一种基于XML的协议,它可以通过HTTP使得应用程序交互,它可以使用简单的消息来交互数据,而不用编写特定的代码。
3. 使用REST协议发起HTTP请求。
REST协议是一种使用RESTful API的软件设计架构,它是用来构建及交互分布式系统的一种设计方法。
4. 使用JSON API发起HTTP请求。
JSON API是一种用以支持数据并行关系的API,可以让JSON数据分发,并且提供资源定位、数据多态、查询、及内容引用等功能,从而构建实现交互的webservice系统。
5. 使用gRPC发送HTTP请求。
gRPC是一种开放源的远程过程调用(RPC)系统,可以通过http2发起请求。
它的实现允许你在任何语言之间实现客户端/服务器端通信,以及实现webservice功能。
以上就是实现web service的几种方式,它们可以帮助我们将不同的应用程序通过网络交换数据和信息,实现webservice的功能,它可以帮助我们更好地构建客户端/服务器端通信环境,让客户可以实时调用服务器端接口,实现我们想要的功能,方便地实现我们服务器与客户端之间的交互和通信。
【JavaEE学习80下】【调用WebService服务的四种方式】【WebService。。。
【JavaEE学习80下】【调⽤WebService服务的四种⽅式】【WebService。
不考虑第三⽅框架,如果只使⽤JDK提供的API,那么可以使⽤三种⽅式调⽤WebService服务;另外还可以使⽤Ajax调⽤WebService 服务。
预备⼯作:开启WebService服务,使⽤jdk命令wsimport⽣成调⽤源代码package com.kdyzm.ws;import javax.jws.WebService;import javax.xml.ws.Endpoint;@WebServicepublic class MyWsServer {public String calculate(int input){System.out.println("接收到请求数据:"+input);return input*input+"";}public static void main(String[] args) {Endpoint.publish("http://localhost:9090/ws", new MyWsServer());System.out.println("server ready ......");}} ⽣成源代码命令:wsimport -s . http://localhost:9090/ws?wsdl 可能出现的问题参考: 因为出现了上述问题,所以本次测试环境使⽤jdk 1.7。
⽅法⼀:使⽤最简单、效率最⾼的⽅法调⽤WebService服务 将⽣成的java⽂件包括⽂件夹直接导⼊项⽬,并使⽤其提供的API。
1package com.kdyzm.call.method;23import com.kdyzm.ws.MyWsServer;4import com.kdyzm.ws.MyWsServerService;56/**7 * 第⼀种⽅式就是使⽤wsimport命令获取所有的需要调⽤的代码,并直接使⽤这些代码完成任务8 * @author kdyzm9 *10*/11public class Method1 {12public static void main(String[] args) {13 MyWsServerService myWsServerService=new MyWsServerService();14 MyWsServer myWsServer=myWsServerService.getMyWsServerPort();15 String result=myWsServer.calculate(2);16 System.out.println(result);17 }18 } 客户端控制台打印结果:4 服务端控制台打印结果: 这种⽅式是使⽤最多的⽅式,也是最不容易出错、效率最⾼的⽅式,推荐使⽤这种⽅式。
webservice四种发布方式及客户端调用
WebService 四种发布方式总结Author:yczhang1.CXF方式CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为:ng.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!!!使用cxf+spring搭建WebService:第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:而泰康的was环境则需要如下jar包:明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复。
第二步,配置web.xml文件,如下(重要的地方已标记):<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:/applicationContext.xml</param-value> </context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFil ter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-c lass><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/webservice/*</url-pattern></servlet-mapping>上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;第三步,编写接口类与实现类,注意注解接口类@WebServicepublic interface SendService {public boolean sendOA(@WebParam(name="param")String param);public boolean sendOrg(OrgEntity org);}实现类@WebService(endpointInterface="com.service.SendService",serviceName=" sendService")public class SendServiceImpl implements SendService{public boolean sendOA(String param) {System.out.println("-------sendOA---------param:"+param);if(param.equals("zhoujian")){return true;}return false;}public boolean sendOrg(OrgEntity org) {System.out.println("-------sendOrg--begin-------");return true;}}第四步,Spring配置文件“jaxws:client”该标签可以不必写,访问时可以手动拼接该url 第五步,发布,直接部署到服务器,访问:2.Xfire方式据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。
java webservice几种调用方式
java webservice几种调用方式摘要:1.引言2.Java WebService 的定义3.Java WebService 的调用方式3.1 SOAP 协议3.2 RESTful 风格3.3 RSS 和ATOM4.结论正文:【引言】Java WebService 是一种基于Java 语言编写的网络服务,它允许开发人员创建可与外部系统交互的Web 应用程序。
Java WebService 可以被各种调用方式,本文将介绍几种常见的调用方式。
【Java WebService 的定义】Java WebService 是一组基于Java 语言编写的接口和实现,它通过Web 进行通信。
Java WebService 可以被部署在各种支持Java 的服务器上,如Tomcat、GlassFish 等。
客户端可以通过各种协议调用Java WebService,实现数据交互和业务逻辑处理。
【Java WebService 的调用方式】【3.1 SOAP 协议】SOAP(Simple Object Access Protocol)是一种基于XML 的轻量级协议,用于在分布式环境中交换信息。
客户端可以使用SOAP 协议调用Java WebService,这种调用方式需要客户端和服务器之间建立XML 数据传输的通道。
SOAP 协议支持RPC(远程过程调用)和Document 风格的消息传递,可以满足不同需求。
【3.2 RESTful 风格】REST(Representational State Transfer)是一种基于HTTP 协议的Web 服务设计风格,它采用资源(Resource)和HTTP 方法(如GET、POST、PUT、DELETE)进行操作。
客户端可以使用RESTful 风格调用Java WebService,这种调用方式简单、易于实现和维护。
近年来,随着移动互联网和物联网的发展,RESTful 风格得到了广泛应用。
java调用WebService服务的四种方法总结
java调⽤WebService服务的四种⽅法总结⽬录⼀、前⾔⼆、简介三、具体解析第⼀种⽅式,⾸先得下载axis2的jar包,Axis2提供了⼀个wsdl2java.bat命令可以根据WSDL⽂件⾃动产⽣调⽤WebService的代码。
第⼆种RPC ⽅式,强烈推荐。
第三种:利⽤HttpURLConnection拼接和解析报⽂进⾏调⽤。
第四种,利⽤httpclient总结⼀、前⾔本来不想写这个的,因为⽹上类似的是在是太多了。
但是想想⾃⼰前⾯段时间⽤过,⽽且以后可能再也没机会⽤了。
所以还是记录⼀下吧。
我这⼉是以C语⾔⽣成的WebService为例。
因为通常来说,两个java端之间的互相通讯没必要写成WebService的⽅式,太⿇烦。
除⾮有⼀⽅已经固定了是webService的⽅式(常见于⽜逼的甲⽅)。
⽽且就算写成了WebService⽅式两个java端直接调⽤也相对⽐较简单,因为⽤java的话很多规范都是⾃动⽣成好的,⽽其他语⾔就不是这样了,有时候对⽅压根就不是正确的规范,你还不能让对⽅改我觉得webService这个东西常⽤于不同语⾔编写的服务器之间进⾏数据交互。
因为是基于WSDL的。
我知道的主要的⽅法有以下⼏种(我这⼉全部以C语⾔编写的WebService做优缺点⽐较):⼆、简介1、通过axis2将WebService提供的wsdl⽂件⽣成对应的java类,这样就可以相当调⽤本地类⼀样调⽤webService提供的接⼝。
优点:调⽤简单,⽆需⾃⼰编写太多的东西。
缺点:⼤部分情况根据对应的webService⽣成的服务中地址是固定的,不易更改,⽽且⽣成的代码过于庞⼤,不便于阅读。
同时必须得有webservice对应的的wsdl⽂件,不太可控。
2、通过RPC⽅式调⽤(推荐使⽤)优点:⾃⼰编写部分调⽤代码,可灵活更换调⽤的路径,适合分布式部署的服务器,只需要知道webservice服务的⽅法名、命名空间、以及对应的参数就好。
Eclipse发布WebService和调用WebService接口
Eclipse发布WebService和调⽤WebService接⼝⼀、发布WebService服务1、整个服务端架构如下:2、创建过程1)web.xml2)wsdd.xml3)HelloWorldService.jwspublic class HelloWorldService {private final static String sGreeting = "Hello World!";public String getMessage(){return (sGreeting);}}4) SayHello.javapublic class SayHello {public String getName(String name) {return "hello====>" + name;}}5) ⽤到的jar包 lib⼆、Client调⽤服务端接⼝1、项⽬架构如下:2、调⽤过程:1)右键点击项⽬名称——>“NEW”——>“Other”——>输⼊WEB service client 如下2)完成出现客户端配置窗⼝,如下3)在“service definition”中输⼊webservice开放的服务地址,注意地址末尾必须加上“?WSDL”还需注意的是,创建的web service client 必须是3.0以下版本。
4)这个项⽬中除了 TestClient.java类是⾃⼰创建的,其他都是⾃动⽣成的。
5)TestClient.java类public static void main(String[] args) {try {HelloWorldServiceServiceLocator service = new HelloWorldServiceServiceLocator();.URL url = new .URL("http://localhost:8080/mywebservices/services/HelloWorldService.jws?WSDL"); HelloWorldServiceSoapBindingStub stub = new HelloWorldServiceSoapBindingStub(url, service); String x2 = stub.getMessage();System.out.println(x2);} catch (RemoteException e) {// TODO Auto-generated catch block20e.printStackTrace();} catch (MalformedURLException e) {// TODO Auto-generated catch block23e.printStackTrace();}}这⾥主要⽤到的是***Locator 和***Stub这两个类。
webservice的调用方式
webservice的调用方式Web Service的调用方式Web Service是一种基于互联网的通信协议,通过HTTP和XML 来进行通信。
它可以实现不同平台、不同语言之间的数据交互和共享,为分布式应用提供了一种标准化的通信方式。
在使用Web Service时,我们可以采用不同的调用方式,以满足不同的需求和场景。
1. SOAP方式调用SOAP(Simple Object Access Protocol)是一种基于XML的消息格式,用于在Web Service之间进行通信。
SOAP方式调用Web Service需要创建SOAP消息,并通过HTTP传输到目标服务端。
SOAP消息包含了调用的方法、参数和返回值等信息。
服务端接收到SOAP消息后,解析其中的内容,并执行相应的方法,然后将结果封装成SOAP消息返回给客户端。
2. RESTful方式调用REST(Representational State Transfer)是一种基于Web的软件架构风格,它使用简单的URL作为资源的标识符,并通过HTTP 的不同请求方法来对资源进行操作。
RESTful方式调用Web Service时,我们可以使用不同的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行增删改查操作。
客户端通过构建不同的URL来调用Web Service,服务端根据URL的不同执行相应的操作,并返回结果。
3. JSON-RPC方式调用JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种基于JSON格式的远程过程调用协议。
JSON-RPC方式调用Web Service时,客户端将调用的方法、参数等信息封装成JSON格式的消息,并通过HTTP传输到服务端。
服务端接收到消息后,解析其中的内容,并执行相应的方法,然后将结果封装成JSON格式的消息返回给客户端。
webservice wsdl详解及调用
WebService是一种跨网络的服务通信方法,它允许不同机器、不同语言之间的程序进行通信。
WSDL(Web Services Description Language)是一种XML格式的文档,用于描述Web服务的接口信息,包括服务的方法、参数和返回值等。
通过WSDL文档,客户端可以知道如何调用Web服务。
WSDL详解:1. 类型(Types):定义了Web服务中使用的数据类型,包括简单类型和复杂类型。
2. 消息(Message):定义了Web服务中的输入和输出参数,每个消息都包含一个或多个参数。
3. 端口类型(PortType):定义了Web服务中的方法(操作),以及方法的输入和输出消息。
4. 绑定(Binding):定义了Web服务的协议(如SOAP)和数据格式(如XML),以及端口地址。
5. 服务(Service):定义了Web服务的访问地址。
调用WebService的步骤:1. 获取WSDL文档:可以通过访问Web服务的URL获取WSDL文档。
2. 解析WSDL文档:使用工具(如wsimport、svcutil等)根据WSDL文档生成客户端代码。
3. 调用Web服务:使用生成的客户端代码调用Web服务的方法。
以Java为例,使用wsimport工具生成客户端代码并调用Web服务:```java// 导入生成的客户端代码import com.example.webservice.MyWebService;import com.example.webservice.MyWebServicePortType;public class WebServiceClient {public static void main(String[] args) {// 创建WebService代理对象MyWebServiceService service = new MyWebServiceService();MyWebServicePortType port = service.getMyWebServicePort();// 调用Web服务的方法String result = port.myMethod("Hello, WebService!");// 输出结果System.out.println("Result: " + result);}}```。
webservice接口调用方式简书
Webservice接口调用方式简介一、什么是Webservice接口?Webservice是一种基于网络的通信协议,用于不同应用程序之间的数据交换。
它使用标准的HTTP协议传输数据,并通过XML格式进行数据封装和传递。
Webservice接口提供了一种跨平台、跨语言的数据交互方式,使得不同系统之间可以方便地进行数据交流和共享。
二、Webservice接口的调用方式Webservice接口的调用方式有多种,常见的有以下几种:1. SOAP调用方式SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在Web上交换结构化的和类型化的信息。
SOAP调用方式是Webservice接口最常见的调用方式之一。
SOAP调用方式的特点是使用XML格式封装请求和响应数据,并使用HTTP协议进行传输。
在SOAP调用中,客户端通过发送一个SOAP请求给服务端,服务端接收到请求后进行处理,并将处理结果封装在一个SOAP响应中返回给客户端。
SOAP调用方式的优点是使用了标准的HTTP协议和XML格式,具有跨平台、跨语言的特性,可以方便地实现不同系统之间的数据交换和共享。
2. RESTful调用方式RESTful(Representational State Transfer)是一种基于HTTP协议的架构风格,用于构建网络上的分布式系统。
RESTful调用方式是Webservice接口中另一种常见的调用方式。
RESTful调用方式的特点是使用HTTP的GET、POST、PUT、DELETE等方法来进行资源的操作。
客户端通过发送HTTP请求给服务端,服务端根据请求的方法进行相应的处理,并将处理结果以HTTP响应的形式返回给客户端。
RESTful调用方式的优点是简单、轻量级,易于理解和使用。
它适用于构建简单的、无状态的接口,特别适合移动应用和Web前端的调用。
3. JSON-RPC调用方式JSON-RPC(Remote Procedure Call)是一种基于JSON格式的远程过程调用协议,用于在网络上调用远程方法。
webservice调用具体方法
webservice调用具体方法摘要:1.什么是WebService2.如何调用WebService的具体方法3.调用过程中可能遇到的问题及解决方法4.实战案例分享正文:WebService,即网络服务,是一种跨平台的、基于XML(可扩展标记语言)的分布式计算技术。
它使得应用程序之间可以通过互联网进行通信,实现数据的交换和共享。
在实际开发中,调用WebService的具体方法如下:1.首先,确定你需要调用的WebService的地址和协议。
通常,WebService的地址是以WSDL(Web服务描述语言)文件形式提供的。
你可以通过WSDL文件查看WebService提供的接口和方法。
2.根据WSDL文件,生成客户端代码。
这可以通过使用诸如Apache CXF、JAX-WS等开源库来实现。
这些库会根据WSDL文件自动生成客户端代码,包括调用WebService的方法和处理响应的代码。
3.在生成的客户端代码中,找到调用WebService的具体方法。
这个方法通常是一个带有HTTP请求头的Web方法,如POST、GET等。
在方法中,传入所需的参数,这些参数通常包括在WSDL文件中定义的输入参数。
4.发送HTTP请求,并将响应结果解析为JSON、XML等格式。
这一步可以通过使用如Jackson、Gson等库来实现。
5.处理响应结果,并根据需要进行相应的业务逻辑处理。
在调用WebService的过程中,可能会遇到以下问题:1.网络问题:由于WebService通常跨网络调用,因此可能会遇到网络不稳定、延迟等问题。
为了解决这个问题,可以考虑使用重试策略、增加超时设置等方法。
2.服务异常:WebService可能会因为各种原因抛出异常,如参数不合法、服务器故障等。
为了解决这个问题,可以实现异常处理机制,如使用try-catch语句捕获异常,并根据需要进行日志记录、通知等操作。
3.身份验证和授权问题:为了避免unauthorized access,WebService 通常需要进行身份验证和授权。
java的webservice用法
Java的WebService用法介绍W e bS er vi ce是一种基于We b标准的服务通信协议,可以在分布式系统中实现跨平台、跨语言的通信。
使用Ja v a语言开发W eb Ser v ic e具有简单易用、可靠性高的特点。
本文将介绍J av a的We bS er vi c e用法。
什么是WebS erviceW e bS er vi ce是一种基于XM L的协议,用于不同系统之间的通信。
它使用标准的H TT P协议传输X ML数据,可以在不同操作系统、编程语言、硬件设备之间互相通信。
Jav a的We bServic e实现方式在J av a中,有多种方式来实现W eb Se rv i ce,常用的有S OA P和R E ST fu l两种方式。
1.S O A PS O AP(S im pl eO bj ec t Ac ce ss Pr ot oc ol)是一种基于XM L的通信协议,它使用H TT P协议进行数据传输。
SO A P是一种严格的规范,定义了消息的格式以及如何发送和接收消息。
开发人员可以使用J ava的AP I来创建SO AP客户端和服务端。
使用Ja va实现SO AP的We bS er vi ce,需要以下步骤:1.定义服务接口:使用Ja va的接口定义需要提供的服务。
2.实现服务接口:编写J a va类来实现服务接口定义的方法。
3.发布We bS er vi ce:使用J av a提供的工具将服务发布到指定的UR L 上。
4.客户端调用:开发客户端代码来调用已发布的We bS er vic e。
2.R E S T f u lR E ST fu l(Re pr es en t at io na lS ta te Tra n sf er)是一种基于H TT P协议的架构风格,它提供了一组约束和原则来设计分布式系统。
R ES Tf ul的W eb Se rv ic e使用H TT P的GE T、POS T、P UT、D EL ET E等方法来进行资源的访问和操作。
webservice访问的几种方式
webservice访问的⼏种⽅式 今天在对接的客户⽤到了webservice,最终采⽤wsimport⽣成本地代理⽅式以SDK的形式对接,但是想的完整的总结⼀下ws的⼏种调⽤⽅式。
发布服务的IP地址是:192.168.125.116 客户端访问ws服务的IP是:192.168.125.1151.发布ws服务:applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:xsi="/2001/XMLSchema-instance" xmlns:jaxws="/jaxws"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/jaxws /jaxws /schema/context/schema/context/spring-context-3.0.xsd"><jaxws:endpoint id="userServiceWS"implementor="erWebServiceImpl" address="/userServiceWS"></jaxws:endpoint></beans>web.xml如下:<servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/WS/*</url-pattern></servlet-mapping>package cn.xm.exam.service.webservice;import java.util.Set;import javax.jws.WebService;import er;@WebServicepublic interface UserWebService {/*** 根据⽤户⾝份证号码查询⽤户信息及其⾓⾊信息及其权限信息** @param useridcard* @return user*/public User getUserByUseridcard(String useridcard) throws Exception;/*** 根据⽤户编号查询⾓⾊code的集合** @param userid* @return⾓⾊集合*/public Set<String> getRoleByUserid(String userid) throws Exception;}package cn.xm.exam.service.impl.webservice;import java.util.Set;import javax.annotation.Resource;import javax.jws.WebService;import org.springframework.stereotype.Service;import er;import erMapper;import erWebService;import cn.xm.exam.utils.ValidateCheck;@Service@WebService(targetNamespace = "")public class UserWebServiceImpl implements UserWebService {@Resourceprivate UserMapper userMapper;@Overridepublic User getUserByUseridcard(String useridcard) {if (ValidateCheck.isNull(useridcard)) {return null;}User user = null;try {user = userMapper.getUserByUseridcard(useridcard);} catch (Exception e) {e.printStackTrace();}return user;}@Overridepublic Set<String> getRoleByUserid(String userid) {if (ValidateCheck.isNull(userid)) {return null;}Set<String> role = null;try {role = userMapper.getRoleByUserid(userid);} catch (Exception e) {e.printStackTrace();}return role;}}启动之后查看ws服务:查看wsdl:2.访问ws的⼏种⽅式1.wsimport⽣成本地代理的⽅式(简单--类似于SDK访问)⽣成本地代码(如果需要下载源码,加上 -keep 参数即可)wsimport http://192.168.125.116:85/Exam/WS/userServiceWS?wsdl发现虽然我们只是发布了⼀个webservice,但是下载的时候会将接⼝中依赖的bean等信息也⼀起发布。
java开发webservice的几种方式
java开发webservice的⼏种⽅式webservice的应⽤已经越来越⼴泛了,下⾯介绍⼏种在Java体系中开发webservice的⽅式,相当于做个记录。
1.Axis2⽅式Axis是apache下⼀个开源的webservice开发组件,出现的算是⽐较早了,也⽐较成熟。
这⾥主要介绍Axis+eclipse开发webservice,当然不⽤eclipse也可以开发和发布webservice,只是⽤eclipse会⽐较⽅便。
(1)下载eclipse的Java EE版本(2)下载axis2(3)下载eclipse的axis2插件Axis2_Codegen_WizardAxis2_Service_Archiver推荐使⽤1.3的版本(4)eclipse安装axis2插件1)在任意⽬录下新建⼀个Axis2⽂件夹,在该⽂件夹下新建eclipse⽬录,在eclipse⽬录中新建plugins⽬录和features⽬录,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;2)把下载的axis2插件解压,并把解压的⽂件放到新建的eclipse的plugins⽬录下;3)在%eclipse_home%的⽬录下新建links⽬录,并在links⽬录下新建axis2.link⽂件,内容为:path=D:\programSoftware\eclipse-SVN\Axis2; 4)重启eclipse,点击·file-new-other,如果看到Axis2 Wizards,则表明插件安装成功。
(5)安装axis2(6)使⽤eclipse新建web⼯程,创建⼀个普通java类,⾄少包含⼀个⽅法。
(7)发布webservice1)点击eclipse的File-New-other,打开Axis2 Wizards,选择Axis2 Service Archiver,然后Next;2)选择Class File Location,也就是类⽂件存放路径,注意:只选到classes⽬录,不要包括包⽂件夹,然后Next;3)选择Skip WSDL,然后Next4)⼀路Next到Select the Service XML file to be included in the Service archive,勾选Generate theservice xml automatically;5)Service Name-填写你的service名称,Class Name-填写类名称,要包括包名,然后点击load,然后点击Finish,这时webservice就发布成功了;6)然后到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services 看看是否多了⼀个.aar的⽂件;注意:以上的⽅式是发布到axis2.war包中,你也可以把⽣成.aar⽂件copy到你的实际应⽤中,同时,你也可以使⽤eclipse的create webservice 功能发布你的webservice,选择axis2⽣成你的webservice,这样webservice就会部署到你的应⽤中了。
web service的几种调用方法
一、利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务1.首先建立一个Web services EndPoint:java 代码[dai ma]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);}}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 编译[bian yi] Hello.java(例:apt -d [存放编译[bian yi]后的文件[wen jian]目录[wen jian mu lu]] Hello.java ) ,会生成 jaws目录3.使用java Hello.Hello运行[yun hang],然后将浏览[liu lan]器[liu lan qi]指向[zhi xiang] http://localhost:8080/hello?wsdl 就会出现下列显示[xian shi]4.使用wsimport 生成客户[ke hu]端使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl5.客户[ke hu]端程序:Java 代码[dai ma]class HelloClient{public static void main(String args[]) {HelloService service = new HelloService();Hello helloProxy = service.getHelloPort();String hello = helloProxy.hello("你好");System.out.println(hello);}}class HelloClient{public static void main(String args[]) {HelloService service = new HelloService();Hello helloProxy = service.getHelloPort();String hello = helloProxy.hello("你好");System.out.println(hello);}}二、使用xfire,我这里使用的是myeclipse集成[ji cheng]的xfire进行测试的利用xfire开发WebService,可以有三种方法[fang fa]:1一种是从javabean 中生成;2 一种是从wsdl文件[wen jian]中生成;3 还有一种是自己建立webservice步骤如下:用myeclipse建立webservice工程,目录结构[jie gou]如下:首先建立webservice接口[jie kou],代码[dai ma]如下:Java代码[dai ma]package com.myeclipse.wsExample;//Generated by MyEclipsepublic interface IHelloWorldService {public String example(String message);}package com.myeclipse.wsExample;//Generated by MyEclipsepublic interface IHelloWorldService {public String example(String message);}Java代码[dai ma]package com.myeclipse.wsExample;//Generated by MyEclipsepublic class HelloWorldServiceImpl implements IHelloWorldService { public String example(String message) {return message;}}package com.myeclipse.wsExample;//Generated by MyEclipsepublic class HelloWorldServiceImpl implements IHelloWorldService { public String example(String message) {return message;}}修改[xiu gai]service.xml 文件[wen jian],加入以下代码[dai ma]:Xml代码[dai ma]<service><name>HelloWorldService</name><serviceClass>com.myeclipse.wsExample.IHelloWorldService</serviceClass><implementationClass>com.myeclipse.wsExample.HelloWorldServiceImpl</implementationClass><style>wrapped</style><use>literal</use><scope>application</scope></service><service><name>HelloWorldService</name><serviceClass>com.myeclipse.wsExample.IHelloWorldService</serviceClass><implementationClass>com.myeclipse.wsExample.HelloWorldServiceImpl</implementationClass><style>wrapped</style><use>literal</use><scope>application</scope></service>把整个项目[xiang mu]部署到tomcat 服务器[fu wu qi] 中,打开浏览[liu lan]器[liu lan qi],输入[shu ru] http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl客户[ke hu]端实现如下:Java代码[dai ma]package com.myeclipse.wsExample.client;import .MalformedURLException;import .URL;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.Client;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import com.myeclipse.wsExample.IHelloWorldService;public class HelloWorldClient {public static void main(String[] args) throws MalformedURLException, Exception { // TODO Auto-generated method stubService s=new ObjectServiceFactory().create(IHelloWorldService.class);XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());String url=" http://localhost:8989/HelloWorld/services/HelloWorldService ";try{IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);String st=hs.example("zhangjin");System.out.print(st);}catch(Exception e){e.printStackTrace();}}}package com.myeclipse.wsExample.client;import .MalformedURLException;import .URL;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.Client;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import com.myeclipse.wsExample.IHelloWorldService;public class HelloWorldClient {public static void main(String[] args) throws MalformedURLException, Exception { // TODO Auto-generated method stubService s=new ObjectServiceFactory().create(IHelloWorldService.class);XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());String url=" http://localhost:8989/HelloWorld/services/HelloWorldService ";try{IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);String st=hs.example("zhangjin");System.out.print(st);}catch(Exception e){e.printStackTrace();}}}这里再说点题外话,有时候我们知道一个wsdl地址[di zhi],比如想用java客户[ke hu]端引用[yin yong].net 做得webservice,使用myeclipse引用[yin yong],但是却出现无法通过验证[yan zheng]的错误[cuo wu],这时我们可以直接在类中引用[yin yong],步骤如下:Java代码[dai ma]public static void main(String[] args) throws MalformedURLException, Exception { // TODO Auto-generated method stubService s=new ObjectServiceFactory().create(IHelloWorldService.class);XFireProxyFactory xf=newXFireProxyFactory(XFireFactory.newInstance().getXFire());//远程调用[tiao yong].net开发的webserviceClient c=new Client(new URL(" /webservices/qqOnlineWebService.asmx?wsdl "));Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});//调用[tiao yong].net本机开发的webserviceClient c1=new Client(new URL(" http://localhost/zj/Service.asmx?wsdl "));Object[] o1=c1.invoke("HelloWorld",new String[]{});}public static void main(String[] args) throws MalformedURLException, Exception {// TODO Auto-generated method stubService s=new ObjectServiceFactory().create(IHelloWorldService.class);XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());//远程调用[tiao yong].net开发的webserviceClient c=new Client(new URL(" /webservices/qqOnlineWebService.asmx?wsdl "));Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});//调用[tiao yong].net本机开发的webserviceClient c1=new Client(new URL(" http://localhost/zj/Service.asmx?wsdl "));Object[] o1=c1.invoke("HelloWorld",new String[]{});}三、使用axis1.4调用[tiao yong]webservice方法[fang fa]前提[qian ti]条件[tiao jian]:下载[xia zai] axis1.4包和tomcat 服务器[fu wu qi] ,并将axis文件[wen jian]夹复制到tomcat 服务器[fu wu qi] 的webapp文件[wen jian]夹中这里我就说一下最简单的方法[fang fa]:首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件[wen jian]夹下,将其扩展[kuo zhan]名改为jws,然后重新启动[qi dong][zhong xin qi dong]tomcat,在浏览[liu lan]器[liu lan qi]中输入[shu ru] http://localhost:8989/axis/HelloWorld.jws?wsdl ,就会得到一个wsdl文件[wen jian],其客户[ke hu]端调用[tiao yong]方法[fang fa]如下:Java 代码[dai ma]import javax.xml.rpc.Service;import javax.xml.rpc.ServiceException;import javax.xml.rpc.ServiceFactory;import .MalformedURLException;import .URL;import java.rmi.RemoteException;import space.QName;public class TestHelloWorld {public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {// TODO Auto-generated method stubString wsdlUrl =" http://localhost:8989/axis/HelloWorld.jws?wsdl ";String nameSpaceUri =" http://localhost:8989/axis/HelloWorld.jws ";String serviceName = "HelloWorldService";String portName = "HelloWorld";ServiceFactory serviceFactory = ServiceFactory.newInstance();Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);System.out.println("return value is "+proxy.getName("john") ) ;}}import javax.xml.rpc.Service;import javax.xml.rpc.ServiceException;import javax.xml.rpc.ServiceFactory;import .MalformedURLException;import .URL;import java.rmi.RemoteException;import space.QName;public class TestHelloWorld {public static void main(String[] args) throws MalformedURLException,ServiceException, RemoteException {// TODO Auto-generated method stubString wsdlUrl =" http://localhost:8989/axis/HelloWorld.jws?wsdl ";String nameSpaceUri =" http://localhost:8989/axis/HelloWorld.jws ";String serviceName = "HelloWorldService";String portName = "HelloWorld";ServiceFactory serviceFactory = ServiceFactory.newInstance();Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);System.out.println("return value is "+proxy.getName("john") ) ;}}四、使用axis2开发webservice(这里首先感谢李宁老师)使用axis2 需要先下载[xia zai]axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip/axis2/同理,也需要将axis2复制到webapp目录中在axis2中部署webservice有两种方法[fang fa],第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名第二种方式是利用xml发布webservice,这种方法[fang fa]比较灵活,不需要限制类的声明[sheng ming]下面分别说明[shuo ming]使用方法[fang fa]:1.pojo方式:在Axis2中不需要进行任何的配置[pei zhi],就可以直接将一个简单的POJO 发布成WebService。
WebService接口定义及调用
WebService接⼝定义及调⽤
Web service是⼀个平台独⽴的,松耦合的,⾃包含的、基于可编程的web的应⽤程序,可使⽤开放的XML标准来描述、发布、发现、协调和配置这些应⽤程序,⽤于开发分布式的互操作的应⽤程序。
WebService按照我⾃⼰的理解为:系统对外的桥接器——移花接⽊:“哈哈”。
话不多说,直接看操作:
操作⼀:在项⽬中新建Web服务ASMX⽂件
操作⼆:在新建的.asmx⽂件中添加需要调⽤的接⼝⽅法(定义Service对象,添加命名空间)
操作三:发布.asmx⽂件,调⽤就直接⽤域名,(右击.asmx⽂件在浏览器中显⽰);
这个就是刚定义的⽅法接⼝,现在来接收。
操作四:在另⼀个项⽬中右击引⽤——添加服务引⽤——⾼级——添加Web引⽤(可直接在添加服务引⽤Url中添加域名)
操作五:在URL中输⼊你发布的域名或本地的路径,修改引⽤名,添加引⽤。
添加后
操作六:调⽤
操作七:运⾏测试。
希望对各位有点帮助
好了,来总结下:好像也没什么东西 。
尴尬哈!。
四种方式调用webservice
四种方式调用webservice四种客户端调用WEBSERVICE 王凡***************************************2009-08-22目录1.文档概述 (2)1.1.相关文档 (2)2.SERVER端 (3)2.1.代码 (3)2.2.SERVER端生成Wsdl (4)2.3.服务端安全性设置 (6)3.VB调用 (13)3.1.准备 (13)调用 (16)4.1.实现过程 (16)5.Axis2调用 (17)5.1.Axis2的安装 (17)5.2.Axis2调用过程 (17)6.Weblogic调用 (21)6.1.Weblogic (21)7.已解决及未解决的问题 ........................................................... 错误!未定义书签。
7.1.未解决的问题.................................................................... 错误!未定义书签。
7.2.已解决的问题.................................................................... 错误!未定义书签。
1.文档概述1.1.相关文档《Web Services开发教程.doc》2.SERVER端这个主要是用weblogic的workshop开发,用weblogic开发webservice具体可见沈辉的《Web Services开发教程.doc》,这里主要是讲客户端调用,所以服务端只作罗列。
2.1.代码在weblogic中构建webservice可以见《Web Services开发教程.doc》,用于本次测试的Server代码如下:Model:package .tsingtao.logistics.model;import java.io.Serializable;public class test implements Serializable {private static final long serialVersionUID = 1L;private String NAME;private int AGE;public void setNAME(String name){NAME=name;}public void setAGE(int age){AGE=age;}public String getNAME(){return NAME;}public int getAGE(){return AGE;}}Service代码如下:public .tsingtao.logistics.model.test[] hello(String NAME,int AGE) {.tsingtao.logistics.model.test[] t=new.tsingtao.logistics.model.test[10];for(int i=0;i<10;i++){t[i] = new .tsingtao.logistics.model.test();t[i].setNAME(NAME+i);t[i].setAGE(AGE+i);}return t;}2.2.SERVER端生成Wsdl在Server端生成的wsd如下:<="" bdsfid="134" name="testServiceDefinitions" p="">targetNamespace="http://cn/com/tsingtao/logistics/service " xmlns=""xmlns:s0="/wsdl/"xmlns:s1="http://cn/com/tsingtao/logistics/service"xmlns:s2="/wsdl/soap/"><="" attributeformdefault="unqualified" bdsfid="142" elementformdefault="qualified" p="">targetNamespace="java:.tsingtao.logistics.model"xmlns:s0="/wsdl/"xmlns:s1="http://cn/com/tsingtao/logistics/service"xmlns:s2="/wsdl/soap/"xmlns:xs="/2001/XMLSchema"><="" bdsfid="163" maxoccurs="unbounded" minoccurs="0" name="test" p="">nillable="true" type="java:test" xmlns:java="java:.tsingtao.logistics.model"/><="" bdsfid="168" name="ArrayOftest_literal" p="" type="java:ArrayOftest_literal">xmlns:java="java:.tsingtao.logistics.model"/><="" attributeformdefault="unqualified" bdsfid="172" elementformdefault="qualified" p="" targetnamespace="http://cn/com/tsingtao/logistics/service"> xmlns:s0="/wsdl/"xmlns:s1="http://cn/com/tsingtao/logistics/service"xmlns:s2="/wsdl/soap/"xmlns:xs="/2001/XMLSchema"><="" bdsfid="199" name="return" p="" type="java:ArrayOftest_literal">xmlns:java="java:.tsingtao.logistics.model"/><="" bdsfid="229" p="" style="document">transport="/soap/http"/>2.3.服务端安全性设置这个是根据沈辉的《Web Services开发教程.doc》设置的,不作详细说明,只作罗列2.3.1.在weblogic中新建用户和用户组2.3.2.在webapp中配置安全性在web-info\web.xml中添加红色部分<="" bdsfid="278" id="WebApp_ID" p="" version="2.4">xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"> BSMindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspwsuserSecure Area/*GETPOSTwsuserBASICmyrealm在web-info\weblogic.xml中添加红色部分<wls:weblogic-web-app< bdsfid="334" p=""></wls:weblogic-web-app<>xmlns:wls="/ns/weblogic/weblogic-web-app"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd/ns/weblogic/weblogic-web-app/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">10.3BSMwsuserwsgroup重新发布后在浏览器中就可以看到了3.VB调用3.1.准备使用vb6.0调用webservice需要用到SOAP T oolkit,我们选用的是SOAP Toolkit3.0版本。
webservice接口的开发和调用
webservice接⼝的开发和调⽤⼀、开发webservice接⼝的⽅式1、使⽤jdk开发2、使⽤第三⽅⼯具,如cxf、shiro等⼆、使⽤jdk开发webservice接⼝以及调⽤⾸先定义⼀个天⽓预报的接⼝,Weather@WebServicepublic interface Weather {String queryWeather();}定义⼀个实现类,实现该接⼝@WebServicepublic class WeatherImpl implements Weather{public String queryWeather() {return "今⽇天⽓为晴,偏北风⼆到三级";}}写⼀个普通的类,使其继承⾃spring的上下⽂监听器,并在初始化⽅法中发布接⼝,这样在容器启动时⾃动会发布public class MyListener extends ContextLoaderListener{public void contextInitialized(ServletContextEvent event) {String address="http://localhost:8080/weather";Endpoint.publish(address, new WeatherImpl());super.contextInitialized(event);}}在web容器中设置该监听器<listener><listener-class>springframe.listener.MyListener</listener-class></listener>启动容器(如果启动过程中报错:出现类似Wrapper class webservice.jaxws.SayHi is not found. Have you run APT to generate them?表⽰发布成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WebService 四种发布方式总结Author:yczhang1.CXF方式CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为:ng.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!!!使用cxf+spring搭建WebService:第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:而泰康的was环境则需要如下jar包:明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复。
第二步,配置web.xml文件,如下(重要的地方已标记):<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:/applicationContext.xml</param-value> </context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFil ter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-c lass><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/webservice/*</url-pattern></servlet-mapping>上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;第三步,编写接口类与实现类,注意注解接口类@WebServicepublic interface SendService {public boolean sendOA(@WebParam(name="param")String param);public boolean sendOrg(OrgEntity org);}实现类@WebService(endpointInterface="com.service.SendService",serviceName=" sendService")public class SendServiceImpl implements SendService{public boolean sendOA(String param) {System.out.println("-------sendOA---------param:"+param);if(param.equals("zhoujian")){return true;}return false;}public boolean sendOrg(OrgEntity org) {System.out.println("-------sendOrg--begin-------");return true;}}第四步,Spring配置文件“jaxws:client”该标签可以不必写,访问时可以手动拼接该url 第五步,发布,直接部署到服务器,访问:2.Xfire方式据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。
Xfire方式发布webservice:第一步,添加jar包,如下:第二步,修改web.xml文件第三步,编写接口类第四步,编写services.xml配置文件在WEB-INF目录下新建目录META-INF,在该目录下新建文件夹xfire,该目录下新建文件services.xml第五步,发布,部署到服务器,访问url:3.AXIS2方式Axis2发布WebService有两种方式,其一是利用axis2插件打成aar包放到axis_war里面部署到服务器发布;其二是不打包发布(本例);我不清楚打包发布有什么好处,感觉很麻烦项目外还得部署一个war,现在介绍第二种不打包的方式,类似xfire,同时由于cxf与was不兼容导致wsdl.jar报错,但是xfire与axis2也用到wsdl.jar却不报错,我个人也是很费解,泰康项目目前使用的就是axis2方式。
Axis2发布WebService:第一步,添加jar包,如下:很多是吧,不过都是从axis.war里面WEB-INF下的lib目录复制来的。
第二步,修改web.xml文件第三步,编写实现类第四步,增加WEN-INF内容将axis.war解压下的WEN-INF文件夹内的conf、modules复制到项目WEB-INF下第五步,在WEB-INF下创建文件夹services(名字不可改),在该目录下创建文件夹(名称随意),在该目录下创建文件夹META-INF(名称不可改),在该目录下创建文件services.xml (名称不可改),该文件内容为:第六步,部署到服务器,发布URL为:4.AXIS1方式同上,不知道AXIS1哪里不好,配置也很简单,如下:第一步,添加jar包第二步,修改web.xml第三步,实现类与实体类第四步,创建配置文件:在WEB-INF下新建文件“server-config.wsdd”<?xml version="1.0"encoding="UTF-8"?><deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/providers/java"> <!-- globalConfiguration 标签内容为系统默认无需更改<globalConfiguration><parameter name="adminPassword"value="admin"/><parameter name="attachments.Directory"value="./attachments"/><parameter name="attachments.implementation"value="org.apache.axis.attachments.AttachmentsImpl"/><parameter name="sendXsiTypes"value="true"/><parameter name="sendMultiRefs"value="true"/><parameter name="sendXMLDeclaration"value="true"/><parameter name="axis.sendMinimizedElements"value="true"/><requestFlow><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope"value="session"/></handler><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope"value="request"/><parameter name="extension"value=".jwr"/></handler></requestFlow></globalConfiguration><handler name="LocalResponder"type="java:org.apache.axis.transport.local.LocalResponder"/> <handler name="URLMapper"type="java:org.apache.axis.handlers.http.URLMapper"/><handler name="Authenticate"type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/><!—service 标签是需要配置的 -→<!—name 是url中需要的参数 -→<service name="axisTest"provider="java:RPC"><!—allowedMethods的value值是方法名可以写*-→<parameter name="allowedMethods"value="*"/><!—className的value值是类路径-→<parameter name="className"value="com.Axis"/><!—wsdlTargetNamespace的wsdl文件中TargetNamespace的值-→<parameter name="wsdlTargetNamespace"value="/"/> <!—此处很重要,若方法需要传实体类,则配置此处-→<beanMapping qname="myNS:User"xmlns:myNS="urn:BeanService" languageSpecificType="java:er"/></service><!—默认-→<transport name="http"><requestFlow><handler type="URLMapper"/><handlertype="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> </requestFlow></transport><transport name="local"><responseFlow><handler type="LocalResponder"/></responseFlow></transport></deployment>第五步,部署,同上。