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