[
https://issues.apache.org/jira/browse/CXF-3105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Timo Heck updated CXF-3105:
---------------------------
Attachment: ws-binding.xml
flowcenter.wsdl
I attached the corresponding wsdl and binding files to reproduce this issue.
> jaxws customization parameter renaming not working
> --------------------------------------------------
>
> Key: CXF-3105
> URL: https://issues.apache.org/jira/browse/CXF-3105
> Project: CXF
> Issue Type: Bug
> Affects Versions: 2.2.11
> Reporter: Timo Heck
> Attachments: flowcenter.wsdl, ws-binding.xml
>
>
> Hi,
> I am working on this for a couple of days now with actually finding a
> solution. I am building a ws client from wsdl with CXF wsdl2Java version
> 2.2.11.
> The problem is an element naming issue in the wsdl. As far as I do understand
> I have three choices:
> 1. disable wrapper style
> 2. use autoNameResolution feature
> 3. write my own customization and rename the parameters
> I verified options 1 and 2. Both solves the problem. But I'd like to have
> more control over the generated interface so I'd like to explicitly set the
> parameter names.
> This is how it looks like:
> Wsdl describes a webservice with a method called login().
> This is how request and response definitions look like.
> <xsd:element name="login">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="login" type="fc:flowloginrequest"/>
> <xsd:element name="switchusergroup" type="xsd:int" maxOccurs="1"
> minOccurs="0"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="loginResponse">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="login" type="fc:flowloginresponse"/>
> <xsd:element name="password_temp" type="xsd:string"/>
> <xsd:element name="usergrouplist" type="fc:flowidnamepairs"/>
> <xsd:element name="permissions" type="xsd:string"/>
> <xsd:element name="usertype" type="xsd:string"/>
> <xsd:element name="usertypeid" type="xsd:string"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> Request and response both hold a local element called login. This is causing
> the trouble I have and if I try to generate code with wrapper style enabled
> this is what I get:
> WSDLToJava Error: Element login has the same name with different types
> If I rename the two local elements to loginRequest (fc:flowloginrequest) and
> loginResponse (fc:flowloginresponse) everything runs just fine. Since I can't
> actually adjust the schema (it's not mine) I have to write my own
> customization file.
> To solve the problem I wanted to rename the method parameter for both
> elements. This is what found by examining JAX-WS spec.
> <?xml version="1.0" encoding="UTF-8"?>
> <jaxws:bindings wsdlLocation="flowcenter.wsdl"
> xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:fc="http://www.flowworks.de/flowworks/"
> xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb
> http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd
> http://java.sun.com/xml/ns/jaxws
> http://java.sun.com/xml/ns/jaxws/wsdl_customizationschema_2_0.xsd">
>
> <!-- rename method parameters-->
> <jaxws:bindings
> node="wsdl:definitions/wsdl:portty...@name='flowcenter']/wsdl:operati...@name='login']">
> <jaxws:parameter
> part="wsdl:definitions/wsdl:messa...@name='loginRequest']/wsdl:pa...@name='parameters']"
> childElementName="login" name="loginRequest"/>
> <jaxws:parameter
> part="wsdl:definitions/wsdl:messa...@name='loginResponse']/wsdl:pa...@name='parameters']"
> childElementName="login" name="loginResponse"/>
> </jaxws:bindings>
> </jaxws:bindings>
> I thought this would do the trick but it doesn't. Even more confusing is that
> if I run the tool with -autoNameResolution and check the code the service
> interface does show part of my declared names above. It looks like this.
> login( Flowloginrequest loginResponse,
> Integer switchusergroup,
> Holder<Flowloginresponse> login,
> Holder<java.lang.String> passwordTemp,
> Holder<Flowidnamepairs> usergrouplist,
> Holder<java.lang.String> permissions,
> Holder<java.lang.String> usertype,
> Holder<java.lang.String> usertypeid
> )
> Note the login parameter from request is renamed to loginResponse and
> response parameter name is ignored. To make this a little more interesting I
> changed the binding declaration to this:
> <!-- rename method parameters-->
> <jaxws:bindings
> node="wsdl:definitions/wsdl:portty...@name='flowcenter']/wsdl:operati...@name='login']">
> <jaxws:parameter
> part="wsdl:definitions/wsdl:messa...@name='loginRequest']/wsdl:pa...@name='parameters']"
> childElementName="login" name="loginRequest"/>
> </jaxws:bindings>
> <jaxws:bindings
> node="wsdl:definitions/wsdl:portty...@name='flowcenter']/wsdl:operati...@name='login']">
> <jaxws:parameter
> part="wsdl:definitions/wsdl:messa...@name='loginResponse']/wsdl:pa...@name='parameters']"
> childElementName="login" name="loginResponse"/>
> </jaxws:bindings>
> This is what the method signature looks like:
> login( Flowloginrequest loginRequest,
> Integer switchusergroup,
> Holder<Flowloginresponse> login,
> Holder<java.lang.String> passwordTemp,
> Holder<Flowidnamepairs> usergrouplist,
> Holder<java.lang.String> permissions,
> Holder<java.lang.String> usertype,
> Holder<java.lang.String> usertypeid
> )
> So I think I am not completely wrong trying to solve this issue by applying a
> customization file but something is not working right.
> I'll try to provide a test case and patch here too.
> Timo
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.