axis参数为自定义数组

今天用axis传递自定义对象的数组,发生了很多问题,总结如下:
1: 发布程序的时候报出了找不到类的问题(类是解析xml用的),最终发现自己系统中存在的java版本为1.3.*,把java版本提高就可以解决了。(编译的类一定要放在apache-tomcat-5.5.28\webapps\axis\WEB-INF\classes下,否则也会报找不到类)
2:发布的时候系统报找不到我自己定义的类,经过检查发现发布文件中
      <typeMapping
       xmlns:ns="sheng.com"
       qname="ns:Bean"
       type="java:com.sheng.Student"
       serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
       deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     />
的type="java:com.sheng.Student"被我多写个空格type="java:  com.sheng.Student",去掉空格问题就没了。

3:客户端调用的时候,QName一定要与发布的文档相对应,如果会出错,如:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="StudentService" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
  <parameter name="className" value="com.sheng.Test"/>
  <parameter name="scope" value="application"/>
  <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:Student" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.sheng.Student" xmlns:ns1="sheng.com"/>
  <typeMapping deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:StudentArray" serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" type="java:com.sheng.Student[]" xmlns:ns2="sheng.com"/>
</service>
</deployment>
客户端调用程序中应写:
QName studentQn = new QName("sheng.com","Student");  //应该与发布文件上的相对应
QName studentArrayQn = new QName("sheng.com","StudentArray");//应该与发布文件上的相对应
4:客户端调用服务的时候,一定要写清参数的类型,否则服务端根本收不到参数。代码如下:
QName xmlTypeQn = new QName("XMLType.SOAP_ARRAY");
call.addParameter(studentArrayQn, xmlTypeQn, ParameterMode.IN);
正確寫法應該是下面的,不過上面的寫法也能調用成功
call.addParameter(studentArrayQn, XMLType.SOAP_ARRAY, ParameterMode.IN);

你可能感兴趣的:(java,apache,tomcat,Web,SOAP)