Axis 1.4 关于Object Array和Namespace的Bug

Posted on February 1, 2007

0


Object Array Bug

最近我遇到一个关于.NET无法访问Axis Web Service得问题,主要的问题出在Array上,Axis试图将Array的名字一并用在里面所有的item上,这样.NET就无法识别XML Response。奇怪的是Axis自己的客户端可以正常工作。对于数组的BUG解决方法请看下面:

1. WSDL Part:

<complexType name="exampleType">
   <sequence>
      <element maxOccurs="unbound" minOccurs="0" name="f1stArr" type="ns:DataType1"> 
   </sequence>
<complexType>

2. Java side:

public DataType1[] getF1stArr() {
   .....
}
public void setF1stArr(DataType1[] d) {
   .....
}
public DataType1 getF1stArr(int i) {
   return arr[i];
}
public void setF1stArr(int i, DataType1 dt) { 
   arr[i] = dt;
}

Last two methods is requires for .NET interroperobility. If you haven’t them in the you bean than you will have your wsdl in that way:

<complexType name="ReturnType">
    <sequence>
      <element name="myArray" nillable="true" type="impl:ArrayOfMyArrayType "/>
   </sequence>
</complexType>
<complexType name="ArrayOfMyArrayType">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:ArrayType"/>
    </sequence>
</complexType>  

Just add these two methods and correct your wsdl and be happy with .NET.

Namespace Bug

除此之外,如果在WSDL定义了default namespace然后给所有DTO定义为另外一个namespce的话,Axis会把所有DTO都放在default namespace下面,这也是一个重大的bug。 有一个work around就是干脆所有的elements都放在一个namespace下面。

Posted in: Development