-
Bug
-
Resolution: Won't Do
-
Major
-
None
-
None
-
None
JBoss fails to correctly support literal bindings for web service endpoints deployed on it. In particular it fails to namespace qualify the descendants of part accessor elements for the parameters and the return value, as defined by the schema in which the part accessor types are defined. This leads to web service endpoints deployed on JBoss being non-interpoperable and not conforming to WS-I Basic Profile, which is a mandatory J2EE 1.4 requirement.
In particular JBoss violates R2737 from WS-I Basic Profile 1.0/1.1:
R2737 An ENVELOPE described with an rpc-literal binding MUST namespace qualify the descendents of part accessor elements for the parameters and the return value, as defined by the schema in which the part accessor types are defined.
This is a critical (if not a blocking) problem as it leads to JBoss web service endpoints being pretty much useless with WS-I Basic Profile conformant clients (e.g. .NET clients).
For example I have the following XML Schema definition of a return value of a business method exposed as a method of a web service endpoint:
<xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://customersvc.common.business.application.dotnetui"
xmlns:tns1="http://application.alturadev.compuware.com"
xmlns:tns="http://common.business.application.dotnetui"
xmlns:tns2="http://customersvc.common.business.application.dotnetui"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://common.business.application.dotnetui" schemaLocation="commonxsdschema.xsd"/>
<xsd:import namespace="http://application.alturadev.compuware.com" schemaLocation="applicationxsdschema.xsd"/>
<xsd:complexType name="CustomerDataObject">
<xsd:complexContent>
<xsd:extension base="tns1:DataObjectBase">
<xsd:all>
<xsd:element name="key" type="tns:Customer"/>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="uniqueId" type="xsd:string"/>
</xsd:all>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
The reply I get from a JBoss web service endpoint is this:
<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:retrieveAllExtResponse xmlns:ns1="http://logic.business.application.dotnetui">
<result>
<typedElements>
<key>
<uniqueId>0b238f37ffffffa901a84faeeeee2a69</uniqueId>
</key>
<firstName>Reinier</firstName>
<lastName>Bos</lastName>
<uniqueId>0b238f37ffffffa901a84faeeeee2a69</uniqueId>
</typedElements>
<typedElements>
<key>
<uniqueId>212e0f56ffffffa900888fc9b878f2b7</uniqueId>
</key>
<firstName>Ruud</firstName>
<lastName>Diterwich</lastName>
<uniqueId>212e0f56ffffffa900888fc9b878f2b7</uniqueId>
</typedElements>
</result>
</ns1:retrieveAllExtResponse>
</soapenv:Body>
</soapenv:Envelope>
as we can see the return value is placed in the same namespace as the wrapper element representing the operation instead of being placed in 'http://customersvc.common.business.application.dotnetui'.
I am creating a support call for this bug as well.