2 Replies Latest reply on Nov 22, 2006 3:28 PM by thomas.diesler

    One endpoint but the type appears twice in the WSDL

    ericmacau

      Hello,

      I use JBossWS-1.0.3 to create the web service in Tomcat-5.5. Everything seems fine but meet a strange problem that one of the Java bean in the generated WSDL appearing twice. Please look at the following WSDL. Is it a bug or just like that. And how can I do if I only want one in the WSDL. In fact they are same beans (Role and Group).

      I tried to generated the web service client from c#, it appears two Role (Role and Role1). Please help.

      
      <definitions name='UserWS' targetNamespace='http://ws.eric.com/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:ns1='http://model.framework.mo/jaws' xmlns:ns2='http://lang.java/jaws' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://ws.eric.com/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
       <types>
       <schema elementFormDefault='qualified' targetNamespace='http://model.framework.mo/jaws' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:ns1='http://ws.eric.com/' xmlns:ns3='http://lang.java/jaws' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://model.framework.mo/jaws' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
       <import namespace='http://lang.java/jaws'/>
       <import namespace='http://ws.eric.com/'/>
       <complexType name='Group'>
       <sequence>
       <element name='description' nillable='true' type='string'/>
       <element name='groupName' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <complexType name='Role'>
       <sequence>
       <element name='description' nillable='true' type='string'/>
       <element name='roleName' nillable='true' type='string'/>
       </sequence>
       </complexType>
       </schema>
       <schema elementFormDefault='qualified' targetNamespace='http://lang.java/jaws' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:ns1='http://ws.eric.com/' xmlns:ns2='http://model.framework.mo/jaws' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://lang.java/jaws' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
       <import namespace='http://model.framework.mo/jaws'/>
       <import namespace='http://ws.eric.com/'/>
       <complexType name='StackTraceElement'>
       <sequence>
       <element name='className' nillable='true' type='string'/>
       <element name='fileName' nillable='true' type='string'/>
       <element name='lineNumber' type='int'/>
       <element name='methodName' nillable='true' type='string'/>
       <element name='nativeMethod' type='boolean'/>
       </sequence>
       </complexType>
       <complexType name='Throwable'>
       <sequence>
       <element name='cause' nillable='true' type='tns:Throwable'/>
       <element name='localizedMessage' nillable='true' type='string'/>
       <element name='message' nillable='true' type='string'/>
       <element maxOccurs='unbounded' minOccurs='0' name='stackTrace' nillable='true' type='tns:StackTraceElement'/>
       </sequence>
       </complexType>
       </schema>
       <schema elementFormDefault='qualified' targetNamespace='http://ws.eric.com/' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:ns2='http://model.framework.mo/jaws' xmlns:ns3='http://lang.java/jaws' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://ws.eric.com/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
       <import namespace='http://model.framework.mo/jaws'/>
       <import namespace='http://lang.java/jaws'/>
       <complexType name='Exception'>
       <complexContent>
       <extension base='ns3:Throwable'>
       <sequence>
       <element name='message' nillable='true' type='string'/>
       </sequence>
       </extension>
       </complexContent>
       </complexType>
       <complexType name='Role'>
       <sequence>
       <element name='description' nillable='true' type='string'/>
       <element name='roleName' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <complexType name='Role.Array'>
       <sequence>
       <element maxOccurs='unbounded' minOccurs='0' name='value' nillable='true' type='ns2:Role'/>
       </sequence>
       </complexType>
       <complexType name='User'>
       <sequence>
       <element name='activate' type='boolean'/>
       <element name='displayName' nillable='true' type='string'/>
       <element name='firstName' nillable='true' type='string'/>
       <element name='gender' nillable='true' type='string'/>
       <element maxOccurs='unbounded' minOccurs='0' name='groupsArray' nillable='true' type='ns2:Group'/>
       <element name='lastName' nillable='true' type='string'/>
       <element name='password' nillable='true' type='string'/>
       <element maxOccurs='unbounded' minOccurs='0' name='rolesArray' nillable='true' type='ns2:Role'/>
       <element name='username' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <complexType name='User.Array'>
       <sequence>
       <element maxOccurs='unbounded' minOccurs='0' name='value' nillable='true' type='tns:User'/>
       </sequence>
       </complexType>
       <element name='Exception' type='tns:Exception'/>
       </schema>
       </types>
       <message name='UserEndpoint_removeUserByNameResponse'></message>
       <message name='UserEndpoint_getRolesByUsernameResponse'>
       <part name='result' type='tns:Role.Array'/>
       </message>
       <message name='UserEndpoint_getAllUsers'></message>
       <message name='UserEndpoint_getRoles'>
       <part name='User_1' type='tns:User'/>
       </message>
       <message name='UserEndpoint_addRoleResponse'>
       <part name='result' type='tns:Role'/>
       </message>
       <message name='UserEndpoint_getLoginUser'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_getUsersByActivateResponse'>
       <part name='result' type='tns:User.Array'/>
       </message>
       <message name='UserEndpoint_editUser'>
       <part name='String_1' type='xsd:string'/>
       <part name='String_2' type='xsd:string'/>
       <part name='String_3' type='xsd:string'/>
       <part name='String_4' type='xsd:string'/>
       <part name='String_5' type='xsd:string'/>
       <part name='String_6' type='xsd:string'/>
       <part name='boolean_1' type='xsd:boolean'/>
       </message>
       <message name='UserEndpoint_login'>
       <part name='String_1' type='xsd:string'/>
       <part name='String_2' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_hasUsersResponse'>
       <part name='result' type='xsd:boolean'/>
       </message>
       <message name='UserEndpoint_addRole'>
       <part name='String_1' type='xsd:string'/>
       <part name='String_2' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_getActivateUsers'></message>
       <message name='UserEndpoint_addUserResponse'>
       <part name='result' type='tns:User'/>
       </message>
       <message name='UserEndpoint_getActivateUsersResponse'>
       <part name='result' type='tns:User.Array'/>
       </message>
       <message name='UserEndpoint_removeUser'>
       <part name='User_1' type='tns:User'/>
       </message>
       <message name='Exception'>
       <part element='tns:Exception' name='Exception'/>
       </message>
       <message name='UserEndpoint_getRolesByUsername'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_removeUserByName'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_addUser'>
       <part name='String_1' type='xsd:string'/>
       <part name='String_2' type='xsd:string'/>
       <part name='String_3' type='xsd:string'/>
       <part name='String_4' type='xsd:string'/>
       <part name='String_5' type='xsd:string'/>
       <part name='String_6' type='xsd:string'/>
       <part name='boolean_1' type='xsd:boolean'/>
       </message>
       <message name='UserEndpoint_getUsersByActivate'>
       <part name='boolean_1' type='xsd:boolean'/>
       </message>
       <message name='UserEndpoint_getAllUsersResponse'>
       <part name='result' type='tns:User.Array'/>
       </message>
       <message name='UserEndpoint_findUser'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_loginResponse'>
       <part name='result' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_saveRole'>
       <part name='Role_1' type='tns:Role'/>
       </message>
       <message name='UserEndpoint_logout'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_findUserResponse'>
       <part name='result' type='tns:User'/>
       </message>
       <message name='UserEndpoint_logoutResponse'></message>
       <message name='UserEndpoint_saveUser'>
       <part name='User_1' type='tns:User'/>
       </message>
       <message name='UserEndpoint_getRolesResponse'>
       <part name='result' type='tns:Role.Array'/>
       </message>
       <message name='UserEndpoint_addSuper'>
       <part name='String_1' type='xsd:string'/>
       </message>
       <message name='UserEndpoint_getNonActivateUsersResponse'>
       <part name='result' type='tns:User.Array'/>
       </message>
       <message name='UserEndpoint_getLoginUserResponse'>
       <part name='result' type='tns:User'/>
       </message>
       <message name='UserEndpoint_getNonActivateUsers'></message>
       <message name='UserEndpoint_editUserResponse'>
       <part name='result' type='tns:User'/>
       </message>
       <message name='UserEndpoint_addSuperResponse'>
       <part name='result' type='tns:User'/>
       </message>
       <message name='UserEndpoint_saveUserResponse'></message>
       <message name='UserEndpoint_saveRoleResponse'></message>
       <message name='UserEndpoint_removeUserResponse'></message>
       <message name='UserEndpoint_hasUsers'></message>
       <portType name='UserEndpoint'>
       <operation name='addRole' parameterOrder='String_1 String_2'>
       <input message='tns:UserEndpoint_addRole'/>
       <output message='tns:UserEndpoint_addRoleResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='addSuper' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_addSuper'/>
       <output message='tns:UserEndpoint_addSuperResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='addUser' parameterOrder='String_1 String_2 String_3 String_4 String_5 String_6 boolean_1'>
       <input message='tns:UserEndpoint_addUser'/>
       <output message='tns:UserEndpoint_addUserResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='editUser' parameterOrder='String_1 String_2 String_3 String_4 String_5 String_6 boolean_1'>
       <input message='tns:UserEndpoint_editUser'/>
       <output message='tns:UserEndpoint_editUserResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='findUser' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_findUser'/>
       <output message='tns:UserEndpoint_findUserResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getActivateUsers'>
       <input message='tns:UserEndpoint_getActivateUsers'/>
       <output message='tns:UserEndpoint_getActivateUsersResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getAllUsers'>
       <input message='tns:UserEndpoint_getAllUsers'/>
       <output message='tns:UserEndpoint_getAllUsersResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getLoginUser' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_getLoginUser'/>
       <output message='tns:UserEndpoint_getLoginUserResponse'/>
       </operation>
       <operation name='getNonActivateUsers'>
       <input message='tns:UserEndpoint_getNonActivateUsers'/>
       <output message='tns:UserEndpoint_getNonActivateUsersResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getRoles' parameterOrder='User_1'>
       <input message='tns:UserEndpoint_getRoles'/>
       <output message='tns:UserEndpoint_getRolesResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getRolesByUsername' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_getRolesByUsername'/>
       <output message='tns:UserEndpoint_getRolesByUsernameResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='getUsersByActivate' parameterOrder='boolean_1'>
       <input message='tns:UserEndpoint_getUsersByActivate'/>
       <output message='tns:UserEndpoint_getUsersByActivateResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='hasUsers'>
       <input message='tns:UserEndpoint_hasUsers'/>
       <output message='tns:UserEndpoint_hasUsersResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='login' parameterOrder='String_1 String_2'>
       <input message='tns:UserEndpoint_login'/>
       <output message='tns:UserEndpoint_loginResponse'/>
       </operation>
       <operation name='logout' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_logout'/>
       <output message='tns:UserEndpoint_logoutResponse'/>
       </operation>
       <operation name='removeUser' parameterOrder='User_1'>
       <input message='tns:UserEndpoint_removeUser'/>
       <output message='tns:UserEndpoint_removeUserResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='removeUserByName' parameterOrder='String_1'>
       <input message='tns:UserEndpoint_removeUserByName'/>
       <output message='tns:UserEndpoint_removeUserByNameResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='saveRole' parameterOrder='Role_1'>
       <input message='tns:UserEndpoint_saveRole'/>
       <output message='tns:UserEndpoint_saveRoleResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       <operation name='saveUser' parameterOrder='User_1'>
       <input message='tns:UserEndpoint_saveUser'/>
       <output message='tns:UserEndpoint_saveUserResponse'/>
       <fault message='tns:Exception' name='Exception'/>
       </operation>
       </portType>
       <binding name='UserEndpointBinding' type='tns:UserEndpoint'>
       <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
       <operation name='addRole'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='addSuper'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='addUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='editUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='findUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getActivateUsers'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getAllUsers'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getLoginUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       </operation>
       <operation name='getNonActivateUsers'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getRoles'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getRolesByUsername'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='getUsersByActivate'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='hasUsers'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='login'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       </operation>
       <operation name='logout'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       </operation>
       <operation name='removeUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='removeUserByName'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='saveRole'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       <operation name='saveUser'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </input>
       <output>
       <soap:body namespace='http://ws.eric.com/' use='literal'/>
       </output>
       <fault name='Exception'>
       <soap:fault name='Exception' use='literal'/>
       </fault>
       </operation>
       </binding>
       <service name='UserWS'>
       <port binding='tns:UserEndpointBinding' name='UserEndpointPort'>
       <soap:address location='http://localhost:8080/realespro/UserWS'/>
       </port>
       </service>
      </definitions>
      


        • 1. Re: One endpoint but the type appears twice in the WSDL
          sursha

          Hello,
          Glad to see that some one else also is experiencing same issue. I have posted a bug to JIRA. Please refer the link below. I'm sure there are other people also experiencing same issue. It is a show stopper issue for me. I think it is time JBOSS comes up with a fix for this.
          Basically I've to make a decision soon whether to use JBOSS or not based on this.
          http://jira.jboss.com/jira/browse/JBWS-1390

          • 2. Re: One endpoint but the type appears twice in the WSDL
            thomas.diesler

            JAXWS, JSR181 and EJB3 is supported in jbossws-2.0.x.

            In jbossws-1.0.x we provide a preview implementation for JSR-181 that should work for basic usecases, namely

            1. rpc/literal, document/literal operations with primitive types
            2. JAXRPC handlers using @HandlerChain
            3. One way invocations

            In JAXWS, which JSR181 is part of, delegates all marshalling concerns to JAXB. For this to work, complex beans must be annotated with JAXB annotations. Basically, the type mapping that was contained in JSR109 jaxrpc-mapping.xml is now in JAXB annotations.

            With jbossws-1.0.x all marshalling is done through JBossXB, which does not understand JAXB annotations.

            Marshalling concerns that rely on JAXB functionality are not supported in jbossws-1.0.x In jbossws-1.0.x JSR181 is provided as is and will not be extended. Everybody is of course welcome to submit patches.

            http://wiki.jboss.org/wiki/Wiki.jsp?page=JBWSFAQSupportForJSR181

            jbossws-2.0.0 will come out Q1/2007