通用webservice客户端一

这里的通用webservice客户端是指不用命令生成代码就可以完成的webservice客户端,很多时候在写webservice客户端时,都在猜对方用的什么服务端,猜不对,就不清楚用什么命令生成代码,索性就挨个试试,反正java就是3个,Axis、Axis2、CXF。要是java的客户端,接入服务端是.net的就闹心了,Axis、Axis2、CXF都能写通用客户端,另外HttpClient也可以写,就是代码有点麻烦,所以个人不太喜欢。这里主要是使用Axis的通用客户端代码,主要的好处是代码清晰易懂,坏处也很明显,

1.某些参数类型生成xml,服务端解析不了,这些参数需要自己抓包去看,这个需要克服技巧

2.不支持http1.1,这个主要体现是速度慢,网上倒是有方案修改,但是没弄过,换Axis2或CXF的试过是可以的

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import javax.xml.namespace.QName;

public class TestService {
    public static void main(String[] args) throws Exception {
        Service service = new Service();//new 一个服务
        Call call = (Call) service.createCall();//创建一个call对象

      //下面这条语句,当服务端是.net程序时,是必须写的(服务端是java可不用写),参数内容可见于wsdl文档中,targetNamespace/方法名

call.setTimeout(new Integer(60000));//注意设置超时时间

        call.setSOAPActionURI("SOAPAction");
call.setTargetEndpointAddress(new java.net.URL("服务端地址"));
        QName qn = new QName("targetNamespace或xmlns", "方法名");

        call.setOperationName(qn);//设置要调用的接口方法

QName qn1 = new QName("targetNamespace或xmlns", "参数名");

 call.addParameter(qn1, org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//注意参数类型;.net要求比较严格需要targetNamespace或xmlns和方法名或者参数名才能传递;org.apache.axis.encoding.XMLType.SOAP_VECTOR对应.net的ArrayOfString
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//返回参数类型
        call.setUseSOAPAction(true);
        String result = (String) call.invoke(new Object[]{参数});

        System.out.println(result);//打印字符串

}}

排版真的有点费劲,大家见谅

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值