2016-03-03 25 views
1

我有SEI類,它引發了一個在WSDL文件中聲明的異常。在處理期間,當引發此異常時,SOAP Fault將成功發送到客戶端。這裏沒有問題。 但是,當我們在處理過程中遇到服務器中的任何運行時異常時,我們會創建一個自定義故障並從SEI類拋出相同的錯誤。 由於此自定義錯誤未在SEI中聲明,因此我們添加了錯誤類來擴展RuntimeException。但是,當從應用程序代碼拋出此自定義錯誤時,Websphere應用程序服務器不會將SOAP錯誤返回給客戶端。相反,它會引發異常,並將Http錯誤代碼500發送給客戶端。 有沒有辦法將自定義錯誤消息發送到客戶端,而無需在WSDL中聲明相同的消息。如何從服務端點接口拋出自定義錯誤(錯誤未在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中嘗試時,同樣的工作正常,沒有任何問題。有沒有我在這裏失蹤的標準。

回答