You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ax...@ws.apache.org on 2004/10/16 23:15:19 UTC
[jira] Closed: (AXIS-1116) [doc/lit] RPCElement doesn't process a response message of wrapped style
Message:
The following issue has been closed.
Resolver: Ias
Date: Sat, 16 Oct 2004 2:14 PM
This issue was already resolved since I successfully demonstrated the service with the WSDL included in JSR-172 spec with Axis J2ME and Axis 1.2 last year. Please open another issue for your problem. Your cases with WSDLs would be appreciated. In addition, Axis J2ME can be a choice for you as I tested it on Nokia 6230 phone.
---------------------------------------------------------------------
View the issue:
http://issues.apache.org/jira/browse/AXIS-1116
Here is an overview of the issue:
---------------------------------------------------------------------
Key: AXIS-1116
Summary: [doc/lit] RPCElement doesn't process a response message of wrapped style
Type: Bug
Status: Closed
Resolution: FIXED
Project: Axis
Components:
Serialization/Deserialization
Fix Fors:
current (nightly)
Versions:
current (nightly)
Assignee: Ias
Reporter: Ias
Created: Sun, 2 Nov 2003 8:51 AM
Updated: Sat, 16 Oct 2004 2:14 PM
Environment: Operating System: All
Platform: All
Description:
Suppose the following WSDL is given,
<types>
...
<xsd:element name="addGroups">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="group" maxOccurs="unbounded" minOccurs="1"
nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="RetVal" type="xsd:boolean"/>
</types>
<message name="addGroupsReq">
<part name="AddGroupReq" element="xsd1:addGroups"/>
</message>
<message name="addGroupsRes">
<part name="AddGroupRes" element="xsd1:RetVal"/>
</message>
<portType name="EmployeeDBPort">
...
<operation name="addGroups">
<input message="tns:addGroupsReq"/>
<output message="tns:addGroupsRes"/>
</operation>
</portType>
<binding name="EmployeeDBBinding" type="tns:EmployeeDBPort">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="addGroups">
<soap:operation
soapAction="http://www.sun.com/JSR172UseCases/addGroups"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
"addGroups" operation is detected as "wrapper style", and its server-
config.wsdd is
<service name="EmployeeDBPort" provider="java:RPC" style="wrapped"
use="literal">
...
<operation name="addGroups" qname="operNS:addGroups"
xmlns:operNS="http://www.sun.com/JSR172AppendixA.xsd"
returnQName="retNS:RetVal"
xmlns:retNS="http://www.sun.com/JSR172AppendixA.xsd" returnType="rtns:boolean"
xmlns:rtns="http://www.w3.org/2001/XMLSchema" >
<parameter qname="pns:group"
xmlns:pns="http://www.sun.com/JSR172AppendixA.xsd" type="tns:string"
xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
...
In this case, a request SOAP message is OK:
<?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>
<addGroups xmlns="http://www.sun.com/JSR172AppendixA.xsd">
<group>Group1</group>
<group>Group2</group>
<group>Group3</group>
</addGroups>
</soapenv:Body>
</soapenv:Envelope>
However, the current axis returns a response message like
<?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>
<addGroupsResponse xmlns="http://www.sun.com/JSR172AppendixA.xsd">
<RetVal>true</RetVal>
</addGroupsResponse>
</soapenv:Body>
</soapenv:Envelope>
This is obviously wrong since wrapped style is document style as well.
WS-I Basic Profile 1.0 also points out this situation wit more clarity:
WSDL 1.1 is not completely clear what, in document-literal style bindings, the
child element of soap:Body is.
R2712 A document-literal binding MUST be represented on the wire as a MESSAGE
with a soap:Body whose child element is an instance of the global element
declaration referenced by the corresponding wsdl:message part.
(from
http://www.ws-i.org/Profiles/Basic/2003-08/BasicProfile-
1.0a.htm#refinement35113376
)
Actually axis client and server work O.K. because they both assume "Response"
postfix even though they communicate under wrapped style.
I found this trouble when I made my J2ME web services client, which uses
only "doc/literal" according to JSR-172 spec. In order to improve the
interoperability of axis based on "doc/literal", some changes to RPCElement
are necessary. (See the attached patch.)
With the modification, axis replys to the previous request example like
<?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>
<RetVal xmlns="http://www.sun.com/JSR172AppendixA.xsd">true</RetVal>
</soapenv:Body>
</soapenv:Envelope>
Note: the automatically generated WSDL by "service?wsdl" is still not
compliant with the above correction. I'll look into that, and your idea and
help are welcome.
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira