用axis调用webservice

来源:互联网 发布:linux awk print 编辑:程序博客网 时间:2024/05/17 01:59

本人测试过的小demo,用axis调用webservice实现,下面为代码:

服务端方法代码为:

public String handler(String name){return "我的名字是:"+name;}

客户端调用代码为:

public static void main(String[] args) {try{String url = "http://localhost:9001/Service/ServiceTest.jws?wsdl";String space = "http://service.zhan.com/";Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(new java.net.URL(url));call.setUseSOAPAction(true);call.setOperationName(new QName(space,"handler"));call.addParameter(new QName(space,"name"), XMLType.XSD_STRING, ParameterMode.IN);call.setReturnType(XMLType.XSD_STRING);String response = (String) call.invoke(new Object[]{"Brookes"});System.out.println("return value is: " + response);}catch (Exception ex){ ex.printStackTrace();}}

结果一运行结果为:return value is: 我的名字是:null  //方法是调通了,但是没有接收到哦参数,。。

后来研究出来了:把call.addParameter(new QName(space,"name"), XMLType.XSD_STRING, ParameterMode.IN);修改为

call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN); 就可以了。

运行后结果为:return value is: 我的名字是:Brookes

 

这是为什么呢?

结合SoapUI分析发现,如果jws通过annotation来发布,或者类似方式,通过axis调用,需要注意两点:
1)在call.setOperationName是必须通过Qname来制定namespaceURI
2)在设定参数时,不使用服务端定义的参数名,而是arg0~argN来定义,也不需制定namespaceURI,

为什么服务端的参数好端端的变为arg0-arg9呢,参数变了很不好啊。服务端需要写什么来解决这个问题啊?

方法如下:
   到 WebRoot/WEB-INF/wsdl下,找到你项目对应的****.xsd文件,将其中arg0-arg9改成您对应的接口参数名。

 



 

0 0
原创粉丝点击