通过Axis2调用Webservice是否只能传递string型的参数?
按照下面的方式传递参数,希望服务器端做一个1+2的加法,然后返回3。但服务器端收到的数据总是string型的,返回值是一个很小的负数。这是什么原因?public static void main(String[] args) {
        try {
            RPCServiceClient rpcClient = new RPCServiceClient();
            Options options=rpcClient.getOptions();
            options.setTo(new EndpointReference("http://localhost:9090/AddService"));
            
             Object[] objects = new Object[] { 1,2 };    
             Class<?>[] classes = new Class[] { string.class }; 
             QName qname = new QName("http://web.sdl.com/", "add");  
              int result = (int) rpcClient.invokeBlocking(qname, objects, classes)[0];  
             System.out.println(result);  
          
        } catch (AxisFault ex) {
            Logger.getLogger(JavaApplication5.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

解决方案 »

  1.   

    axis可以传递各种自定义参数,前提是要定义好的。
    int型一般需要封装一层,作为一个对象传送。比如LZ这边的例子,建议将返回类型int改为自定义的MyInteger类型,里面只有一个int value,这样解析MyInteger封装类会好些。
      

  2.   

    你定义的参数类型是String,怎么能传2个int呢
      

  3.   


    如果我想传2个int,该如何修改呢?
    Class<?>[] classes = new Class[] { int.class }; 
    是这样吗?
      

  4.   


    如果我想传2个int,该如何修改呢?
    Class<?>[] classes = new Class[] { int.class }; 
    是这样吗? Class<?>[] classes = new Class[] { int.class }; 改Class<?>[] classes = new Class[] { Integer.class }; 
      

  5.   


    如果我想传2个int,该如何修改呢?
    Class<?>[] classes = new Class[] { int.class }; 
    是这样吗? Class<?>[] classes = new Class[] { int.class }; 改Class<?>[] classes = new Class[] { Integer.class }; 这个方法不行啊!
      

  6.   


    如果我想传2个int,该如何修改呢?
    Class<?>[] classes = new Class[] { int.class }; 
    是这样吗? Class<?>[] classes = new Class[] { int.class }; 改Class<?>[] classes = new Class[] { Integer.class }; 这个方法不行啊!
    你可以自己定义一个对象啊,对象里有两个int属性,传递的参数就是你自己定义的对象。new Class[]{Add.class};class Add{
        private Integer a;
        private Integer b;
    }
      

  7.   

    Webservice不止能传递string型的参数,其它类型都能传啊,只要你类型同意,没问题的,
      

  8.   

    服务端可以改下接收参数类型:
        public float plus(float x, float y) {  
            return x + y;  
        }  
    客户端返回类型也改下:
     Class[] classes = new Class[] { float.class };