0 Replies Latest reply on Jun 6, 2006 8:38 AM by alexander.kirsch

    Problems with complex Exceptions

    alexander.kirsch

      Hallo,

      I tried to define a complex exception in the following WSDL

      
      <?xml version="1.0" encoding="UTF-8"?>
      
      <wsdl:definitions
       name="SessionWebService"
       xmlns:types="urn:sedna.ser.de/ns"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
       xmlns:tns="urn:sedna.ser.de"
       targetNamespace="urn:sedna.ser.de" >
      
       <wsdl:types>
       <xsd:schema targetNamespace="urn:sedna.ser.de/ns" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="SednaException">
       <xsd:complexType>
       <xsd:sequence>
       <xsd:element name="sednaErrorCode" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="false"/>
       <xsd:element name="errorLevel" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="false"/>
       <xsd:element name="className" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="true"/>
       <xsd:element name="elementId" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="true"/>
       <xsd:element name="displayInfo" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="false"/>
       </xsd:sequence>
       </xsd:complexType>
       </xsd:element>
       </xsd:schema>
       </wsdl:types>
      
       <wsdl:message name="SednaExceptionFault">
       <wsdl:part name="fault" element="types:SednaException"/>
       </wsdl:message>
      
       <wsdl:message name="SessionServiceWS_login">
       <wsdl:part name="loginname" type="xsd:string" />
       <wsdl:part name="password" type="xsd:string" />
       </wsdl:message>
       <wsdl:message name="SessionServiceWS_loginResponse">
       <wsdl:part name="result" type="types:StringArray" />
       </wsdl:message>
      
       <wsdl:portType name="SessionServiceWS">
      
       <wsdl:operation name="login" parameterOrder="loginname password">
       <wsdl:input message="tns:SessionServiceWS_login" />
       <wsdl:output message="tns:SessionServiceWS_loginResponse" />
       <wsdl:fault name="SednaException" message="tns:SednaExceptionFault" />
       </wsdl:operation>
      
       </wsdl:portType>
      
       <wsdl:binding name="SessionServiceWSBinding" type="tns:SessionServiceWS">
       <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />
       <wsdl:operation name="login">
       <soap:operation soapAction="" />
       <wsdl:input>
       <soap:body use="literal" namespace="urn:sedna.ser.de" />
       </wsdl:input>
       <wsdl:output>
       <soap:body use="literal" namespace="urn:sedna.ser.de" />
       </wsdl:output>
       <wsdl:fault name="SednaException">
       <soap:fault name="SednaException" use="literal"/>
       </wsdl:fault>
       </wsdl:operation>
       </wsdl:binding>
      
       <wsdl:service name="SessionWebService">
       <wsdl:port name="SessionServiceWSPort" binding="tns:SessionServiceWSBinding">
       <soap:address location="REPLACE_WITH_ACTUAL_URL" />
       </wsdl:port>
       </wsdl:service>
      
      </wsdl:definitions>
      
      


      I used the wscompile tool from the jax-rpc ri the generate the java classes and the jax-rpc mapping files for a JSR-109 POJO Endpoint without any problem. If I try to deploy it on a JBoss 4.0.4GA I got the following errors.

      
      2006-06-06 13:56:11,026 WARN [org.jboss.ws.metadata.JSR109MetaDataBuilder] Cannot obtain java type mapping for: {urn:sedna.ser.de/ns}>SednaException
      
      2006-06-06 13:56:12,213 DEBUG [org.jboss.ws.metadata.JSR109ServerMetaDataBuilder] END buildMetaData:
      UnifiedMetaData:
       securityDomain: null
      
      
      ServiceMetaData:
       name={urn:sedna.ser.de}SessionWebService
       wsdName=SessionWebService
       wsdlFile=WEB-INF/wsdl/SessionWebService.wsdl
       jaxrpcFile=WEB-INF/ses_mapping.xml
       publishLocation=null
       properties=null
      
      TypesMetaData:
       [complexType={urn:sedna.ser.de/ns}StringArray,javaType=com.ser.sedna.services.transfer.types.StringArray]
       [complexType={urn:sedna.ser.de/ns}SednaException,javaType=com.ser.sedna.services.transfer.types.SednaException]
       [complexType={urn:sedna.ser.de/ns}StringArray>value[0,unbounded],javaType=java.lang.String[]]
       [complexType={urn:sedna.ser.de}SednaExceptionFault,javaType=com.ser.sedna.services.transfer.types.SednaException]
      <schema targetNamespace='urn:sedna.ser.de/ns' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='urn:sedna.ser.de/ns' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
       <complexType name='StringArray'>
       <sequence>
       <element maxOccurs='unbounded' minOccurs='0' name='value' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <element name='SednaException'>
       <complexType>
       <sequence>
       <element name='sednaErrorCode' type='string'/>
       <element name='errorLevel' type='string'/>
       <element name='className' nillable='true' type='string'/>
       <element name='elementId' nillable='true' type='string'/>
       <element name='displayInfo' type='string'/>
       </sequence>
       </complexType>
       </element>
      </schema>
      
      
      ServerEndpointMetaData:
       name={urn:sedna.ser.de}SessionServiceWSPort
       id=jboss.ws:di=sedna.ear/sedna-transfer-service-ws.war,port=SessionServiceWSPort,service=SessionWebService
       address=http://KIRSCH-XP:8080/sedna-transfer-service-ws/SessionServiceWS
       linkName=SessionServiceWS
       implName=null
       seiName=com.ser.sedna.services.transfer.ws.SessionServiceWS
       annotated=false
       portComponentName=SessionServiceWS
       contextRoot=/sedna-transfer-service-ws
       urlPattern=/SessionServiceWS
       configFile=META-INF/standard-jbossws-endpoint-config.xml
       configName=Standard Endpoint
       authMethod=null
       transportGuarantee=null
       properties=null
      
      OperationMetaData:
       xmlName={urn:sedna.ser.de}login
       javaName=login
       style=rpc/literal
       oneWay=false
       soapAction=
      ParameterMetaData:
       xmlName=loginname
       xmlType={http://www.w3.org/2001/XMLSchema}string
       javaType=java.lang.String
       mode=IN
       inHeader=false
      ParameterMetaData:
       xmlName=password
       xmlType={http://www.w3.org/2001/XMLSchema}string
       javaType=java.lang.String
       mode=IN
       inHeader=false
      ReturnMetaData:
       xmlName=result
       xmlType={urn:sedna.ser.de/ns}StringArray
       javaType=com.ser.sedna.services.transfer.types.StringArray
       mode=OUT
       inHeader=false
      FaultMetaData
       xmlName={urn:sedna.ser.de/ns}SednaException
       xmlType={urn:sedna.ser.de/ns}>SednaException
       javaType=org.jboss.ws.jaxrpc.UnqualifiedFaultException
      
      


      As far as I understand is the mapping information existent in jax-rpc mapping file.

      
      <?xml version="1.0" encoding="UTF-8"?>
      <java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      version="1.1"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd">
       <package-mapping>
       <package-type>com.ser.sedna.services.transfer.ws</package-type>
       <namespaceURI>urn:sedna.ser.de</namespaceURI>
       </package-mapping>
       <package-mapping>
       <package-type>com.ser.sedna.services.transfer.types</package-type>
       <namespaceURI>urn:sedna.ser.de/ns</namespaceURI>
       </package-mapping>
       <package-mapping>
       <package-type>com.ser.sedna.services.transfer.types</package-type>
       <namespaceURI>urn:sedna.ser.de/ns</namespaceURI>
       </package-mapping>
       <java-xml-type-mapping>
       <java-type>com.ser.sedna.services.transfer.types.StringArray</java-type>
       <root-type-qname xmlns:typeNS="urn:sedna.ser.de/ns">typeNS:StringArray</root-type-qname>
       <qname-scope>complexType</qname-scope>
       <variable-mapping>
       <java-variable-name>value</java-variable-name>
       <xml-element-name>value</xml-element-name>
       </variable-mapping>
       </java-xml-type-mapping>
       <java-xml-type-mapping>
       <java-type>com.ser.sedna.services.transfer.types.SednaException</java-type>
       <root-type-qname xmlns:typeNS="urn:sedna.ser.de/ns">typeNS:SednaException</root-type-qname>
       <qname-scope>complexType</qname-scope>
       <variable-mapping>
       <java-variable-name>sednaErrorCode</java-variable-name>
       <xml-element-name>sednaErrorCode</xml-element-name>
       </variable-mapping>
       <variable-mapping>
       <java-variable-name>errorLevel</java-variable-name>
       <xml-element-name>errorLevel</xml-element-name>
       </variable-mapping>
       <variable-mapping>
       <java-variable-name>className</java-variable-name>
       <xml-element-name>className</xml-element-name>
       </variable-mapping>
       <variable-mapping>
       <java-variable-name>elementId</java-variable-name>
       <xml-element-name>elementId</xml-element-name>
       </variable-mapping>
       <variable-mapping>
       <java-variable-name>displayInfo</java-variable-name>
       <xml-element-name>displayInfo</xml-element-name>
       </variable-mapping>
       </java-xml-type-mapping>
       <java-xml-type-mapping>
       <java-type>java.lang.String[]</java-type>
       <anonymous-type-qname>urn:sedna.ser.de/ns:StringArray>value[0,unbounded]</anonymous-type-qname>
       <qname-scope>complexType</qname-scope>
       </java-xml-type-mapping>
       <exception-mapping>
       <exception-type>com.ser.sedna.services.transfer.types.SednaException</exception-type>
       <wsdl-message xmlns:exMsgNS="urn:sedna.ser.de">exMsgNS:SednaExceptionFault</wsdl-message>
       <constructor-parameter-order>
       <element-name>sednaErrorCode</element-name>
       <element-name>errorLevel</element-name>
       <element-name>className</element-name>
       <element-name>elementId</element-name>
       <element-name>displayInfo</element-name>
       </constructor-parameter-order>
       </exception-mapping>
       <service-interface-mapping>
       <service-interface>com.ser.sedna.services.transfer.ws.SessionWebService</service-interface>
       <wsdl-service-name xmlns:serviceNS="urn:sedna.ser.de">serviceNS:SessionWebService</wsdl-service-name>
       <port-mapping>
       <port-name>SessionServiceWSPort</port-name>
       <java-port-name>SessionServiceWSPort</java-port-name>
       </port-mapping>
       </service-interface-mapping>
       <service-endpoint-interface-mapping>
       <service-endpoint-interface>com.ser.sedna.services.transfer.ws.SessionServiceWS</service-endpoint-interface>
       <wsdl-port-type xmlns:portTypeNS="urn:sedna.ser.de">portTypeNS:SessionServiceWS</wsdl-port-type>
       <wsdl-binding xmlns:bindingNS="urn:sedna.ser.de">bindingNS:SessionServiceWSBinding</wsdl-binding>
       <service-endpoint-method-mapping>
       <java-method-name>login</java-method-name>
       <wsdl-operation>login</wsdl-operation>
       <method-param-parts-mapping>
       <param-position>0</param-position>
       <param-type>java.lang.String</param-type>
       <wsdl-message-mapping>
       <wsdl-message xmlns:wsdlMsgNS="urn:sedna.ser.de">wsdlMsgNS:SessionServiceWS_login</wsdl-message>
       <wsdl-message-part-name>loginname</wsdl-message-part-name>
       <parameter-mode>IN</parameter-mode>
       </wsdl-message-mapping>
       </method-param-parts-mapping>
       <method-param-parts-mapping>
       <param-position>1</param-position>
       <param-type>java.lang.String</param-type>
       <wsdl-message-mapping>
       <wsdl-message xmlns:wsdlMsgNS="urn:sedna.ser.de">wsdlMsgNS:SessionServiceWS_login</wsdl-message>
       <wsdl-message-part-name>password</wsdl-message-part-name>
       <parameter-mode>IN</parameter-mode>
       </wsdl-message-mapping>
       </method-param-parts-mapping>
       <wsdl-return-value-mapping>
       <method-return-value>com.ser.sedna.services.transfer.types.StringArray</method-return-value>
       <wsdl-message xmlns:wsdlMsgNS="urn:sedna.ser.de">wsdlMsgNS:SessionServiceWS_loginResponse</wsdl-message>
       <wsdl-message-part-name>result</wsdl-message-part-name>
       </wsdl-return-value-mapping>
       </service-endpoint-method-mapping>
       </service-endpoint-interface-mapping>
      </java-wsdl-mapping>
      
      


      So is this a bug in the JBossWS Implementation or is something wrong in my setup.

      Thank you!