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、JiBXJAXBRI方式生成的代码默认使用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的更多相关文章

  1. Java调用WebService方法总结(7)--CXF调用WebService

    CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架.文中所使用到的软件版本:Java 1.8.0_1 ...

  2. Java调用WebService方法总结(6)--XFire调用WebService

    XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...

  3. Java调用WebService方法总结(4)--Axis调用WebService

    Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...

  4. Java调用WebService方法总结(3)--wsimport调用WebService

    wsimport是JDK自带的把WSDL转成Java的工具,可以很方便的生成调用WebService的代码.文中所使用到的软件版本:Java 1.8.0_191. 1.准备 参考Java调用WebSe ...

  5. Java调用WebService方法总结(2)--JAX-WS调用WebService

    用JAX-WS(Java API for XML Web Services)调用WebService不需要引入其他框架,都是JDK自带的:文中所使用到的软件版本:Java 1.8.0_191.Dom4 ...

  6. 既然 start() 方法会调用 run() 方法,为什么我们调用 start() 方法,而不直接调用 run() 方法?

    当你调用 start() 方法时,它会新建一个线程然后执行 run() 方法中的代码.如果直接调用 run() 方法,并不会创建新线程,方法中的代码会在当前调用者的线程中执行

  7. JAVA学习笔记--方法中的参数调用是引用调用or值调用

    文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...

  8. Java调用WebService方法总结(1)--准备工作

    WebService是一种跨编程语言.跨操作系统平台的远程调用技术,已存在很多年了,很多接口也都是通过WebService方式来发布的:本系列文章主要介绍Java调用WebService的各种方法,使 ...

  9. java基础:方法的定义和调用详细介绍,方法同时获取数组最大值和最小值,比较两个数组,数组交换最大最小值,附练习案列

    1. 方法概述 1.1 方法的概念 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程成为方法定义 方法创建后并不是直接可 ...

随机推荐

  1. 龙贝格积分(c++)

    用龙贝格算法计算积分 #include <iostream> #include<cmath> #include <iomanip> using namespace  ...

  2. 【转】Android ROM分析(1):刷机原理及方法

    一.刷机原理 android系统启动的时候,首先会进行一些诸如硬件自检之类的操作,这些操作完成以后(至少它应该知道当前的机器有没有电),会检查一下当前手机按键的状态(接下来就是所谓刷机模式切换了,不同 ...

  3. SpringBoot使用jasypt加解密密码

    在我们的服务中不可避免的需要使用到一些秘钥(数据库.redis等) 开发和测试环境还好,但生产如果采用明文配置讲会有安全问题,jasypt是一个通用的加解密库,我们可以使用它. <depende ...

  4. Tomcat Response encode

    Character Encoding - Apache Tomcat - Apache Software Foundation https://cwiki.apache.org/confluence/ ...

  5. ISO/IEC 9899:2011 条款6.10.3——宏替换

    6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的 ...

  6. Python高级笔记(十)闭包

    1. 闭包 #!/usr/bin/python # -*- encoding=utf- -*- def test(number): # 在函数里面再定义一个函数,并且这个函数用到外边函数的变量,那么将 ...

  7. Oracle 性能分析

    1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...

  8. PAT 甲级 1079 Total Sales of Supply Chain (25 分)(简单,不建树,bfs即可)

    1079 Total Sales of Supply Chain (25 分)   A supply chain is a network of retailers(零售商), distributor ...

  9. LODOP中无规律无法还原偶尔出现问题排查

    一些问题无法还原且偶尔出现,没法通过做例子来展示问题,为了找到问题在哪里,就需要排查定位问题 .由于这些问题偶尔出现,且无规律,出现频率低,所以只能不断通过各种对比测试,定位排查到问题和什么有关.如果 ...

  10. [LeetCode] 146. LRU Cache 近期最少使用缓存

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...