服务端是用.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: "")

解决方案 »

  1.   

    soap傳值不都是String嗎?
    有傳int的嗎?
    : For input string: "")
      

  2.   

    传的值不是有效的int数据,检查下传入的值
      

  3.   

    类型不对
    call.addParameter("int_4", org.apache.axis.encoding.XMLType.XSD_INT, javax.xml.rpc.ParameterMode.IN);
      

  4.   

    假如一个webservice方法为public int test(int a, int b)
    java调用的时候要这样做:
    先定义两个 Integer m=new Integer(1)  Integer n=new Integer(1)
    然后       call.invoke(new Object[] (m,n)})
    其余的地方跟一般情况一样,需要注意的是参数为int时,java要先定义Integer,再用Integer做为参数今天刚用这种方法解决
      

  5.   

    按6楼的方法,还是报错(java.lang.NumberFormatException: For input string: "").请问怎么解决呢?
      

  6.   

    接触过Axis2,调用方式和axis不太一样。是否是call.addParameter("int_4", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);这句与AuthResult result =  (AuthResult)call.invoke(new Object[]{String_1,String_2,String_3,int_4}); 不对应。你可以注销一下call.addParameter("int_4", 这句或者int_4改为int_4+“”试试看,先找出问题所在。
      

  7.   

    试下:call.setEncodingStyle(wsdl);
    加上上面那句代码看可不可以,我的行了,查了好久,最后下了源码跟进去才发现axis是要用wsdl,也就是你访问wsdl那个地址进行parse解析的,然后我就用上面的试了一下,发现Integer,int,Date作参数都可以传递了。希望对大家有帮助,要可以的话楼主要给分。
      

  8.   

    axis1.4 java调用.net WebService,传入和传出的参数都需要是String类型。