axis,jax-ws,xfire客户端调用
?
axis,jax-ws,xfire客户端调用分析,以及webservice万能客户端最近一个项目需要调用一个webservice接口,遇到一个问题.项目中的jdom版本为0.9.而webservice client需要用到jdom1.0 如果将jdom版本升级则会造成现有系统异常. 因此需要在不改变现有项目jar的情况下解决这个问题.service端使用的jax-ws2. wsdl如下:
Java代码<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at . RI's version is JAX-WS RI 2.1.1 in JDK 6. --><!-- Generated by JAX-WS RI at . RI's version is JAX-WS RI 2.1.1 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.hua-xia.com.cn/ZySearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.hua-xia.com.cn/ZySearch" >
<types></types> <message > <part type="xsd:string"></part> </message> <message > <part type="xsd:string"></part> </message> <portType > <operation parameterOrder="linkNo"> <input message="tns:getUserLink"></input> <output message="tns:getUserLinkResponse"></output> </operation> </portType> <binding type="tns:UserLinkWebService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"></soap:binding> <operation > <soap:operation soapAction="getUserLink"></soap:operation> <input> <soap:body use="literal" namespace="> </input> <output> <soap:body use="literal" namespace="> </output> </operation> </binding> <service > <port binding="tns:UserLinkWebServicePortBinding"> <soap:address location="> </port> </service> </definitions>
?
1.xfire调用
对方给我们的client是使用xfire的client调用,代码如下:
Java代码
package com.zhongying.bussserv.common; import java.net.URL; public class Test {
} ? 2.axis调用但是由于jar包的原因,我们不能使用上面的方法,想出的第一个解决方案是使用axis的客户端来调用接口,代码如下:
Java代码
public class TestReflection { ?public static void main(String[] arg) { ??String url = "http://192.168.1.1:9010/ZySearch"; ??try { ???Service service = new Service(); ???//此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为null ???String result = (String) call.invoke(new Object[] { "AD0006526305" }); ???XStream xStream = new XStream(new DomDriver()); ???Iterator it = map.entrySet().iterator(); ???while (it.hasNext()) { ????Map.Entry enty = (Entry) it.next(); ????System.out.println(enty.getKey() + ":" + enty.getValue()); ???} ???e.printStackTrace(); ? 3.http模拟调用由于开始对axis的了解有限,在写axis调用是总是有问题,于是便想了另外一个方法,这个方法有点剑走偏锋.但是适用性却很强,因为调用的是java自带的api不会产生兼容性问题. 大家知道webservice请求实际上也就是一个http请求,将数据通过xml文件进行交换. 既然知道了原理我们就可以模拟一个http请求来调用webservice.
Java代码
try{ ??????????? URL getUrl = new URL(url2); ??????????? HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); ??????????? String send="<soap:Envelope xmlns:soap="" xmlns:xsd="" xmlns:xsi=" xmlns:ns1=" xmlns="">"+par+"</linkNo></ns1:getUserLink></soap:Body></soap:Envelope>"; ? ? 4.jax-ws调用最后再写上一个jax-ws的client代码
Java代码
import javax.xml.namespace.QName;
??QName serviceName = new QName(targetNamespace,serName); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |