Yes I agree with all this. I would ask if you are interested in readability why not chose to implement in document/literal mode instead of rpc/enc?

Jim Murphy
Mindreef, Inc.

Bouche Paul wrote:

Patrick,

What I write know is what I understand from talking to others (credit be to them ;-) 
and reading the spec.
The references you see are the normal behaviour of the /encoded use of the parameters 
(here RPC/encoded).  This is to allow serialization of complex object graphs (with 
cyclic references).  This is specified by the SOAP Encoding and is normal (correct me 
anyone if I am wrong).  You can change this behaviour of AXIS in the 
server-config.wsdd which is in the WEB-INF directory of the AXIS webapp directory.

Paul



-----Original Message-----
From: Patrick Herber [mailto:[EMAIL PROTECTED]
Sent: Mittwoch, 22. September 2004 13:54
To: [EMAIL PROTECTED]
Subject: "Strange" format of RPC/encoded messages


Hi,

I created a simple web service with style RPC/encoded, which receives and
returns complex objects (a request containing an array of sub-requests,
which in turn contain arrays of sub-sub-requests and the same structure for
the response). It works fine (for the moment), however I see that the
generated message (I see it on the SOAPMonitor) is (for me) something
strange. In fact the child collections are not directed included in their
parents but referenced, like:


   <doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
xsi:type="soapenc:Array">
     <item href="#id2"/>
   </doctorResponse>

The same happens also for "xsd:int" elements like:

<requestResponseCode href="#id1"/>
...
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="xsd:int"


xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>0</multiRef>

This makes it difficult for a human to read these messages.

Could you kindly tell me whether this is the normal behavior of RPC/encoded
messages or if it is due to a problem/mistake in my WSDL definition?
I join a simple Response message and an extract of my WSDL file (schema and
message definitions).


Thanks a lot for your help!

Regards,
Patrick


<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:validateResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns1="urn:ch.arpage.digni.rpc">
<response href="#id0"/>
</ns1:validateResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns2:DigniResponseRPC"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns2="urn:ch.arpage.digni.rpc">
<insuranceEAN xsi:type="xsd:string">7612345678901</insuranceEAN>
<insuranceRequestId xsi:type="xsd:string">123</insuranceRequestId>
<responseDate
xsi:type="xsd:dateTime">2004-09-22T11:19:24.574Z</responseDate>
<requestResponseCode href="#id1"/>
<doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
xsi:type="soapenc:Array">
<item href="#id2"/>
</doctorResponse>
</multiRef>
<multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="xsd:int"


xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>0</multiRef>
<multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns3:DigniResponseDoctorRPC" xmlns:ns3="urn:ch.arpage.digni.rpc" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
<doctorEAN xsi:type="xsd:string">1108</doctorEAN>
<doctorResponseCode href="#id3"/>
<positionResponse xsi:type="ns3:DigniResponsePositionRPC"
xsi:nil="true"/>
</multiRef>
<multiRef id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="xsd:int"


xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>100<
/multiRef>
</soapenv:Body>
</soapenv:Envelope>


SCHEMA DEFINITION (EXTRACT): ===========================

<complexType name="DigniResponsePositionRPC">
<sequence>
<element name="tarmedKey" nillable="true" type="xsd:string"/>
<element name="invoiceDate" nillable="true" type="xsd:date"/>
<element name="responseCode" type="xsd:int"/>
</sequence>
</complexType>
<complexType name="DigniResponsePositionRPCList">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="impl:DigniResponsePositionRPC[]"/>
</restriction>
</complexContent>
</complexType>
<complexType name="DigniResponseDoctorRPC">
<sequence>
<element name="doctorEAN" nillable="true" type="xsd:string"/>
<element name="doctorResponseCode" type="xsd:int"/>
<element name="positionResponse" nillable="true"
type="impl:DigniResponsePositionRPCList"/>
</sequence>
</complexType>
<complexType name="DigniResponseDoctorRPCList">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="impl:DigniResponseDoctorRPC[]"/>
</restriction>
</complexContent>
</complexType>
<complexType name="DigniResponseRPC">
<sequence>
<element name="insuranceEAN" nillable="true" type="xsd:string"/>
<element name="insuranceRequestId" nillable="true" type="xsd:string"/>
<element name="responseDate" nillable="true" type="xsd:dateTime"/>
<element name="requestResponseCode" type="xsd:int"/>
<element name="doctorResponse" nillable="true"
type="impl:DigniResponseDoctorRPCList"/>
</sequence>
</complexType>



MESSAGE DEFINITION ==================

  <wsdl:message name="validateResponse">
     <wsdl:part name="response" type="impl:DigniResponseRPC"/>
  </wsdl:message>





.



.

Reply via email to