3 Replies Latest reply on Jul 16, 2008 10:38 PM by Max Mad

    Java bean array properties returned empty

    Michal Galet Newbie

      Hi,
      I have a serious problem with web services on JBoss (4.2.0 or 4.2.1). When the service returns Java bean containing an array-type property, in the result this property is always returned unspecified (empty XML element in the WS response). Simple test case follows.

      Let's have a web service returning a simple bean containing an array of string:

      public TestBean testWS()
      {
       return new TestBean();
      }
      
      
      public class TestBean
      {
       private String[] value;
      
       public TestBean()
       {
       value = new String[] {"aa", "bb"};
       }
      
       public String[] getValue()
       {
       return value;
       }
      
       public void setValue(String[] value)
       {
       this.value = value;
       }
      }
      


      As you can see the value property always returns a two field array. Then we use a wscompile tool to generate a WSDL (complete WSDL printout can be found at the bottom of the message) which is provided in the deployment. However the service response never contains the contents of the "value" array. This happened for all array properties of all Java beans we have used in the WS response. For some reason this problem doesn't affect service methods that has an array as their return type (i.e. the array is not nested inside a bean).

      The response for this service is as follows, the "value" property is empty:

      <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
       xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/'>
       <env:Header></env:Header>
       <env:Body>
       <tns:testWSResponse xmlns:tns='http://www.berit.com/wsdl/WorkspaceManager'
       env:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
       <result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <value></value>
       </result>
       </tns:testWSResponse>
       </env:Body>
      </env:Envelope>
      


      Do you have any ideas what may cause this? I tried the same web service on Sun JSAS 8.2 and Oracle OC4J 10.1.3.3 and both worked fine, only JBoss didn't.
      Any help will be appreciated, thanks.


      P.S.: The WSDL printout:

      <?xml version="1.0" encoding="UTF-8"?>
      <definitions name="TestWSEndPoint"
       targetNamespace="http://www.berit.com/wsdl/TestWS"
       xmlns:tns="http://www.berit.com/wsdl/TestWS"
       xmlns="http://schemas.xmlsoap.org/wsdl/"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
       <types>
       <schema targetNamespace="http://www.berit.com/wsdl/TestWS"
       xmlns:tns="http://www.berit.com/wsdl/TestWS"
       xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
       xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="TestBean">
       <sequence>
       <element name="val" type="tns:ArrayOfstring"/>
       </sequence>
       </complexType>
       <complexType name="ArrayOfstring">
       <complexContent>
       <restriction base="soap11-enc:Array">
       <attribute ref="soap11-enc:arrayType" wsdl:arrayType="string[]"/>
       </restriction>
       </complexContent>
       </complexType>
       </schema>
       </types>
       <message name="TestWS_testWS"/>
       <message name="TestWS_testWSResponse">
       <part name="result" type="tns:TestBean"/>
       </message>
       <portType name="TestWS">
       <operation name="testWS">
       <input message="tns:TestWS_testWS"/>
       <output message="tns:TestWS_testWSResponse"/>
       </operation>
       </portType>
       <binding name="TestWSBinding" type="tns:TestWS">
       <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
       <operation name="testWS">
       <soap:operation soapAction=""/>
       <input>
       <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
       use="encoded"
       namespace="http://www.berit.com/wsdl/TestWS"/>
       </input>
       <output>
       <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
       use="encoded"
       namespace="http://www.berit.com/wsdl/TestWS"/>
       </output>
       </operation>
       </binding>
       <service name="TestWSEndPoint">
       <port name="TestWSPort" binding="tns:TestWSBinding">
       <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
       </port>
       </service>
      </definitions>