DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12867>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12867

array of bean_b inside bean_a deserializer problem from dot-net

           Summary: array of bean_b inside bean_a deserializer problem from
                    dot-net
           Product: Axis
           Version: current (nightly)
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


One of our service methods takes a bean type with an embedded array of a
second bean type. We use Java2wsdl to generate the WSDL, and wsdl2java to
generate a java client.  The java client works fine.  When using a dot-net
client from the WSDL file, however, the Axis server cannot deserialize the
embedded array of beans.

Could this be a bug in the Axis deserializer?

Looking at the messages themselves, dot-net encodes the array very
differently than Axis (see below).  It appears Axis cannot handle this.

The beans are:

public class XAgentRegBean
{
  private String agentName;
  private ParamBean[] agentParams;

  public XAgentRegBean() { }
  public String getAgentName() { return this.agentName; }
  public void setAgentName(String agentName){ this.agentName = agentName; }
  public ParamBean[] getAgentParams() { return this.agentParams; }
  public void setAgentParams(ParamBean[] agentParams){
    this.agentParams = agentParams;
  }
}

public class ParamBean
{
  private String _paramName;
  private String _paramValue;

  public ParamBean() { }
  public String getParamName() { return _paramName; }
  public void setParamName(String paramName) { _paramName = paramName; }
  public String getParamValue() { return _paramValue; }
  public void setParamValue(String paramValue) { _paramValue = paramValue; }
}

When receiving messages from the dot-net client, the Axis server outputs the
error messages:

2002-09-18 09:30:46,543 [HttpProcessor[8081][4]] DEBUG
xis.utils.JavaUtils  - Trying to convert
org.apache.axis.encoding.ser.ArrayDeserializer$ArrayListExtension to
[Lcom.cotagesoft.common.ParamBean;

2002-09-18 09:30:46,553 [HttpProcessor[8081][4]] DEBUG
xis.utils.JavaUtils  - Trying to convert [Lcom.cotagesoft.common.ParamBean;
to com.cotagesoft.common.ParamBean

2002-09-18 09:30:46,553 [HttpProcessor[8081][4]] ERROR
encoding.ser.BeanPropertyTarget  - could not convert
[Lcom.cotagesoft.common.ParamBean; to bean field 'agentParams[0]', type
com.cotagesoft.common.ParamBean

If you are still reading, good for you!  You may be interested in the
following snapshots of the message sent by the dot-net client, and the
message sent by the Axis client.  Note the way the arrays are encoded
differently.  Dot-net explicitly sets up an array (id="id2" element)which in
turn refers to the elements of the array, while Axis puts the elements of
the array in-line (id="id0" element).

The dot-net message is:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:tns="http://xhub.cotagesoft.com";
  xmlns:types="http://xhub.cotagesoft.com/encodedTypes";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
  <tns:registerXAgent>
    <in0 href="#id1" />
  </tns:registerXAgent>
  <tns:XAgentRegBean id="id1" xsi:type="tns:XAgentRegBean">
    <agentName xsi:type="xsd:string">DotNetXAgent</agentName>
    <agentParams href="#id2" />
  </tns:XAgentRegBean>
  <soapenc:Array id="id2"
      xmlns:q1="http://common.cotagesoft.com";
      soapenc:arrayType="q1:ParamBean[4]">
    <Item href="#id3" />
    <Item href="#id4" />
    <Item href="#id5" />
    <Item href="#id6" />
   </soapenc:Array>
    <q2:ParamBean id="id3"
        xsi:type="q2:ParamBean"
        xmlns:q2="http://common.cotagesoft.com";>
      <paramName xsi:type="xsd:string">XAgentType</paramName>
      <paramValue xsi:type="xsd:string">XAgentDotNetFilter</paramValue>
    </q2:ParamBean>
    <q3:ParamBean id="id4"
        xsi:type="q3:ParamBean"
        xmlns:q3="http://common.cotagesoft.com";>
      <paramName xsi:type="xsd:string">ServerInfo</paramName>
      <paramValue xsi:type="xsd:string">Microsoft Windows NT
5.1.2600.0</paramValue>
    </q3:ParamBean>
    <q4:ParamBean id="id5"
        xsi:type="q4:ParamBean"
        xmlns:q4="http://common.cotagesoft.com";>
      <paramName xsi:type="xsd:string">HostName</paramName>
      <paramValue xsi:type="xsd:string">HQ-ANDYM</paramValue>
    </q4:ParamBean>
    <q5:ParamBean id="id6"
        xsi:type="q5:ParamBean"
        xmlns:q5="http://common.cotagesoft.com";>
      <paramName xsi:type="xsd:string">HostAddr</paramName>
      <paramValue xsi:type="xsd:string">65.56.50.48</paramValue>
    </q5:ParamBean>
  </soap:Body>
</soap:Envelope>

And the Axis message is:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
 <soapenv:Body>
  <ns1:registerXAgent
      soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
      xmlns:ns1="http://xhub.cotagesoft.com";>
   <in0 href="#id0"/>
  </ns1:registerXAgent>
  <multiRef id="id0"
      soapenc:root="0"
      soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
      xsi:type="ns2:XAgentRegBean"
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
      xmlns:ns2="http://xhub.cotagesoft.com";>
   <agentName xsi:type="xsd:string">ServletFilterPOServiceJAXM</agentName>
   <agentParams href="#id1"/>
   <agentParams href="#id2"/>
   <agentParams href="#id3"/>
   <agentParams href="#id4"/>
   <agentParams href="#id5"/>
  </multiRef>
  <multiRef id="id5" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns3:ParamBean" xmlns:ns3="http://common.cotagesoft.com";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <paramName xsi:type="xsd:string">HostAddr</paramName>
   <paramValue xsi:type="xsd:string">65.56.50.48</paramValue>
  </multiRef>
  <multiRef id="id2" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns4:ParamBean" xmlns:ns4="http://common.cotagesoft.com";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <paramName xsi:type="xsd:string">ServletName</paramName>
   <paramValue xsi:type="xsd:string" xsi:nil="true"/>
  </multiRef>
  <multiRef id="id1" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns5:ParamBean" xmlns:ns5="http://common.cotagesoft.com";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <paramName xsi:type="xsd:string">XAgentType</paramName>
   <paramValue xsi:type="xsd:string">XAgentServletFilter</paramValue>
  </multiRef>
  <multiRef id="id3" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns6:ParamBean" xmlns:ns6="http://common.cotagesoft.com";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <paramName xsi:type="xsd:string">ServerInfo</paramName>
   <paramValue xsi:type="xsd:string">Apache Tomcat/4.0.4</paramValue>
  </multiRef>
  <multiRef id="id4" soapenc:root="0"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
xsi:type="ns7:ParamBean" xmlns:ns7="http://common.cotagesoft.com";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <paramName xsi:type="xsd:string">HostName</paramName>
   <paramValue xsi:type="xsd:string">HQ-ANDYM</paramValue>
  </multiRef>
 </soapenv:Body>
</soapenv:Envelope>

----------
Robert Herold
Cotagesoft, Inc.
650 474 9013 x808

Reply via email to