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>
.
.