ws

JAX-WS soap fault code

  • MyService.java
  • pom.xml
  • wsdl
  • correct response
  • soap:Server fault code
  • soap:Client fault code

MyService.java

package com.training.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class MyService {

    @WebMethod
    public String correctInvokeMethod() {
        return "done";
    }

    @WebMethod
    public String soapServerFaultCode() {
        throw new RuntimeException();
    }

    @WebMethod
    public void soapClientFaultCode(int a) {
    }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.training</groupId>
    <artifactId>jax_ws_soap_fault_code</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

wsdl

<wsdl:definitions name="MyServiceService"
    targetNamespace="http://ws.training.com/">
    <wsdl:types>
        <xs:schema elementFormDefault="unqualified" targetNamespace="http://ws.training.com/"
            version="1.0">
            <xs:element name="correctInvokeMethod" type="tns:correctInvokeMethod" />
            <xs:element name="correctInvokeMethodResponse" type="tns:correctInvokeMethodResponse" />
            <xs:element name="soapClientFaultCode" type="tns:soapClientFaultCode" />
            <xs:element name="soapClientFaultCodeResponse" type="tns:soapClientFaultCodeResponse" />
            <xs:element name="soapServerFaultCode" type="tns:soapServerFaultCode" />
            <xs:element name="soapServerFaultCodeResponse" type="tns:soapServerFaultCodeResponse" />
            <xs:complexType name="soapServerFaultCode">
                <xs:sequence />
            </xs:complexType>
            <xs:complexType name="soapServerFaultCodeResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="correctInvokeMethod">
                <xs:sequence />
            </xs:complexType>
            <xs:complexType name="correctInvokeMethodResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="soapClientFaultCode">
                <xs:sequence>
                    <xs:element name="arg0" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="soapClientFaultCodeResponse">
                <xs:sequence />
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="soapServerFaultCode">
        <wsdl:part element="tns:soapServerFaultCode" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="soapClientFaultCode">
        <wsdl:part element="tns:soapClientFaultCode" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="soapServerFaultCodeResponse">
        <wsdl:part element="tns:soapServerFaultCodeResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="correctInvokeMethodResponse">
        <wsdl:part element="tns:correctInvokeMethodResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="soapClientFaultCodeResponse">
        <wsdl:part element="tns:soapClientFaultCodeResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="correctInvokeMethod">
        <wsdl:part element="tns:correctInvokeMethod" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="MyService">
        <wsdl:operation name="soapServerFaultCode">
            <wsdl:input message="tns:soapServerFaultCode" name="soapServerFaultCode">
            </wsdl:input>
            <wsdl:output message="tns:soapServerFaultCodeResponse"
                name="soapServerFaultCodeResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="correctInvokeMethod">
            <wsdl:input message="tns:correctInvokeMethod" name="correctInvokeMethod">
            </wsdl:input>
            <wsdl:output message="tns:correctInvokeMethodResponse"
                name="correctInvokeMethodResponse">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="soapClientFaultCode">
            <wsdl:input message="tns:soapClientFaultCode" name="soapClientFaultCode">
            </wsdl:input>
            <wsdl:output message="tns:soapClientFaultCodeResponse"
                name="soapClientFaultCodeResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="MyServiceServiceSoapBinding" type="tns:MyService">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="correctInvokeMethod">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="correctInvokeMethod">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="correctInvokeMethodResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="soapServerFaultCode">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="soapServerFaultCode">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="soapServerFaultCodeResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="soapClientFaultCode">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="soapClientFaultCode">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="soapClientFaultCodeResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="MyServiceService">
        <wsdl:port binding="tns:MyServiceServiceSoapBinding" name="MyServicePort">
            <soap:address
                location="http://localhost:9080/jax_ws_soap_fault_code/MyServiceService" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

correct response

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:correctInvokeMethodResponse xmlns:ns2="http://ws.training.com/">
         <return>done</return>
      </ns2:correctInvokeMethodResponse>
   </soap:Body>
</soap:Envelope>

soap:Server fault code

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Server</faultcode>
         <faultstring>java.lang.RuntimeException</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

soap:Client fault code

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: Not a number: test</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>