I am using the POJO approach, and have a server class with a method like this:

public void myMethod(String[] options, MyData[] data) { ... }

Using SoapUI, I can call this method successfully with this message:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"; 
xmlns:xsd="http://interfaces.mybiz.com/xsd";>
   <soap:Header/>
   <soap:Body>
      <xsd:myMethod>
         <xsd:options>option1</xsd:options>
         <xsd:options>option2</xsd:options>
         <xsd:data>
            <xsd:Field1>TEST</xsd:Field1>
            <xsd:Field2>1234</xsd:Field2>
         </xsd:data>
      </xsd:myMethod>
   </soap:Body>
</soap:Envelope>

In this case, I get exactly what I expect - the options array has two strings 
"option1" and "option2", and the data array has my single data object.

But if I don't have any options to pass, the WSDL indicates that the 
appropriate message to send would be this (minOccurs on the <options> element 
is 0):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"; 
xmlns:xsd="http://interfaces.mybiz.com/xsd";>
   <soap:Header/>
   <soap:Body>
      <xsd:myMethod>
         <xsd:data>
            <xsd:Field1>TEST</xsd:Field1>
            <xsd:Field2>1234</xsd:Field2>
         </xsd:data>
      </xsd:myMethod>
   </soap:Body>
</soap:Envelope>

But this fails miserably in my POJO code because the options array now has a 
single element which is a string containing nothing but newlines and spaces, 
and the data array has a length of zero.

Looking at the code, I see that this method in 
org/apache/axis2/databinding/utils/BeanUtil.java seems to be the key:

    deserialize(OMElement response,
                           Object [] javaTypes,
                           ObjectSupplier objectSupplier)

It appears that this code has no way to identify that the first argument was 
supposed to be populated from <option> elements and the second from <data> 
elements, so it just builds the first argument from the first contiguous run of 
same-named elements (the <data> element), and then realizes that it has no 
elements for the second argument so just sets that to an empty array (of the 
correct type).  Then when getting the string values for the first argument, the 
spaces and newlines are just the concatenated text nodes of the direct children 
of the <data> element.

Has anyone else run into this problem and have a suggested solution?

I am using an older version of Axis2 (1.4.1), but I just pulled the latest 
release source code (1.5.4) and this part of the code does not appear to have 
changed any...

Thanks


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to