公司要将开发一个移动端web项目,本人只会Java,因此就有了和.net编写的WebService产生交互的需求,这几天查找了很多资料,经过同学推荐,使用了axis2来调用.net编写的WebService,具体走过的弯路且听我慢慢讲起:
才开始接触接口这个东西,领导说是我负责表现层的内容,数据交互交给一个编写.net的同事,让他给我提供接口,实现数据安全。那我就只有遵命咯,开始查阅资料看看怎么调用,刚开始不了解axis和axis2的具体用法,以为和别的jar包一样,直接引入,然后开始编程,陷入了这样一个误区之后,发现怎么查资料都是在越走越远。
知道后来看到了这个博客http://cqyqing.iteye.com/blog/1668227,说实话,我看过了很多次,都没有仔细看看,知道我自己下载到了axis1.4,然后测试了一下博客里面的方法,才认识到,原来我理解错了方法。
下面贴一下我自己的axis1.4和axis2.1.5实现的调用WebService的实现
1.axis1.4
因为不知道具体包结构,就全部引入了lib下的jar包
import java.net.URL; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class Test { public static void test() throws Exception { Service service = new Service(); Call call = null; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL( "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx")); call.setOperationName(new QName("http://WebXml.com.cn/", "getRegionCountry")); // 两个属性,第一个是命名空间,第二个是调用的方法名 call.setReturnType(XMLType.SOAP_VECTOR); // 设置返回的类型 // ,如果返回值是xml类型,别使用XMLType.SOAP_STRING类型,会报错 call.setUseSOAPAction(true); call.setSOAPActionURI("http://WebXml.com.cn/getRegionCountry"); System.out.println(call.invoke(new Object[] {})); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { test(); } }
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx是个公共的webservice接口,getRegionCountry是方法名。
上面的代码成功调用了getRegionCountry方法,并且获取到结果,在call.setReturnType(XMLType.SOAP_VECTOR)中,曾经掉入一个大坑无法自拔,把其中的返回类型写成了XMLType.SOAP_STRING,结果报反序列化失败的问题,查找了半天,还是因为返回类型设置错了,设置成XMLType.SOAP_VECTOR就可以正常使用了。
2.axis2.1.5(如果没有java调用webservice的基础,请跟我来)
官网下载axis2-1.5.6-bin.zip
解压到自己的硬盘目录下
打开cmd,切换到刚才解压的axis2中的bin目录,然后运行命令 wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl ,然后回车(这个命令的意思是将上面的公共webservice生成本地类),axis2就会在bin目录下面,生成src目录,进去看,就会发现将webservice生成了本地类, 将产生的本地类引入自己的工程,然后就可以像是调用本地类一样来调用webservice的接口,具体根据自己的项目来实现
public class ClientYRTWebService { public static void test1() { try { Service1Stub stub = new Service1Stub(); //这个类是由axis2的wsdl2java.bat自动生成的类,将其引入到工程中 stub._getServiceClient() .getOptions() .setProperty( org.apache.axis2.transport.http.HTTPConstants.CHUNKED, //暂时不了解什么意思,等我有空看看axis2的api Boolean.FALSE); StaffLogin staffLogin = new StaffLogin(); //这个是staffLogin方法,axis2将方法直接生成一个类,实例化后来使用 staffLogin.setUserName("**"); staffLogin.setPassword("admin"); //设置输入的参数,我这里有两个参数,用户名和密码 try { String str = stub.staffLogin(staffLogin).getStaffLoginResult(); //这里获取到webservice的返回结果,我的项目为xml格式的返回,因此,要对返回的结 System.out.println(str); // 果进行解析,但是这里就暂时不贴了 } catch (RemoteException e) { e.printStackTrace(); } } catch (AxisFault e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { test1(); } }
运行后返回的结果,就是我想得到的xml格式的结果。
结论:
1.axis1可能更容易理解常规的Java开发的步骤,但是axis2将webservice生成本地的类后,调用起来更容易,比axis1简单太多
2.axis2生成本地类的时候可能会有些麻烦,但是,一旦生成,那开发的速度将是杠杠的
3.多看文档吧,学习英文吧骚年!
写于2015-3-5 合肥
相关推荐
本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。
springboot 集成axis1.4的webservice,该为maven的工程
Java调用.NET的WebService接口实例,jar包删减到三个,干净清爽,里面包含注多注释和图解,搞了半天的家伙拿出来与大家分享,无任何BUG,修改里面的参数即可直接运行,对于这种好东西,花了半天时间10分不算高,重在...
axis1.4和axis2相关jar文件,axis1.4和axis2相关jar文件
axis1.4完整包下载Apache Axis是一种SOAP(简单对象访问协议”)实现。 包含 Axis1.4的所有完整包。
java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。
用于axis1.4开发webService。 文件包含,axis1.4.ZIP以及其他所需jar包,和生成webservice客户端,生成webService服务端发布 的详细教程说明。
Axis1.4如何实现头部鉴权(包括实现类模板)
axis1.4+mybatis3+spring3集成实现webservice;websphere下Log4j记录日志解决方案;
axis1.4生成客户端 根据WSDL生成客户端和服务端
使用spring3+ cxf 3.4做服务方,Axis1.4做请求方,在调用的时候,通过转换cxf的wsdl格式为axis1.4的wsdl格式来达到调用的目的。
java采用axis调用.net写的WebService,WebService的参数有传人和传出,传出的参数为ref,java端ParameterMode.OUT,传人的为ParameterMode.IN,WebService返回值为String,java利用Map取传出参数,对Map进行遍历取得...
axis1.4开发webservice源码 包含webservice发布 与客户端调用
内有axis1.4jar包以及使用eclipse和axis1.4 将WSDL和服务端代码互转方法 亲测可用
axis1.4生成访问客户端代码
webservice axis1.4服务搭建
Axis1.4开发指南.pdf axis-bin-1_4.zip axis相关文档 axis1.4 开发jar包
java org.apache.axis.wsdl.WSDL2Java -u http://xxxxxx?wsdl -p com.webservice.wsdl -t -u 要访问的webservice的地址标准的wsdl文件 -p 生成java文件的包名 -t 生成的java文件中包含junit的测试代码。 详见...
axis1.4的帮助文档,WEBService发布必备产品。