如何从服务端点接口

时间:2016-03-03 06:03:39

标签: java web-services soap websphere-8

我有SEI类,它抛出在WSDL文件中声明的异常。在处理抛出此异常的过程中,SOAP Fault会成功发送到客户端。这里没有问题。 但是,当我们在处理过程中遇到服务器中的任何运行时异常时,我们会创建一个自定义Fault并从SEI类中抛出相同的错误。 由于此自定义错误未在SEI中声明,因此我们添加了Fault Class以扩展RuntimeException。但是,从应用程序代码中抛出此自定义错误时,Websphere应用程序服务器不会将SOAP错误返回给客户端。相反,它会抛出异常并将Http错误代码500发送到客户端。 有没有办法将自定义错误消息发送到客户端而不在WSDL中声明相同。

我的WebMethod:

public CustomerDetails enquireCustomer(Customer customer)
        throws CustomerFault
{
    try
    {
       // SOME LOGIC HERE
    }
    catch (Exception exception)
    {
        if (exception instanceof CustomerFault)
        throw ((CustomerFault) exception );

        if (localException instanceof CustomerFault)
        {
        FaultDetails faultDetails = new FaultDetails();
        faultDetails.setErrorId(1);
        faultDetails.setErrorDescription(errorDescription);
        throw new CustomerFault("Failed in Processing and other details here... ", faultDetails);
        }
    }
        }

我的错误类

import javax.xml.ws.WebFault;
@WebFault(name="CustomerFault", targetNamespace="http://www.mycompany.com")
public class CustomerFault extends RuntimeException 
{
    private static final long serialVersionUID = 1L;
    private FaultDetails faultDetails;
    public ServiceExecutionFault(String message, FaultDetails faultDetails) {
        super(message);
        this.faultDetails = faultDetails;
    }

    public ServiceExecutionFault(String message)
    {
    super(message);
    }
    public ServiceExecutionFault(String message, FaultDetails faultDetails, 
           Throwable cause) {
        super(message, cause);
        this.faultDetails = faultDetails;
    }
    public FaultDetails getFaultInfo() {
        return faultDetails;
    }
}

这个问题似乎只存在于Websphere中。在weblogic中尝试时,同样正常工作没有任何问题。我在这里缺少任何标准。

1 个答案:

答案 0 :(得分:1)

在这里找到答案:

JAX-WS server-side SOAPHandler that returns fault gets "Internal Error" on WebSphere v8

通过禁用websphere中的统一故障处理,这很好用。 添加以下JVM属性。

-Dwebservices.unify.faults=false

可以从管理控制台设置:

  

服务器 - >服务器类型 - > Websphere Application Server - >处理   定义 - > Java虚拟机 - >自定义属性

Screenshot