记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""

在使axis调用webservice服务端,参照网上给的demo:

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);//设置服务请求路径
QName qn = new QName(name);  
call.setOperationName(qn); 
call.addParameter("kkbh", XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("fxbh", XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(XMLType.XSD_LONG);//设置服务请求后返回数据类型
call.invoke(new Object[] {"skldjk","skldjk"});//服务请求时,传入的参数数据

流程走下来,进行测试的时候控制台一直报一个异常:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
faultSubcode: 
faultString: Unmarshalling Error: For input string: "" 
faultActor: 
faultNode: 
faultDetail: 
{http://xml.apache.org/axis/}stackTrace:Unmarshalling Error: For input string: "" 
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606)
。。。。。。。。。

更奇葩的时,当传入的参数为类型或者返回值的类型为String时不会有任何问题,当调用的方法有long,int,boolean等类型参数时就一直会报上面这个错误。


请教过同事,也在网络上搜索过终于还是一无所获,一直陷入迷茫,怀疑人生。后来很偶然在以为老哥的博客中看到一句代码:

call.setEncodingStyle("utf-8");



怀着一点点希望复制过去试了一试,竟然真的可以顺利执行。真的太狗血啊啊啊。主要是网上很例子用的string类型的参数,所以可能不会出现这个问题。特此把这个经验教训记下来,希望能够帮助各位后来者。


最后:如果还有疑问可以留言,如果我的博客对你有帮助,麻烦请在评论区评论一下,作为对我写博客的鼓励,谢谢~


你可能感兴趣的:(webservice)