JAVA调用.net webservice提示参数为空

guogy 2011-07-23 09:38:54
最近在调试JAVA调用.net webservice接口时,老是碰到一个问题,提示参数为空,解析不了。

<errorDesc>值不能为空。参数名: s</errorDesc>

上面是接口返回的错误,实际上.net webservice内部测试是没问题的。

而JAVA如果调用.NET 没带参数的接口,也能正常调用。

纠结死了,看了网上说要给参数加上命名空间啥的,我已经加上了,还是提示参数空。

求各位高手帮忙指导一下啊,万分感激。

下面贴上我的代码,

public String retrieveDocument(String userName,String userPassword,String xmlParam) throws Exception{

String result = "dd";
Service service = new Service();
Call call = (Call) service.createCall();

// 设置请求的URL
call.setTargetEndpointAddress(new URL(
"http://localhost/henandhip/services/DocumentRegistry_Service.asmx"));

//设置请求的方法
call.setOperationName(new QName(NAMESPACE, "retrieveDocument"));

//设置方法的参数
call.addParameter(new QName(NAMESPACE,"userName"), XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName(NAMESPACE,"userPassword"), XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName(NAMESPACE,"xmlParam"), XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

// 设置方法的返回值类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

call.setUseSOAPAction(true);
// 设置SOAPAction
call.setSOAPActionURI(NAMESPACE + "retrieveDocument");

result = (String) call.invoke(new Object[] { userName, userPassword,xmlParam});
return result;
}
...全文
1721 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl1zl2zl3 2012-10-12
  • 打赏
  • 举报
回复
关键点在java代码的
call.addParameter(new QName(NAMESPACE,"userName"), XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
这个userName必须和C#代码里相应方法,比如retrieveDocument((String userName,String userPassword,String xmlParam)的参数名字一模一样,否则参数为空。
lhf1990729 2012-05-15
  • 打赏
  • 举报
回复
后来我也解决了、使用代理类的方式、然后。net端再做相关修改即可
qrxlyy 2012-05-15
  • 打赏
  • 举报
回复
楼主 是怎么解决的呀 我也遇到这样的情况 纠结啊
zuizhongmeng 2012-05-15
  • 打赏
  • 举报
回复
c#写的service接口,部署测试正常。{注释必须有,不然无法获取xml字符串}

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Services.Description;

[WebService(Namespace = "http://hoteamsoft.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService
{
public Service () {

//Uncomment the following line if using designed components
//InitializeComponent();
}
//下面的引用关系必须加----begin
[SoapRpcMethod(Action = "http://hoteamsoft.org/HelloWorld1",
RequestNamespace = "http://hoteamsoft.org/T",
ResponseNamespace = "http://hoteamsoft.org/T ",
Use = SoapBindingUse.Literal)]
[WebMethod]
//上面的引用必须加----end
public string HelloWorld1(string obj)
{
return "Hello World =" + obj + " = " + DateTime.Now.ToString();
}

}

java调用的方法如下:

public String GetMaterial(String xmlString) {

try {
// 指出service所在URL
String endpoint = "http://localhost:81/webService/Service.asmx";
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call)service.createCall();// 通过service创建call对象
// 设置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
//设置要调用的方法
call.setOperationName( new QName( "http://hoteamsoft.org/T","HelloWorld1" ));
//设置该方法需要的参数
call.addParameter("obj" , 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("http://hoteamsoft.org/HelloWorld1");
String backStr = (String) call.invoke(new Object[] { xmlString });
System.out.println("sss"+backStr);

} catch (Exception e) {
e.printStackTrace();
return e.toString();
}
}
  • 打赏
  • 举报
回复
我也是、求指教啊、
比特灵 2011-11-24
  • 打赏
  • 举报
回复
请问LZ解决了没有,我也碰到这个问题
guogy 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangsheng 的回复:]
用Fiddler比较一下.Net和java客户端发送的数据的差异
[/Quote]
不会使用。
蒋晟 2011-07-23
  • 打赏
  • 举报
回复
用Fiddler比较一下.Net和java客户端发送的数据的差异
guogy 2011-07-23
  • 打赏
  • 举报
回复
自己顶起,求高手赐教,急啊……

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧