[ 
https://issues.apache.org/jira/browse/CXF-7062?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Randy Leonard reopened CXF-7062:
--------------------------------

See latest comment

> wsdl2java generates incorrect @XmlElement(namespace=“…”)
> --------------------------------------------------------
>
>                 Key: CXF-7062
>                 URL: https://issues.apache.org/jira/browse/CXF-7062
>             Project: CXF
>          Issue Type: Bug
>          Components: Soap Binding
>    Affects Versions: 3.1.7
>         Environment: MacOSX 10.11, Java v1.8
>            Reporter: Randy Leonard
>            Assignee: Daniel Kulp
>            Priority: Blocker
>             Fix For: Invalid
>
>
> I am using Apache CXF 3.1.7, and the wsdl2java command is generating code 
> with missing/incorrect namespace attributes on the @XMLEment annotation.
> Note I generally use four distinct namespaces within each WSDL document, 
> which are as follows:
>       • Shared data types across many WSDL documents 
> (http://v1_0_0.datatypes.provider.soap.foundation.rps.com)
>       • Domain-specific data types 
> (http://v1_0_0.datatypes.provider.soap.common.masterdata.rps.com)
>       • Parameter types 
> (http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com)
>       • Service types (http://v1_0_0.provider.soap.common.masterdata.rps.com)
> This gives a nice separation of data types, and has worked quite well for me 
> with Axis2. I am having issues, however, when applying this approach to CXF. 
> Below is an example WSDL document with the namespaces defined above:
> ———————————————
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions 
> targetNamespace="http://v1_0_0.provider.soap.common.masterdata.rps.com";
> xmlns:foundationTypes="http://v1_0_0.datatypes.provider.soap.foundation.rps.com";
>       
> xmlns:masterdataCommonTypes="http://v1_0_0.datatypes.provider.soap.common.masterdata.rps.com";
> xmlns:parameter="http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com";
>  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
>       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
> xmlns:tns="http://v1_0_0.provider.soap.common.masterdata.rps.com";
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
> xmlns:xs="http://www.w3.org/2001/XMLSchema";
>       xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>       xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";>
>       <wsdl:types>
>               <xs:schema attributeFormDefault="unqualified" 
> elementFormDefault="qualified" 
> targetNamespace="http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com";
> >
>                       <xs:import 
> namespace="http://v1_0_0.datatypes.provider.soap.foundation.rps.com"; 
> schemaLocation="schemas/FoundationTypes.xsd" />
>                       <xs:import 
> namespace="http://v1_0_0.datatypes.provider.soap.common.masterdata.rps.com"; 
> schemaLocation="schemas/MasterDataCommonTypes.xsd" />
>                       <xs:element name="consumerChannelFetchRequest">
>                               <xs:annotation>
>                               </xs:annotation>
>                               <xs:complexType>
>                                       <xs:sequence>
>                                               <xs:element 
> name="paymentSchemeId" type="xs:string" minOccurs="0" />
>                                               <xs:element name="bin" 
> type="xs:string" minOccurs="0" />
>                                       </xs:sequence>
>                               </xs:complexType>
>                       </xs:element>
>                       <xs:element name="consumerChannelFetchResponse">
>                               <xs:annotation>
>                               </xs:annotation>
>                               <xs:complexType>
>                                       <xs:sequence>
>                                               <xs:element name="status" 
> type="foundationTypes:Status" />
>                                               <xs:element name="channels" 
> type="masterdataCommonTypes:ConsumerChannel" minOccurs="0"
> maxOccurs="unbounded" />
>                                       </xs:sequence>
>                               </xs:complexType>
>                       </xs:element>
>                       <xs:element name="consumerChannelUpdateRequest">
>                               <xs:annotation>
>                               </xs:annotation>
>                               <xs:complexType>
>                                       <xs:sequence>
>                                               <xs:element 
> name="paymentSchemeId" type="xs:string" minOccurs="0" />
>                                               <xs:element name="bin" 
> type="xs:string" minOccurs="0" />
>                                       </xs:sequence>
>                               </xs:complexType>
>                       </xs:element>
>                       <xs:element name="consumerChannelUpdateResponse">
>                               <xs:annotation>
>                               </xs:annotation>
>                               <xs:complexType>
>                                       <xs:sequence>
>                                               <xs:element name="status" 
> type="foundationTypes:Status" />
>                                       </xs:sequence>
>                               </xs:complexType>
>                       </xs:element>
>               </xs:schema>
>       </wsdl:types>
>       <wsdl:message name="consumerChannelFetchMessageRequest">
>               <wsdl:part element="parameter:consumerChannelFetchRequest" 
> name="request" />
>       </wsdl:message>
>       <wsdl:message name="consumerChannelFetchMessageResponse">
>               <wsdl:part element="parameter:consumerChannelFetchResponse" 
> name="response" />
>       </wsdl:message>
>       <wsdl:message name="consumerChannelUpdateMessageRequest">
>               <wsdl:part element="parameter:consumerChannelUpdateRequest" 
> name="request" />
>       </wsdl:message>
>       <wsdl:message name="consumerChannelUpdateMessageResponse">
>               <wsdl:part element="parameter:consumerChannelUpdateResponse" 
> name="response" />
>       </wsdl:message>
>       <wsdl:portType name="ConsumerChannelPortType">
>               <wsdl:operation name="consumerChannelFetch">
>                       <wsdl:input 
> message="tns:consumerChannelFetchMessageRequest" 
> name="consumerChannelFetchMessageRequest" />
>                       <wsdl:output 
> message="tns:consumerChannelFetchMessageResponse" 
> name="consumerChannelFetchMessageResponse" />
>               </wsdl:operation>
>               <wsdl:operation name="consumerChannelUpdate">
>                       <wsdl:input name="consumerChannelUpdateMessageRequest" 
> message="tns:consumerChannelUpdateMessageRequest" />
>                       <wsdl:output 
> name="consumerChannelUpdateMessageResponse" 
> message="tns:consumerChannelUpdateMessageResponse" />
>               </wsdl:operation>
>       </wsdl:portType>
>       <wsdl:binding name="ConsumerChannelSoap12Binding" 
> type="tns:ConsumerChannelPortType">
>               <wsoap12:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http"; />
>               <wsdl:operation name="consumerChannelFetch">
>                       <soap:operation soapAction="" style="document" />
>                       <wsdl:input name="consumerChannelFetchMessageRequest">
>                               <wsoap12:body use="literal" />
>                       </wsdl:input>
>                       <wsdl:output name="consumerChannelFetchMessageResponse">
>                               <wsoap12:body use="literal" />
>                       </wsdl:output>
>               </wsdl:operation>
>               <wsdl:operation name="consumerChannelUpdate">
>                       <soap:operation soapAction="" style="document" />
>                       <wsdl:input name="consumerChannelUpdateMessageRequest">
>                               <wsoap12:body use="literal" />
>                       </wsdl:input>
>                       <wsdl:output 
> name="consumerChannelUpdateMessageResponse">
>                               <wsoap12:body use="literal" />
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:binding>
>       <wsdl:service name="ConsumerChannelService">
>               <wsdl:port name="ConsumerChannelSoap12Endpoint" 
> binding="tns:ConsumerChannelSoap12Binding">
>                       <wsoap12:address 
> location="http://localhost:8080/axis2/services/ConsumerChannelService"; />
>               </wsdl:port>
>       </wsdl:service>
> </wsdl:definitions>
> ———————————————
> The following generated ConsumerChannelFetchResponse class contains no 
> namespace attribute for @XmlElement annotations, unless I include '-xjc-npa' 
> in the wsdl2java command. When including '-xjc-npa', I then get the incorrect 
> namespaces in the @XmlElement annotation. Both scenarios result in 
> unmarshaling errors on the client side:
> ———————————————
> /**
>  * <p>Java class for anonymous complex type.
>  * 
>  * <p>The following schema fragment specifies the expected content contained 
> within
> this class.
>  * 
>  * <pre>
>  * &lt;complexType&gt;
>  *   &lt;complexContent&gt;
>  *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
>  *       &lt;sequence&gt;
>  *         &lt;element name="status" 
> type="{http://v1_0_0.datatypes.provider.soap.foundation.rps.com}Status"/&gt;
>  *         &lt;element name="channels" 
> type="{http://v1_0_0.datatypes.provider.soap.common.masterdata.rps.com}ConsumerChannel";
> maxOccurs="unbounded" minOccurs="0"/&gt;
>  *       &lt;/sequence&gt;
>  *     &lt;/restriction&gt;
>  *   &lt;/complexContent&gt;
>  * &lt;/complexType&gt;
>  * </pre>
>  * 
>  * 
>  */
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {
>     "status",
>     "channels"
> })
> @XmlRootElement(name = "consumerChannelFetchResponse", namespace = 
> "http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com";)
> public class ConsumerChannelFetchResponse {
>     @XmlElement(namespace = 
> "http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com";,
> required = true)
>     protected Status status;
>     @XmlElement(namespace = 
> "http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com";)
>     protected List<ConsumerChannel> channels;
>     ……….
> ———————————————
> Note the namespace in the 'Status' variable @XmlElement annotation for the 
> above code should be:
>       • http://v1_0_0.datatypes.provider.soap.foundation.rps.com
> But is the following instead:
>       • http://v1_0_0.parameters.provider.soap.common.masterdata.rps.com
> A close examination of the comment block prior to the 
> ConsumerChannelFetchResponse class declaration indicates wsdl2java cleary 
> understands the Status type is from the correct class, but the namespace 
> attribute in the @XmlElement does not reflect this.
> I've tried generating this class using both the cxf-codegen-plugin plugin, 
> and executing wsdl2java directly from the command line. Both to no avail.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to