Dan, sorry it's been several weeks since you e-mailed this to me and
I've not actioned it. Where do I find CXF's official JIRA app?

By the way, I have also hit a problem where the response parts are
generated with incomplete result definitions. For example, if I have a
method in my SEI like:


@WebService(name = "UserModule",
            targetNamespace = 
"http://www.volantis.com/xmlns/2008/01/mss/user-module";)
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
             use = SOAPBinding.Use.LITERAL,
             parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public interface UserModule {
  User getUser(@WebParam(name="name") final String name);
  ...
}


where User is, for example, like this:


@XmlJavaTypeAdapter(UserAdapter.class)
public interface User {
  String getName();
  String getPassword();
}


with an implementation like:


@XmlType(name = "User")
public class UserImpl implements User {
  private String name;
  private String password;

  public void setName(final String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setPassword(final String password) {
    this.password = password;
  }

  public String getPassword() {
    return password;
  }
}


and the adapter looks like:


public final class UserAdapter extends
            XmlAdapter<UserImpl, User> {
  @Override
  public UserImpl marshal(final User user) throws Exception {
    return (UserImpl) user;
  }

  @Override
  public User unmarshal(final UserImpl user) throws Exception {
    return user;
  }
}

I get some WSDL like this:


<wsdl:definitions name="UserModuleService"
                  targetNamespace="http://com.volantis.openapi.mss.usermodule";
                  
xmlns:ns1="http://www.volantis.com/xmlns/2008/01/mss/user-module";
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
                  xmlns:tns="http://com.volantis.openapi.mss.usermodule";
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";>
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
                   xmlns="http://www.volantis.com/xmlns/2008/01/mss/user-module";
                   attributeFormDefault="unqualified"
                   elementFormDefault="unqualified"
                   
targetNamespace="http://www.volantis.com/xmlns/2008/01/mss/user-module";>
            <xs:element name="getUser" type="getUser"/>
            <xs:complexType name="getUser">
                <xs:sequence>
                    <xs:element minOccurs="0" name="name"
                                type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="getUserResponse" type="getUserResponse"/>
            <xs:complexType name="getUserResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return"/>
                </xs:sequence>
            </xs:complexType>
            ...
        </xs:schema>
    <wsdl:types>
    ...
    <wsdl:message name="getUser">
        <wsdl:part name="parameters" element="ns1:getUser">
        </wsdl:part>
    </wsdl:message>
    ...
    <wsdl:message name="getUserResponse">
        <wsdl:part name="parameters" element="ns1:getUserResponse">
        </wsdl:part>
    </wsdl:message>
    ...
    <wsdl:portType name="UserModule">
        <wsdl:operation name="getUser">
            <wsdl:input name="getUser" message="ns1:getUser">
            </wsdl:input>
            <wsdl:output name="getUserResponse" message="ns1:getUserResponse">
            </wsdl:output>
        </wsdl:operation>
        ...
    </wsdl:portType>
    <wsdl:binding name="UserModuleServiceSoapBinding" type="ns1:UserModule">
        <soap:binding style="document"
                      transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getUser">
            <soap:operation soapAction="" style="document"/>
            <wsdl:input name="getUser">
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="getUserResponse">
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        ...
    </wsdl:binding>
    <wsdl:service name="UserModuleService">
        <wsdl:port name="UserModulePort"
                   binding="ns1:UserModuleServiceSoapBinding">
            <soap:address location="http://localhost:9090/mss"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>




As you can see, the (bolded) "return" element has no type, and I get no
XSD element or type definition for the User implementation for some
reason. Any ideas?

Phil :n.

On Fri, 2008-02-01 at 22:26 -0500, Daniel Kulp wrote:

> This is definitely a bug and I see where the improper code is found.
> 
> Line 202 of WrapperClassGenerator specifically sets the namespace to "" 
> for the generated class.  This needs to be updated to either not output 
> it or output the correct namespace.   I'll need to experiment a bit to 
> figure out which.
> 
> Can you log a JIRA (feel free to assign to me) so it gets tracked.  (I'm 
> busy with other stuff for the next couple days).   Better yet, check out 
> CXF from Svn, experiment a bit by editing those lines, then attach a 
> patch to that jira.   :-)
> 
> Dan
> 
> 
> On Thursday 31 January 2008, Phil Weighill-Smith wrote:
> > Regarding target namespace and the elementFormDefault issues...
> >
> > Interestingly the package-info.java approach doesn't seem to work.
> > Whilst this sets the default element form to qualified, each element
> > is then generated with the form="unqualified" attribute set. D'oh! I
> > guess I'll have to use the XmlElement approach. Will let you know what
> > happens.
> >
> > I've also set the XmlSchema namespace as you have suggested, and have
> > explicitly set the @WebService(targetNamespace) to the same value but
> > I still get a WSDL targetNamespace derived from the package name. How
> > do I override this behaviour?
> >
> > The package-info.java has:
> >
> > @javax.xml.bind.annotation.XmlSchema(
> >         namespace =
> > "http://com.volantis.xmlns/2008/01/mss/user-module";,
> > elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
> > package com.volantis.openapi.mss.usermodule;
> >
> > and the SEI interface has:
> >
> > @WebService(name = "UserModule",
> >             targetNamespace =
> > "http://com.volantis.xmlns/2008/01/mss/user-module";)
> > @SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
> >              use = SOAPBinding.Use.LITERAL,
> >              parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
> > public interface UserModule {
> >     ...
> >     List<User> getSubscribers(
> >             @WebParam(name = "application")
> >             final String applicationID,
> >             @WebParam(name = "subscription")
> >             final String subscriptionID,
> >             @WebParam(name = "includeExtensionParameters")
> >             final boolean includeExtensionParameters,
> >             @WebParam(name = "includeSubscriptions")
> >             final boolean includeSubscriptions) throws
> > PersistenceException; ...
> >
> > but the WSDL is generated with:
> >
> > <wsdl:definitions name="UserModuleService"
> >                  
> > targetNamespace="http://com.volantis.openapi.mss.usermodule";
> > xmlns:ns1="http://com.volantis.xmlns/2008/01/mss/user-module";
> > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
> > xmlns:tns="http://com.volantis.openapi.mss.usermodule";
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> > xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";> <wsdl:types>
> >         <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
> >                   
> > xmlns:tns="http://com.volantis.xmlns/2008/01/mss/user-module";
> > attributeFormDefault="unqualified"
> >                    elementFormDefault="qualified"
> >                   
> > targetNamespace="http://com.volantis.xmlns/2008/01/mss/user-module";>
> > ...
> >             <xs:complexType name="getSubscribersResponse">
> >                 <xs:sequence>
> >                     <xs:element form="unqualified"
> > maxOccurs="unbounded" minOccurs="0" name="return" type="xs:anyType"/>
> > </xs:sequence>
> >             </xs:complexType>
> >             ...
> >         </xs:schema>
> >     </wsdl:types>
> >
> >     <wsdl:message name="getSubscribersResponse">
> >         <wsdl:part name="parameters"
> > element="ns1:getSubscribersResponse"> </wsdl:part>
> >     </wsdl:message>
> >     ...
> >
> > What I want to see is:
> >
> >       * the WSDL targetNamespace matching the ns1 URI
> >       * the elements generated with form "qualified"
> >       * the sequence returned by getSubscribersResponse using the
> >         generated schema type for User.
> >
> > Any suggestions?
> >
> > Phil :n(
> >
> > On Mon, 2008-01-28 at 10:31 -0500, Daniel Kulp wrote:
> > > 2) Create a package-info.java class in the package containing the
> > > beans.
> > > It would look like:
> > >
> > > @javax.xml.bind.annotation.XmlSchema(
> > >      namespace = "http://the.namespace.to.use";,
> > >      elementFormDefault =
> > > javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
> > > package the package;
> 
> 
> 

Reply via email to