I believe this has to do with the JAXWS spec's definition for when to
unwrap or not. Looking in 2.3.1.2 of the jaxws spec, it specifically
says it can unwrap it ONLY if:
The elements referred to by the input and output message (if present)
parts (henceforth referred to as
wrapper elements) are both complex types defined using the
xsd:sequence compositor
I think the complexContext + extension things take it outside of that
rule and thus don't unwrap.
Dan
On May 13, 2008, at 11:55 AM, JSP wrote:
I am trying to understand if this behavior I am seeing is expected
and if so,
can someone explain why.
I have a wsdl where my request and response elements extend another
element.
When the extension element is included my web method is generated
with a
@SOAPBinding annotation with a bare parameter style. However, if I
remove
the extension element, I get REsponseWrapper, RequestWrapper and
WebResult
annotations.
Here is a snippet of my wsdl:
<xs:element name="GetAddress">
<xs:complexType>
<xs:complexContent>
<xs:extension base="tns:simpleBeanInfo">
<xs:sequence>
<xs:element form="qualified" minOccurs="0" name="addressInput"
type="tns:addressInputType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
--- Other schema def ----
<wsdl:message name="GetAddress">
<wsdl:part element="tns:GetAddress" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="GetAddressResponse">
<wsdl:part element="tns:GetAddressResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="AddressPort">
<wsdl:operation name="GetAddress">
<wsdl:input message="tns:GetAddress" name="GetAddress">
</wsdl:input>
<wsdl:output message="tns:GetAddressResponse"
name="GetAddressResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
And this is what is generated:
@WebService(targetNamespace = "urn:AddressTNS", name = "AddressPort")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface AddressPort {
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@WebResult(name = "GetAddressResponse", targetNamespace =
"urn:AddressTNS", partName = "parameters")
@WebMethod(operationName = "GetAddress", action = "urn:GetAddress")
public addresstns.GetAddressResponse getAddress(
@WebParam(partName = "parameters", name = "GetAddress",
targetNamespace = "urn:AddressTNS")
GetAddress parameters
);
}
Now if I remove the xs:complexContent and the xs:extension elements,
my
generated code will look like this:
@WebService(targetNamespace = "urn:AddressTNS", name = "AddressPort")
public interface AddressPort {
@ResponseWrapper(localName = "GetAddressResponse",
targetNamespace =
"urn:AddressTNS", className = "addresstns.GetAddressResponse")
@RequestWrapper(localName = "GetAddress", targetNamespace =
"urn:AddressTNS", className = "addresstns.GetAddress")
@WebResult(name = "addressOutput", targetNamespace = "")
@WebMethod(operationName = "GetAddress", action = "urn:GetAddress")
public addresstns.AddressOutputType getAddress(
@WebParam(name = "addressInput", targetNamespace = "")
addresstns.AddressInputType addressInput
);
}
I am wondering why they would be different? I would expect both to
generate
like the second. If this is behaving as expected can someone tell
me why
they should be different?
I am using CXF 2.0.5.
Thanks
--
View this message in context:
http://www.nabble.com/Web-methods-generated-differently-when-request-response-extend-another-class-tp17212004p17212004.html
Sent from the cxf-user mailing list archive at Nabble.com.
---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog