首页 > 其他分享 >AXIS2 webservice客户端调用服务端的三种方式

AXIS2 webservice客户端调用服务端的三种方式

时间:2022-12-26 12:12:58浏览次数:35  
标签:调用 String AXIS2 new org apache import 服务端 webservice

转载至:https://blog.csdn.net/zz210891470/article/details/52316011?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-52316011-blog-89667922.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-52316011-blog-89667922.pc_relevant_landingrelevant&utm_relevant_index=17

  1 package samples.quickstart.client;  
  2   
  3 import javax.xml.namespace.QName;  
  4 import org.apache.axiom.om.OMAbstractFactory;  
  5 import org.apache.axiom.om.OMElement;  
  6 import org.apache.axiom.om.OMFactory;  
  7 import org.apache.axiom.om.OMNamespace;  
  8 import org.apache.axis2.AxisFault;  
  9 import org.apache.axis2.addressing.EndpointReference;  
 10 import org.apache.axis2.client.Options;  
 11 import org.apache.axis2.client.ServiceClient;  
 12 import org.apache.axis2.rpc.client.RPCServiceClient;  
 13 import samples.quickstart.StockQuoteServiceStub;  
 14 import samples.quickstart.xsd.GetPrice;  
 15 import samples.quickstart.xsd.GetPriceResponse;  
 16   
 17 public class StockQuoteClient {  
 18   
 19   /** 
 20    * 方法一: 
 21    * 应用rpc的方式调用 这种方式就等于远程调用, 
 22    * 即通过url定位告诉远程服务器,告知方法名称,参数等, 调用远程服务,得到结果。 
 23    * 使用 org.apache.axis2.rpc.client.RPCServiceClient类调用WebService 
 24    * 
 25     【注】: 
 26      
 27         如果被调用的WebService方法有返回值 应使用 invokeBlocking 方法 该方法有三个参数 
 28           第一个参数的类型是QName对象,表示要调用的方法名; 
 29           第二个参数表示要调用的WebService方法的参数值,参数类型为Object[]; 
 30             当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。 
 31           第三个参数表示WebService方法的 返回值类型的Class对象,参数类型为Class[]。 
 32          
 33          
 34         如果被调用的WebService方法没有返回值 应使用 invokeRobust 方法 
 35           该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。 
 36  
 37         在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名, 
 38         也就是 <wsdl:definitions>元素的targetNamespace属性值。 
 39    * 
 40    */  
 41   public static void testRPCClient() {  
 42     try {  
 43       // axis1 服务端  
 44 // String url = "http://localhost:8080/StockQuote/services/StockQuoteServiceSOAP11port?wsdl";  
 45       // axis2 服务端  
 46       String url = "http://localhost:8080/axis2ServerDemo/services/StockQuoteService?wsdl";  
 47   
 48       // 使用RPC方式调用WebService  
 49       RPCServiceClient serviceClient = new RPCServiceClient();  
 50       // 指定调用WebService的URL  
 51       EndpointReference targetEPR = new EndpointReference(url);  
 52       Options options = serviceClient.getOptions();  
 53       //确定目标服务地址  
 54       options.setTo(targetEPR);  
 55       //确定调用方法  
 56       options.setAction("urn:getPrice");  
 57   
 58       /** 
 59        * 指定要调用的getPrice方法及WSDL文件的命名空间 
 60        * 如果 webservice 服务端由axis2编写 
 61        * 命名空间 不一致导致的问题 
 62        * org.apache.axis2.AxisFault: java.lang.RuntimeException: Unexpected subelement arg0 
 63        */  
 64       QName qname = new QName("http://quickstart.samples/xsd", "getPrice");  
 65       // 指定getPrice方法的参数值  
 66       Object[] parameters = new Object[] { "13" };  
 67         
 68       // 指定getPrice方法返回值的数据类型的Class对象  
 69       Class[] returnTypes = new Class[] { double.class };  
 70   
 71       // 调用方法一 传递参数,调用服务,获取服务返回结果集  
 72       OMElement element = serviceClient.invokeBlocking(qname, parameters);  
 73       //值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。  
 74       //我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果  
 75       String result = element.getFirstElement().getText();  
 76       System.out.println(result);  
 77   
 78       // 调用方法二 getPrice方法并输出该方法的返回值  
 79       Object[] response = serviceClient.invokeBlocking(qname, parameters, returnTypes);  
 80       // String r = (String) response[0];  
 81       Double r = (Double) response[0];  
 82       System.out.println(r);  
 83   
 84     } catch (AxisFault e) {  
 85       e.printStackTrace();  
 86     }  
 87   }  
 88   
 89   /** 
 90    * 方法二: 应用document方式调用 
 91    * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合 
 92    */  
 93   public static void testDocument() {  
 94     try {  
 95       // String url = "http://localhost:8080/axis2ServerDemo/services/StockQuoteService";  
 96       String url = "http://localhost:8080/StockQuote/services/StockQuoteServiceSOAP11port?wsdl";  
 97   
 98       Options options = new Options();  
 99       // 指定调用WebService的URL  
100       EndpointReference targetEPR = new EndpointReference(url);  
101       options.setTo(targetEPR);  
102       // options.setAction("urn:getPrice");  
103   
104       ServiceClient sender = new ServiceClient();  
105       sender.setOptions(options);  
106         
107         
108       OMFactory fac = OMAbstractFactory.getOMFactory();  
109       String tns = "http://quickstart.samples/";  
110       // 命名空间,有时命名空间不增加没事,不过最好加上,因为有时有事,你懂的  
111       OMNamespace omNs = fac.createOMNamespace(tns, "");  
112   
113       OMElement method = fac.createOMElement("getPrice", omNs);  
114       OMElement symbol = fac.createOMElement("symbol", omNs);  
115       // symbol.setText("1");  
116       symbol.addChild(fac.createOMText(symbol, "Axis2 Echo String "));  
117       method.addChild(symbol);  
118       method.build();  
119         
120       OMElement result = sender.sendReceive(method);  
121   
122       System.out.println(result);  
123   
124     } catch (AxisFault axisFault) {  
125       axisFault.printStackTrace();  
126     }  
127   }  
128   
129  /** 
130   * 为SOAP Header构造验证信息, 
131   * 如果你的服务端是没有验证的,那么你不用在Header中增加验证信息 
132   * 
133   * @param serviceClient 
134   * @param tns 命名空间 
135   * @param user 
136   * @param passwrod 
137   */  
138   public void addValidation(ServiceClient serviceClient, String tns , String user, String passwrod) {  
139     OMFactory fac = OMAbstractFactory.getOMFactory();  
140     OMNamespace omNs = fac.createOMNamespace(tns, "nsl");  
141     OMElement header = fac.createOMElement("AuthenticationToken", omNs);  
142     OMElement ome_user = fac.createOMElement("Username", omNs);  
143     OMElement ome_pass = fac.createOMElement("Password", omNs);  
144       
145     ome_user.setText(user);  
146     ome_pass.setText(passwrod);  
147       
148     header.addChild(ome_user);  
149     header.addChild(ome_pass);  
150   
151     serviceClient.addHeader(header);  
152   }  
153   
154     
155   /** 
156    * 方法三:利用axis2插件生成客户端方式调用 
157    * 
158    */  
159   public static void testCodeClient() {  
160     try {  
161       String url = "http://localhost:8080/axis2ServerDemo/services/StockQuoteService";  
162       StockQuoteServiceStub stub = new StockQuoteServiceStub(url);  
163       GetPrice request = new GetPrice();  
164       request.setSymbol("ABCD");  
165       GetPriceResponse response = stub.getPrice(request);  
166       System.out.println(response.get_return());  
167     } catch (org.apache.axis2.AxisFault e) {  
168       e.printStackTrace();  
169     } catch (java.rmi.RemoteException e) {  
170       e.printStackTrace();  
171     }  
172   
173   }  
174   
175   public static void main(String[] args) {  
176      StockQuoteClient.testRPCClient();  
177 // StockQuoteClient.testDocument();  
178     // StockQuoteClient.testCodeClient();  
179   
180   }  
181 }  

 

标签:调用,String,AXIS2,new,org,apache,import,服务端,webservice
From: https://www.cnblogs.com/BelieveFish/p/17005451.html

相关文章

  • python中socket使用UDP协议简单实现服务端与客户端通信
    UDP为不可靠传输,也就是发送方不关心对方是否收到消息,一般用于聊天软件。但现在的聊天软件虽然使用的是UDP协议,但已从代码层面上解决了丢失信息的问题。下面使用python代码......
  • WebService简单教学??SpringBoot整合CXF的快速入门??CXF发布Rest服务
    目录​##springboot整合CXF的快速入门##​​一,服务端提供webservice服务​​​1,实体类User​​​​2,webservice接口​​​​3,webservice接口的实现类​​​​4,CXF配置类​​......
  • pkg 打包node服务端 填坑记录!!
    产品服务端使用nodejs开发,部署时不能将代码部署到服务器,所以查到可用pkg将node服务端打包成exe,事先已经查了不少资料,本以为是一个很简单的事情,结果折腾了一天,才算搞定。现......
  • nginx 配置服务端地址
    server{listen8099;server_namelianghj.top;#charsetkoi8-r;#access_loglogs/host.access.logmain;......
  • 查看系统的服务端口号
    查看系统的服务端口号 1netstat-tnlp  netstat 的关于所配置的网络接口,诸如以下的流量命令显示信息:与所有sockets关联的任何协议控制块的地址以及所有sockets的......
  • 使用SocketServer 创建TCP服务端
    **Java能够接受其他通信实体连接请求的类是ServerSocket,如果没有连接,他将一直处于等待状态,线程也被堵塞。ServerSocket包含一个监听来自客户端请求连接的方法。Socke......
  • weblogic上部署CXFwebservice 错误!
    转自https://www.pianshen.com/article/4737505565/发布到weblogic上,输入网址http://localhost:7002/CxfTest/ws/helloService?wsdl;能正常显示出xml1、但是在客户端调用......
  • webservice简介&CXF入门
    WebService它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. 面向服务架构规范及三要素 1)           SOAP协议:webservice的传输协议,......
  • (转)jmeter 测试webservice
    地址:http://itindex.net/detail/45270-jmeter-webservice-%E6%B5%8B%E8%AF%95 1. BuildingaWebServiceTestPlan参考​​http://jmeter.apache.org/usermanual/build-w......
  • Kotlin + SpringBoot + JPA 服务端开发
    Kotlin+SpringBoot+JPA服务端开发本篇主要介绍一下kotlin+springboot的服务端开发环境搭建1.概述Kotlin是一个基于JVM的编程语言,是IDEA开发工具jetbrai......