You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2008/09/15 18:59:44 UTC

[jira] Updated: (CXF-1793) WSDL2Java reports Non unique body parts if first part in message are soap headers.

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

Daniel Kulp updated CXF-1793:
-----------------------------

    Summary: WSDL2Java reports Non unique body parts if first part in message are soap headers.  (was: WSDL2Java reports Non unique body parts if the first 14 characters of message parts are identical)

> WSDL2Java reports Non unique body parts if first part in message are soap headers.
> ----------------------------------------------------------------------------------
>
>                 Key: CXF-1793
>                 URL: https://issues.apache.org/jira/browse/CXF-1793
>             Project: CXF
>          Issue Type: Bug
>          Components: Tooling
>    Affects Versions: 2.1.2
>         Environment: Windows XP,  Java 1.5
>            Reporter: Dag Framstad
>         Attachments: cxf-1793.zip, cxf1793_works.wsdl
>
>
> In my WSDL I have 2 services that have similar names.
> If the first 14 characters in the message part name are identical WSDL2Java reports (from ant):
> generate:
>      [java] Loading FrontEnd jaxws ...
>      [java] Loading DataBinding jaxb ...
>      [java] wsdl2java -b c:\ADN\adnfond/src/main/resources/com/edb/adnfond/transport/ws/calendar.xjb.w2j -impl -verbose -validate -c
> atalog c:\ADN\adnfond/src/main/resources/com/edb/adnfond/transport/ws/misc -d c:\ADN\adnfond/src/main/generated c:\ADN\adnfond/src/m
> ain/resources/com/edb/adnfond/transport/ws/misc/Misc_v10.wsdl
>      [java] wsdl2java - Apache CXF 2.1.2
>      [java] 
>      [java] 
>      [java] WSDLToJava Error: Non unique body parts, operation [ getSalesOfficeId ] and  operation [ getSalesPersonId ] have the sam
> e body block {http://edb.com/ws/WSCommon_v21}AutHeader
>      [java] 
>      [java] 
>      [java] 
>      [java] org.apache.cxf.tools.common.ToolException: Non unique body parts, operation [ getSalesOfficeId ] and  operation [ getSal
> esPersonId ] have the same body block {http://edb.com/ws/WSCommon_v21}AutHeader
>      [java] 
>      [java] 
>      [java]     at org.apache.cxf.tools.validator.internal.WSDL11Validator.isValid(WSDL11Validator.java:128)
>      [java]     at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.validate(JAXWSDefinitionBuilder.java:200
> )
>      [java]     at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.validate(JAXWSDefinitionBuilder.java:62)
>      [java]     at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:132)
>      [java]     at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:232)
>      [java]     at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:83)
>      [java]     at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:103)
>      [java]     at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:173)
> Example WSDL:
> <?xml version="1.0" encoding="utf-8"?>
> <wsdl:definitions 
> 	targetNamespace="http://www.edb.com/adnfond/transport/ws/misc/"
> 	xmlns:misc="http://www.edb.com/adnfond/transport/ws/misc/misc_v10"
> 	xmlns:m="http://www.edb.com/adnfond/transport/ws/misc/"
> 	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
> 	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
> 	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> 	xmlns:edb="http://edb.com/ws/WSCommon_v21">
> 	<wsdl:documentation/>
> 	<wsdl:types>
> 		<schema xmlns="http://www.w3.org/2001/XMLSchema">
> 			<xsd:import namespace="http://edb.com/ws/WSCommon_v21" schemaLocation="../WSCommon_v21.xsd"/>
> 			<xsd:import namespace="http://www.edb.com/adnfond/transport/ws/misc/misc_v10" schemaLocation="Misc_v10.xsd"/>
> 		</schema>
> 	</wsdl:types>
> 	
> 	<wsdl:message name="getSalesOfficeIdReq">
> 		<wsdl:part name="salesOfficeIdHeader" element="edb:AutHeader"/>
> 		<wsdl:part name="xsalesOfficeIdBodyReq" element="misc:getSalesOfficeIdRequest"/>
> 	</wsdl:message>
> 	
> 	<wsdl:message name="getSalesOfficeIdResp">
> 		<wsdl:part name="salesOfficeIdBodyResp" element="misc:getSalesOfficeIdResponse" />
> 	</wsdl:message>
> 	<wsdl:message name="getSalesOfficeId2Req">
> 		<wsdl:part name="salesOfficeId2Header" element="edb:AutHeader"/>
> 		<wsdl:part name="xsalesOfficeId2BodyReq" element="misc:getSalesOfficeId2Request"/>
> 	</wsdl:message>
> 	
> 	<wsdl:message name="getSalesOfficeId2Resp">
> 		<wsdl:part name="salesOfficeId2BodyResp" element="misc:getSalesOfficeId2Response"/>
> 	</wsdl:message>
> 		<!-- 
> 		wsdl2java fails when part names are xsalesOfficeIdBodyReq and xsalesOfficeId2BodyReq
> 		but works fine when part names are  salesOfficeIdBodyReq and salesOfficeId2BodyReq 
>                -->
> 	<wsdl:portType name="MiscPort">
> 		<wsdl:operation name="getSalesOfficeId">
> 			<wsdl:input message="m:getSalesOfficeIdReq"/>
> 			<wsdl:output message="m:getSalesOfficeIdResp"/>
> 		</wsdl:operation>	
> 		<wsdl:operation name="getSalesOfficeId2">
> 			<wsdl:input message="m:getSalesOfficeId2Req"/>
> 			<wsdl:output message="m:getSalesOfficeId2Resp"/>
> 		</wsdl:operation>
> 	</wsdl:portType>
> 	
> 	
> 	
> 	<wsdl:binding name="MiscSoapBinding" type="m:MiscPort">
> 		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
> 		<wsdl:operation name="getSalesOfficeId">
> 			<soap:operation soapAction="getSalesOfficeId" style="document"/>
> 			<wsdl:input>
> 				<soap:header message="m:getSalesOfficeIdReq" part="salesOfficeIdHeader" use="literal"/>
> 				<soap:body parts="xsalesOfficeIdBodyReq" use="literal"/>
> 			</wsdl:input>
> 			<wsdl:output>
> 				<soap:body use="literal"/>
> 			</wsdl:output>
> 		</wsdl:operation>
> 		<wsdl:operation name="getSalesOfficeId2">
> 			<soap:operation soapAction="getSalesOfficeId2" style="document"/>
> 			<wsdl:input>
> 				<soap:header message="m:getSalesOfficeId2Req" part="salesOfficeId2Header" use="literal"/>
> 				<soap:body parts="xsalesOfficeId2BodyReq" use="literal"/>
> 			</wsdl:input>
> 			<wsdl:output>
> 				<soap:body use="literal"/>
> 			</wsdl:output>
> 		</wsdl:operation>
> 	</wsdl:binding>
> 	
> 	
> 	<wsdl:service name="MiscService">
> 		<wsdl:port name="MiscSoapPort" binding="m:MiscSoapBinding">
> 			<soap:address location="http://localhost:8080/adnfond/services/MiscService"/>
> 		</wsdl:port>
> 	</wsdl:service>
> </wsdl:definitions>
> This is how I use wsdl2java:
>         <target name="generate" depends="prepare" description="generate Java source files from schema and wsdl (only run this if you changed shcema or wsdl)">
>                 <wsdl2java dir="${wsdl.dir}/misc" file="Misc_v10.wsdl" srcdestdir="${generated.dir}" bindingfile="${wsdl.dir}/calendar.xjb.w2j" />
>                 <replaceregexp match="wsdlLocation = .* ," replace="" byline="true">
>                         <fileset dir="${generated.dir}" includes="**/*.java" />
>                 </replaceregexp>
>                 <replaceregexp match=", wsdlLocation = .*\)" replace=")" byline="true">
>                         <fileset dir="${generated.dir}" includes="**/*.java" />
>                 </replaceregexp>
>         </target>
>         <macrodef name="wsdl2java">
>                 <attribute name="srcdestdir" default="" />
>                 <attribute name="destdir" default="" />
>                 <attribute name="file" />
>                 <attribute name="servicename.arg" default="" />
>                 <attribute name="bindingfile" default="" />
>                 <attribute name="dir" default="" />
>                 <attribute name="wsdlLocation" default="" />
>                 <attribute name="package" default="NOT_SPECIFIED" />
>                 <sequential>
>                         <condition property="package.arg.@{file}" value="-p @{package}">
>                                 <not>
>                                         <equals arg1="@{package}" arg2="NOT_SPECIFIED" />
>                                 </not>
>                         </condition>
>                         <property name="package.arg.@{file}" value="" />
>                         <condition property="binding.arg" value='-b "@{bindingfile}"'>
>                                 <not>
>                                         <equals arg1="@{bindingfile}" arg2="" />
>                                 </not>
>                         </condition>
>                         <property name="binding.arg" value="" />
>                         <condition property="wsdlLocation.arg" value='-wsdlLocation "@{wsdlLocation}"'>
>                                 <not>
>                                         <equals arg1="@{wsdlLocation}" arg2="" />
>                                 </not>
>                         </condition>
>                         <property name="wsdlLocation.arg" value="" />
>                         <java failonerror="true" classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="yes">
>                                 <classpath>
>                                         <path refid="test.classpath" />
>                                 </classpath>
>                                 <sysproperty key="exitOnFinish" value="true" />
>                                 <arg line="@{servicename.arg}" />
>                                 <arg line="${package.arg.@{file}}" />
>                                 <arg line="${binding.arg}" />
>                                 <arg line="${wsdlLocation.arg}" />
>                                 <arg value="-impl" />
>                                 <arg value="-verbose" />
>                                 <arg value="-validate" />
>                                 <arg value="-catalog" />
>                                 <arg value="@{dir}" />
>                                 <arg value="-d" />
>                                 <arg value="@{srcdestdir}" />
>                                 <arg value="@{dir}/@{file}" />
>                         </java>
>                 </sequential>
>         </macrodef>
> If the specs says that message part names can't be longer than 14 characters then please ignore this issue.
> Version 2.0.4 has this problem too, and other versions too I imagine, but I have only tested on 2.0.4 and 2.1.2.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.