Hi all, 

 

I've got the following WSDL: 

 

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

<wsdl:definitions xmlns:contact="http://www.jemos.co.uk/schemas/contact"; 

                          xmlns:jem="http://www.jemos.co.uk/cxftest/"; 

                          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";


                          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 

                          xmlns:xsd="http://www.w3.org/2001/XMLSchema";


                          name="cxftest"
targetNamespace="http://www.jemos.co.uk/cxftest/";>

 

  <!-- Data types definition -->  

  <wsdl:types>

    <xsd:schema targetNamespace="http://www.jemos.co.uk/cxftest/";>

      <xsd:import schemaLocation="../xsd/contact.xsd"
namespace="http://www.jemos.co.uk/schemas/contact";>

      </xsd:import>

      <xsd:element name="getContactsByCriteria">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="in" type="xsd:int"/>

          </xsd:sequence>

        </xsd:complexType>

      </xsd:element>

      <xsd:element name="getContactsByCriteriaResponse">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="out" type="contact:contact"
maxOccurs="unbounded"/>

          </xsd:sequence>

        </xsd:complexType> 

      </xsd:element>

    </xsd:schema> 

  </wsdl:types>

  

  <!-- This defines the SOAP messages resulting in a WRAPPED style -->

  <wsdl:message name="getContactsByCriteriaRequest">

    <wsdl:part element="jem:getContactsByCriteria" name="parameters"/>

  </wsdl:message>

  <wsdl:message name="getContactsByCriteriaResponse">

    <wsdl:part element="jem:getContactsByCriteriaResponse"
name="parameters"/>

  </wsdl:message>

  

  <!-- This will define the Java interface -->

  <wsdl:portType name="IJemosService">  

    <!-- The method on the interface -->

    <wsdl:operation name="getContactsByCriteria">

      <wsdl:input message="jem:getContactsByCriteriaRequest"/>

      <wsdl:output message="jem:getContactsByCriteriaResponse"/>

    </wsdl:operation>

  </wsdl:portType>

  

  <!-- This binds the Java interface definition with SOAP characteristics
-->

  <wsdl:binding name="JemosServiceSOAPBinding" type="jem:IJemosService">

    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="getContactsByCriteria">

      <!-- TCP/IP monitoring address

      <soap:operation
soapAction="http://localhost:9977/cxf-test/JemosService/getContactsByCriteri
a"/> 

       -->

      <soap:operation
soapAction="http://localhost:8080/cxf-test/JemosService/getContactsByCriteri
a"/>

      <wsdl:input>

        <soap:body use="literal"/>

      </wsdl:input>

      <wsdl:output>

        <soap:body use="literal"/>

      </wsdl:output>

    </wsdl:operation>

  </wsdl:binding>

  

  <wsdl:service name="JemosServiceWebClient">

    <wsdl:port name="JemosServicePort" binding="jem:JemosServiceSOAPBinding"
>

    <!-- TCP/IP monitoring address

      <soap:address location="http://localhost:9977/cxf-test/JemosService"/>

    -->

    <soap:address location="http://localhost:8080/cxf-test/JemosService"/>

    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>

 

This imports the Contact definition in the following schema:

 

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";

            elementFormDefault="qualified"

            xmlns:contact="http://www.jemos.co.uk/schemas/contact";

            targetNamespace="http://www.jemos.co.uk/schemas/contact"; >  

      <xs:complexType name="contact">

        <xs:sequence>

          <xs:element name="firstName" type="xs:string" />

          <xs:element name="lastName" type="xs:string" />

          <xs:element name="emailAddress" type="xs:string" />

          <xs:element name="ordersCount" type="xs:integer" />

        </xs:sequence>

    </xs:complexType>

            

</xs:schema>

 

 

So far so good. When I launch the wsdl2java through Maven plugin everything
gets created nicely. The interface looks like: 

 

package uk.co.jemos.cxftest;

 

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

import javax.xml.bind.annotation.XmlSeeAlso;

import javax.xml.ws.RequestWrapper;

import javax.xml.ws.ResponseWrapper;

 

/**

 * This class was generated by Apache CXF 2.2.4

 * Sun Nov 15 17:42:01 GMT 2009

 * Generated source version: 2.2.4

 * 

 */

 

@WebService(targetNamespace = "http://www.jemos.co.uk/cxftest/";, name =
"IJemosService")

@XmlSeeAlso({ObjectFactory.class,uk.co.jemos.schemas.contact.ObjectFactory.c
lass})

public interface IJemosService {

 

    @WebResult(name = "out", targetNamespace = "")

    @RequestWrapper(localName = "getContactsByCriteria", targetNamespace =
"http://www.jemos.co.uk/cxftest/";, className =
"uk.co.jemos.cxftest.GetContactsByCriteria")

    @ResponseWrapper(localName = "getContactsByCriteriaResponse",
targetNamespace = "http://www.jemos.co.uk/cxftest/";, className =
"uk.co.jemos.cxftest.GetContactsByCriteriaResponse")

    @WebMethod(action =
"http://localhost:8080/cxf-test/JemosService/getContactsByCriteria";)

    public java.util.List<uk.co.jemos.schemas.contact.Contact>
getContactsByCriteria(

        @WebParam(name = "in", targetNamespace = "")

        int in

    );

}

 

However I realised that the operation should not have any arguments, so I
changed the WSDL as follows: 

 

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

<wsdl:definitions xmlns:contact="http://www.jemos.co.uk/schemas/contact"; 

                          xmlns:jem="http://www.jemos.co.uk/cxftest/"; 

                          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";


                          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 

                          xmlns:xsd="http://www.w3.org/2001/XMLSchema";


                          name="cxftest"
targetNamespace="http://www.jemos.co.uk/cxftest/";>

 

  <!-- Data types definition -->  

  <wsdl:types>

    <xsd:schema targetNamespace="http://www.jemos.co.uk/cxftest/";>

      <xsd:import schemaLocation="../xsd/contact.xsd"
namespace="http://www.jemos.co.uk/schemas/contact";>

      </xsd:import>      

      <xsd:element name="getContactsByCriteriaResponse">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="out" type="contact:contact"
maxOccurs="unbounded"/>

          </xsd:sequence>

        </xsd:complexType> 

      </xsd:element>

    </xsd:schema> 

  </wsdl:types>

  

  <!-- This defines the SOAP messages resulting in a WRAPPED style -->

  <wsdl:message name="getContactsByCriteriaRequest" />

    

  <wsdl:message name="getContactsByCriteriaResponse">

    <wsdl:part element="jem:getContactsByCriteriaResponse"
name="parameters"/>

  </wsdl:message>

  

  <!-- This will define the Java interface -->

  <wsdl:portType name="IJemosService">  

    <!-- The method on the interface -->

    <wsdl:operation name="getContactsByCriteria">

      <wsdl:input message="jem:getContactsByCriteriaRequest"/>

      <wsdl:output message="jem:getContactsByCriteriaResponse"/>

    </wsdl:operation>

  </wsdl:portType>

  

  <!-- This binds the Java interface definition with SOAP characteristics
-->

  <wsdl:binding name="JemosServiceSOAPBinding" type="jem:IJemosService">

    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="getContactsByCriteria">

      <!-- TCP/IP monitoring address

      <soap:operation
soapAction="http://localhost:9977/cxf-test/JemosService/getContactsByCriteri
a"/> 

       -->

      <soap:operation
soapAction="http://localhost:8080/cxf-test/JemosService/getContactsByCriteri
a"/>

      <wsdl:input>

        <soap:body use="literal"/>

      </wsdl:input>

      <wsdl:output>

        <soap:body use="literal"/>

      </wsdl:output>

    </wsdl:operation>

  </wsdl:binding>

  

  <wsdl:service name="JemosServiceWebClient">

    <wsdl:port name="JemosServicePort" binding="jem:JemosServiceSOAPBinding"
>

    <!-- TCP/IP monitoring address

      <soap:address location="http://localhost:9977/cxf-test/JemosService"/>

    -->

    <soap:address location="http://localhost:8080/cxf-test/JemosService"/>

    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>

 

 

However now the interface doesn't return a List<Contact> anymore but it
returns the following:

 

package uk.co.jemos.cxftest;

 

import javax.jws.WebMethod;

import javax.jws.WebResult;

import javax.jws.WebService;

import javax.jws.soap.SOAPBinding;

import javax.xml.bind.annotation.XmlSeeAlso;

 

/**

 * This class was generated by Apache CXF 2.2.4

 * Sun Nov 15 17:54:27 GMT 2009

 * Generated source version: 2.2.4

 * 

 */

 

@WebService(targetNamespace = "http://www.jemos.co.uk/cxftest/";, name =
"IJemosService")

@XmlSeeAlso({ObjectFactory.class,uk.co.jemos.schemas.contact.ObjectFactory.c
lass})

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

public interface IJemosService {

 

    @WebResult(name = "getContactsByCriteriaResponse", targetNamespace =
"http://www.jemos.co.uk/cxftest/";, partName = "parameters")

    @WebMethod(action =
"http://localhost:8080/cxf-test/JemosService/getContactsByCriteria";)

    public GetContactsByCriteriaResponse getContactsByCriteria();

}

 

The following annotations have gone

 

@RequestWrapper(localName = "getContactsByCriteria", targetNamespace =
"http://www.jemos.co.uk/cxftest/";, className =
"uk.co.jemos.cxftest.GetContactsByCriteria")

@ResponseWrapper(localName = "getContactsByCriteriaResponse",
targetNamespace = "http://www.jemos.co.uk/cxftest/";, className =
"uk.co.jemos.cxftest.GetContactsByCriteriaResponse")

 

Is this a bug? 

 

Regards,

 

M.

 

Reply via email to