服务端是用.net开发的,客户端是java调用。为什么用int参数就报错。而string类型就可以呢?public static void main(String args[]){
try {
String String_1 = "admin";
String String_2 = "admin";
String String_3 = "3344";
int int_4 = 1;
String endPoint = "http://test.net:9999/test/test?WSDL";
String targetNamespace = "http://test.net/wsdl/test";
Service service = new Service();
Call call = (Call)service.createCall();
call.setOperationName(new QName(targetNamespace,"Loing"));
call.setTargetEndpointAddress(new URL(endPoint));
call.addParameter("String_1", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("String_2", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("String_3", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("int_4", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.registerTypeMapping(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")
,new BeanSerializerFactory(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")), new BeanDeserializerFactory(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")));
call.setReturnType(new QName(targetNamespace,"testIF_LoginResponse"),AuthResult.class);
AuthResult result = (AuthResult)call.invoke(new Object[]{String_1,String_2,String_3,int_4});
System.out.println("result is :"+result.getAccount());
} catch (Exception e) {
e.printStackTrace();
}
}AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
faultSubcode:
faultString: Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
.
.
.
Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
try {
String String_1 = "admin";
String String_2 = "admin";
String String_3 = "3344";
int int_4 = 1;
String endPoint = "http://test.net:9999/test/test?WSDL";
String targetNamespace = "http://test.net/wsdl/test";
Service service = new Service();
Call call = (Call)service.createCall();
call.setOperationName(new QName(targetNamespace,"Loing"));
call.setTargetEndpointAddress(new URL(endPoint));
call.addParameter("String_1", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("String_2", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("String_3", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("int_4", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.registerTypeMapping(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")
,new BeanSerializerFactory(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")), new BeanDeserializerFactory(AuthResult.class, new QName(targetNamespace,"testIF_LoginResponse")));
call.setReturnType(new QName(targetNamespace,"testIF_LoginResponse"),AuthResult.class);
AuthResult result = (AuthResult)call.invoke(new Object[]{String_1,String_2,String_3,int_4});
System.out.println("result is :"+result.getAccount());
} catch (Exception e) {
e.printStackTrace();
}
}AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
faultSubcode:
faultString: Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
.
.
.
Internal Server Error (deserialization error: java.lang.NumberFormatException: For input string: "")
有傳int的嗎?
: For input string: "")
call.addParameter("int_4", org.apache.axis.encoding.XMLType.XSD_INT, javax.xml.rpc.ParameterMode.IN);
java调用的时候要这样做:
先定义两个 Integer m=new Integer(1) Integer n=new Integer(1)
然后 call.invoke(new Object[] (m,n)})
其余的地方跟一般情况一样,需要注意的是参数为int时,java要先定义Integer,再用Integer做为参数今天刚用这种方法解决
加上上面那句代码看可不可以,我的行了,查了好久,最后下了源码跟进去才发现axis是要用wsdl,也就是你访问wsdl那个地址进行parse解析的,然后我就用上面的试了一下,发现Integer,int,Date作参数都可以传递了。希望对大家有帮助,要可以的话楼主要给分。