Your wsdl/schema must follow the JAX-WS rules for what constitutes unwrappable schemas as per JAX-WS spec section 2.3.1.2. Yours does not meet the rules. Specifically, the last rule:

"The wrapper elements only contain child elements, they MUST not contain other structures such as wildcards (element or attribute), xsd:choice, substitution groups (element references are not
permitted) or attributes; furthermore, they MUST not be nillable"


Your top level elements for the requests are nillable. Thus, the operation is not unwrappable.

Dan



On Jun 19, 2008, at 8:28 PM, cortlander wrote:


I am using CXF’s WDSL to Java utility to generate code from a wsdl. I would like to map my wsdl operations to SOAPBinding.ParameterStyle.WRAPPED so that methods with void return types do not return objects like xxxResponse:
/**
* This class was generated by Apache CXF 2.1
* Thu Jun 19 15:09:17 EDT 2008
* Generated source version: 2.1
*
*/

@WebService(targetNamespace = "urn:idm.openiam.org/ws/org", name =
"organizationData")
@XmlSeeAlso ({org .openiam .idm .types .metadata .ObjectFactory .class ,org .openiam .idm.types.organization.ObjectFactory.class,ObjectFactory.class})

public interface OrganizationData {

   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(name = "removeAttributeResponse", targetNamespace =
"urn:idm.openiam.org/ws/org", partName = "removeAttributeResponse")
   @WebMethod
   public RemoveAttributeResponse removeAttribute(
@WebParam(partName = "removeAttribute", name = "removeAttribute",
targetNamespace = "urn:idm.openiam.org/ws/org")
       org.openiam.idm.types.organization.OrganizationAttribute
removeAttribute
   );

   @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
   @WebResult(name = "addAttributeResponse", targetNamespace =
"urn:idm.openiam.org/ws/org", partName = "addAttributeResponse")
   @WebMethod
   public AddAttributeResponse addAttribute(
       @WebParam(partName = "addAttribute", name = "addAttribute",
targetNamespace = "urn:idm.openiam.org/ws/org")
       org.openiam.idm.types.organization.OrganizationAttribute
addAttribute
   );

Etc..


Excerpts from the WSDL includes the following:


<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions name="OrganizationData"
targetNamespace="urn:idm.openiam.org/ws/org"
        xmlns:tns="urn:idm.openiam.org/ws/org"
xmlns:ns1="urn:idm.openiam.org/ws/org"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:org="urn:idm.openiam.org/types/organization"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";>

<!-- Types ******************************************************** -->

        <wsdl:types>
                <xsd:schema targetNamespace="urn:idm.openiam.org/ws/org"
                        xmlns:tns="urn:idm.openiam.org/ws/org"
xmlns="http://www.w3.org/2001/XMLSchema";
                        attributeFormDefault="qualified" 
elementFormDefault="unqualified">

                        <xsd:import 
namespace="urn:idm.openiam.org/types/organization"
                                schemaLocation="organization.xsd" />

...
                        <xsd:element name="removeAttribute" nillable="true"
type="org:organizationAttribute" />

                        <xsd:element name="removeAttributeResponse">
                                <xsd:complexType>
                                        <xsd:sequence />
                                </xsd:complexType>
                        </xsd:element>


                        <xsd:element name="addAttribute" nillable="true"
type="org:organizationAttribute" />

                        <xsd:element name="addAttributeResponse">
                                <xsd:complexType>
                                        <xsd:sequence />
                                </xsd:complexType>
                        </xsd:element>

. . .
                </xsd:schema>
        </wsdl:types>

<!-- Messages ******************************************************** -->

. . .

        <wsdl:message name="addAttribute">
<wsdl:part name="addAttribute" element="ns1:addAttribute"></ wsdl:part>
        </wsdl:message>
        <wsdl:message name="addAttributeResponse">
                <wsdl:part name="addAttributeResponse"
element="ns1:addAttributeResponse"></wsdl:part>
        </wsdl:message>

        <wsdl:message name="removeAttribute">
                <wsdl:part name="removeAttribute"
element="ns1:removeAttribute"></wsdl:part>
        </wsdl:message>
        <wsdl:message name="removeAttributeResponse">
                <wsdl:part name="removeAttributeResponse"
element="ns1:removeAttributeResponse"></wsdl:part>
        </wsdl:message>

. . .

<!-- portType ******************************************************** -->

<wsdl:portType name="organizationData">

                <wsdl:operation name="removeAttribute">
                        <wsdl:input name="removeAttribute"
message="tns:removeAttribute"></wsdl:input>
                        <wsdl:output name="removeAttributeResponse"
message="tns:removeAttributeResponse">
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="addAttribute">
<wsdl:input name="addAttribute" message="tns:addAttribute"></ wsdl:input>
                        <wsdl:output name="addAttributeResponse"
message="tns:addAttributeResponse">
                        </wsdl:output>
                </wsdl:operation>


. . .

</wsdl:portType>

<!-- Binding ******************************************************** -->

<wsdl:binding name="OrganizationDataBinding" type="tns:organizationData">
                <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />


                <wsdl:operation name="addAttribute">
                        <soap:operation soapAction="" style="document" />
                        <wsdl:input name="addAttribute">
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output name="addAttributeResponse">
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>


                <wsdl:operation name="removeAttribute">
                        <soap:operation soapAction="" style="document" />
                        <wsdl:input name="removeAttribute">
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output name="removeAttributeResponse">
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>
. . .

        </wsdl:binding>

<!-- Service ******************************************************** -->

        <wsdl:service name="OrganizationDataService">
                <wsdl:port name="OrganizationDataPort"
binding="tns:OrganizationDataBinding">
<soap:address location="http://localhost:9090/ OrganizationDataPort" />
                </wsdl:port>
        </wsdl:service>
</wsdl:definitions>

I saw another post which mentioned the part element name must be the same as the operation name, but it seems that I am doing that here. I have also
tried the following suggestion, but that did not help either.

        <wsdl:portType name="organizationData">
        <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws";>
        <enableWrapperStyle>true</enableWrapperStyle>
        </jaxws:bindings>


Any help to point me in the right direction would be much appreciated.

Thank you,

cortlander

--
View this message in context: 
http://www.nabble.com/How-to-make-SOAPBinding.ParameterStyle.WRAPPED-instead-of-BARE--tp18020764p18020764.html
Sent from the cxf-user mailing list archive at Nabble.com.


---
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog




Reply via email to