Java调用WebService方法总结(5)--Axis2调用WebService
Axis2是新一点Axis,基于新的体系结构进行了全新编写,有更强的灵活性并可扩展到新的体系结构。文中demo所使用到的软件版本:Java 1.8.0_191、Axis2 1.7.9。
1、准备
参考Java调用WebService方法总结(1)--准备工作
2、调用
2.1、AXIOM方式
AXIOM即AXis对象模型(AXis Object Model)是Apache Axis2的XML对象模型,可以大幅提升Axis2的性能。
- /**
- * axiom方式
- * @param param
- */
- public static void axiom(String param) {
- try {
- ServiceClient client = new ServiceClient();
- Options options = client.getOptions();
- EndpointReference endpointReference = new EndpointReference(url);
- options.setTo(endpointReference);
- // 设置SOAPAction
- options.setAction("http://webxml.com.cn/toTraditionalChinese");
- // 设置soap版本
- options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
- //options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
- OMFactory factory = OMAbstractFactory.getOMFactory();
- OMNamespace namespace = factory.createOMNamespace(targetNamespace, "");
- OMElement method = factory.createOMElement("toTraditionalChinese", namespace);
- OMElement value = factory.createOMElement("sText", namespace);
- value.addChild(factory.createOMText(value, param));
- method.addChild(value);
- method.build();
- OMElement result = client.sendReceive(method);
- System.out.println(result);
- System.out.println(result.getFirstElement().getText());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
5.2、ADB方式
ADB即Axis Data Binding,Axis2自己的数据绑定方法。
2.2.1、用wsdl2java生成代码
- %AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.adb -d adb -s -o temp
-d 指定数据绑定方式
-p 指定包名
-o 指定代码生成的目录,指定的目录就生成在当前目录下,windows下指定绝对路径不生效(如:d:/temp)
命令会生成一个java文件:
2.2.2、生成代码调用WebService
- /**
- * adb方式
- * @param param
- */
- public static void adb(String param) {
- try {
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub();
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese request = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese();
- request.setSText(param);
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChineseResponse response = stub.toTraditionalChinese(request);
- System.out.println("adb结果:" + response.getToTraditionalChineseResult());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2.3、XMLBeans方式
使用XML Beans数据绑定方式。
2.3.1、用wsdl2java生成代码
- %AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.xmlbeans -d xmlbeans -s -o temp
与adb方式相比只有-d参数的值不同。
这种方式会生成好多文件,src下有三个文件目录,里面有好多文件就不一一展开了:
resources目录下有:
注:需把schemaorg_apache_xmlbeans放到classpath中否则会报错误:找不到相关类。
2.3.2、生成代码调用WebService
- /**
- * xmlbeans方式
- * @param param
- */
- public static void xmlbeans(String param) {
- try {
- com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub();
- ToTraditionalChineseDocument document = ToTraditionalChineseDocument.Factory.newInstance();
- ToTraditionalChineseDocument.ToTraditionalChinese request = document.addNewToTraditionalChinese();
- request.setSText(param);
- ToTraditionalChineseResponseDocument response = stub.toTraditionalChinese(document);
- System.out.println("xmlbeans:" + response.getToTraditionalChineseResponse().getToTraditionalChineseResult());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2.4、JiBX方式
使用JiBX数据绑定方式。
2.4.1、用wsdl2java生成代码
- %AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.jibx -d jibx -s -uw -o temp
与adb方式相比除了-d参数值不同,还需增加-uw参数。
命令会生成两个文件:
2.4.2、生成代码调用WebService
- /**
- * jibx方式
- * @param param
- */
- public static void jibx(String param) {
- try {
- com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub();
- String result = stub.toTraditionalChinese(param);
- System.out.println("jibx结果:" + result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2.5、JAXBRI方式
使用JAXBRI数据绑定方式。
2.5.1、用wsdl2java生成代码
- %AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.jaxbri -d jaxbri -s -o temp
与adb方式相比只有-d参数值不同。
命令会生成两个目录,一个值以命名空间生成的目录cn.com.webxml,一个是指定的包名com.inspur.ws.axis2.jaxbri。
2.5.2、生成代码调用WebService
- /**
- * jaxbri方式
- * @param param
- */
- public static void jaxbri(String param) {
- try {
- com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub();
- cn.com.webxml.ToTraditionalChinese toTraditionalChinese = new cn.com.webxml.ToTraditionalChinese();
- toTraditionalChinese.setSText(param);
- String result = stub.toTraditionalChinese(toTraditionalChinese).getToTraditionalChineseResult();
- System.out.println("jaxbri结果:" + result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
2.6、小结
AXIOM方式不需要生成额外代码,ADB和JiBX方式生成的代码较少,JAXBRI生成代码较多,XMLBeans生成的代码最多比较啰嗦;生成代码是还可以用-t参数来生成测试用例。ADB、XMLBeans、JiBX和JAXBRI方式生成的代码默认使用Soap1.2协议,没有生成两个版本。程序中所使用的jar包在%AXIS2_HOME%/lib中都可以找到,可以根据需要添加。下面是完整的demo,要测试某一个方法可以把其他的先注释掉。
- package com.inspur.ws;
- import org.apache.axiom.om.OMAbstractFactory;
- import org.apache.axiom.om.OMElement;
- import org.apache.axiom.om.OMFactory;
- import org.apache.axiom.om.OMNamespace;
- import org.apache.axiom.soap.SOAP11Constants;
- import org.apache.axis2.addressing.EndpointReference;
- import org.apache.axis2.client.Options;
- import org.apache.axis2.client.ServiceClient;
- /**
- *
- * Axis2调用WebService
- *
- */
- public class Axis2 {
- private static String url = "http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl";
- private static String targetNamespace = "http://webxml.com.cn/";
- /**
- * axiom方式
- * @param param
- */
- public static void axiom(String param) {
- try {
- ServiceClient client = new ServiceClient();
- Options options = client.getOptions();
- EndpointReference endpointReference = new EndpointReference(url);
- options.setTo(endpointReference);
- // 设置SOAPAction
- options.setAction("http://webxml.com.cn/toTraditionalChinese");
- // 设置soap版本
- options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
- //options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
- OMFactory factory = OMAbstractFactory.getOMFactory();
- OMNamespace namespace = factory.createOMNamespace(targetNamespace, "");
- OMElement method = factory.createOMElement("toTraditionalChinese", namespace);
- OMElement value = factory.createOMElement("sText", namespace);
- value.addChild(factory.createOMText(value, param));
- method.addChild(value);
- method.build();
- OMElement result = client.sendReceive(method);
- System.out.println(result);
- System.out.println("axiom结果:" + result.getFirstElement().getText());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * adb方式
- * @param param
- */
- public static void adb(String param) {
- try {
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub();
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese request = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese();
- request.setSText(param);
- com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChineseResponse response = stub.toTraditionalChinese(request);
- System.out.println("adb结果:" + response.getToTraditionalChineseResult());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * xmlbeans方式
- * @param param
- */
- public static void xmlbeans(String param) {
- try {
- com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub();
- cn.com.webxml.ToTraditionalChineseDocument document = cn.com.webxml.ToTraditionalChineseDocument.Factory.newInstance();
- cn.com.webxml.ToTraditionalChineseDocument.ToTraditionalChinese request = document.addNewToTraditionalChinese();
- request.setSText(param);
- cn.com.webxml.ToTraditionalChineseResponseDocument response = stub.toTraditionalChinese(document);
- System.out.println("xmlbeans结果:" + response.getToTraditionalChineseResponse().getToTraditionalChineseResult());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * jibx方式
- * @param param
- */
- public static void jibx(String param) {
- try {
- com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub();
- String result = stub.toTraditionalChinese(param);
- System.out.println("jibx结果:" + result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * jaxbri方式
- * @param param
- */
- public static void jaxbri(String param) {
- try {
- com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub();
- cn.com.webxml.ToTraditionalChinese toTraditionalChinese = new cn.com.webxml.ToTraditionalChinese();
- toTraditionalChinese.setSText(param);
- String result = stub.toTraditionalChinese(toTraditionalChinese).getToTraditionalChineseResult();
- System.out.println("jaxbri结果:" + result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- axiom("小学");
- adb("大学");
- xmlbeans("小学");
- jibx("大学");
- jaxbri("大学");
- }
- }
Java调用WebService方法总结(5)--Axis2调用WebService的更多相关文章
- Java调用WebService方法总结(7)--CXF调用WebService
CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架.文中所使用到的软件版本:Java 1.8.0_1 ...
- Java调用WebService方法总结(6)--XFire调用WebService
XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...
- Java调用WebService方法总结(4)--Axis调用WebService
Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...
- Java调用WebService方法总结(3)--wsimport调用WebService
wsimport是JDK自带的把WSDL转成Java的工具,可以很方便的生成调用WebService的代码.文中所使用到的软件版本:Java 1.8.0_191. 1.准备 参考Java调用WebSe ...
- Java调用WebService方法总结(2)--JAX-WS调用WebService
用JAX-WS(Java API for XML Web Services)调用WebService不需要引入其他框架,都是JDK自带的:文中所使用到的软件版本:Java 1.8.0_191.Dom4 ...
- 既然 start() 方法会调用 run() 方法,为什么我们调用 start() 方法,而不直接调用 run() 方法?
当你调用 start() 方法时,它会新建一个线程然后执行 run() 方法中的代码.如果直接调用 run() 方法,并不会创建新线程,方法中的代码会在当前调用者的线程中执行
- JAVA学习笔记--方法中的参数调用是引用调用or值调用
文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...
- Java调用WebService方法总结(1)--准备工作
WebService是一种跨编程语言.跨操作系统平台的远程调用技术,已存在很多年了,很多接口也都是通过WebService方式来发布的:本系列文章主要介绍Java调用WebService的各种方法,使 ...
- java基础:方法的定义和调用详细介绍,方法同时获取数组最大值和最小值,比较两个数组,数组交换最大最小值,附练习案列
1. 方法概述 1.1 方法的概念 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程成为方法定义 方法创建后并不是直接可 ...
随机推荐
- SpringSecurity的简单入门
以下是大体思路 1.导入坐标 <properties> <spring.version>4.2.4.RELEASE</spring.version> </pr ...
- 微信小程序之网络通信
关于网络通信,这里我使用的是wx.request,官方代码示例如下: wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: ...
- hdu1002 A + B Problem II[大数加法]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu1002 题干 代码和解释 由题意这是一个涉及到大数的加法问题.去看了一眼大数加法的方法感觉头很大,然后突然发现Java可以流氓解决大数问题,毅 ...
- modao账户
chairman987@163.com 墨刀注册 p@ssw0rd OR 123456
- WEB API 的设计与开发
- 【转】vue中样式被覆盖的问题,vue中的style不生效
转载:http://www.cnblogs.com/shangjun6/p/11416054.html 在我们引入外部的样式时,发现自己无论如何都改不了外部的样式,自己的样式老被覆盖,究其原因还是我们 ...
- jquery数组倒序
倒叙前:var mem = [1, 2, 3]: 倒序后:var men1=[3,2,1]: <script type="text/javascript"> $(fun ...
- 第2课第6节_Java面向对象编程_包和权限_P【学习笔记】
摘要:韦东山android视频学习笔记 1.使用package定义编译的时候存放的位置 package a.b.c.d; public class Package { public static v ...
- [转]Vue CLI 3搭建vue+vuex 最全分析
原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...
- pip的安装
1.get-pip.py安装 (官方)https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py $wget https: ...