webservice四种发布方式及客户端调用

合集下载

调用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-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调用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有几种不同的实现方式。

下面简单介绍几种可以实现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。。。

【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四种发布方式及客户端调用

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几种调用方式

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服务的四种方法总结

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服务的⽅法名、命名空间、以及对应的参数就好。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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>第五步,部署,同上。

相关文档
最新文档