当前位置:编程学习 > C#/ASP.NET >>

使用axis调用webservice时 服务端接收到的参数为null

如题,我的webservice是在myeclipse 10下基于JAX-WS的WebService开发的,过程如下链接:http://www.cnblogs.com/alden/archive/2012/02/08/2343208.html
发布的时候使用Tomcat 7,可以正常访问

服务端的代码如下:

package cn.com.wzh;

public class main {
public String callService(String TransNo, String Inxml) {
if ("test".equals(TransNo)) {
return "success:**" + TransNo + "***" + Inxml;
}
return "fault:**"+TransNo + "***" + Inxml;
}
}


用tomcat发布webservice时没有异常,信息如下:

2013-5-8 1:46:25 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory E:\apache-tomcat-7.0.39\webapps\zq
2013-5-8 1:46:28 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
信息: WSSERVLET12: JAX-WS context listener initializing
2013-5-8 1:46:34 com.sun.xml.ws.transport.http.servlet.WSServletDelegate <init>
信息: WSSERVLET14: JAX-WS servlet initializing



客户端是新建一个webproject,新建一个java文件,导入的包如下:

axis.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,wsdl4j-1.5.1.jar

其中test.java代码如下:

import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class test {
public static void main(String[] arg) {
String url = "http://192.168.153.1:8080/zq/mainPort";
String TransNo = "test";
String Inxml = "";
String namespace = "http://wzh.com.cn/";
try {
Service service = new Service();
Call call = (Call) service.createCall();
// 设置调用服务地址
call.setTargetEndpointAddress(new java.net.URL(url));
// 此处一定要配置wsdl的namespace参数http://www.hua-xia.com.cn/ZySearch
call.setOperationName(new QName(namespace, "callService"));

// 此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为null
call.addParameter(new QName(namespace, "TransNo"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName(namespace, "Inxml"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 如果设置类传入参数类型,此处也需要设置返回参数类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setUseSOAPAction(true);
call.setSOAPActionURI(url);
String result = (String) call
.invoke(new Object[] { TransNo, Inxml });
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}


使用以上代码调用时候是可以调通的,但是服务端接收的参数的值为null,打印的值如下
fault:**null***null

如果按照上面的链接的客户端开发,是可以正常调用,参数的值也有

麻烦各位帮我看看是什么原因,纠结了半天了
Web服务 webservice接收参数为null webservice axis --------------------编程问答-------------------- axis 开发太麻烦。建议用 cxf。

另外eclipse里默认有 axis webservice client 生成工具,输入wsdl就能生成客户端代理的。
何必用这种方式。

这种手动组装调用WebService的方式是对wsdl的浪费。 --------------------编程问答--------------------
引用 1 楼 fangxinggood 的回复:
axis 开发太麻烦。建议用 cxf。

另外eclipse里默认有 axis webservice client 生成工具,输入wsdl就能生成客户端代理的。
何必用这种方式。

这种手动组装调用WebService的方式是对wsdl的浪费。


我看到网上是有这种方法,所以尝试了一下,只是不懂为什么服务端接收的参数值为空?另外你说“这种手动组装调用WebService的方式是对wsdl的浪费。”  那相对于不同的开发方式来说,调用webService最好方法是呢?
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,