2011-09-24 2 views
0

JAX-WS로 WebService를 개발 중입니다. 이 WebService에서, 나는 SOAP-오류로 "DatabaseQueryFault"가 :Struts2 애플리케이션에서 WebService Exception (SOAP-Fault)에 액세스하기

구현하는 자바 방법이 헤더

public QueryResponseResultset executeCustomQuery(ExecuteCustomQuery parameters) 
    throws RemoteException, DatabaseQueryFault { 

예외가 발생 될 때마다, 예를 들어 SQLException이있다

<wsdl:operation name="executeCustomQuery"> 
     <wsdl:input message="tns:executeCustomQueryRequest"></wsdl:input> 
     <wsdl:output message="tns:executeCustomQueryResponse"></wsdl:output> 
     <wsdl:fault name="DatabaseQueryFault" message="tns:DatabaseQueryFault"></wsdl:fault> 
    </wsdl:operation> 

     <xsd:element name="databaseQueryFault" type="tns:databaseQueryFault" /> 
     <xsd:complexType name="databaseQueryFault"> 
      <xsd:sequence> 
       <xsd:element name="reason" type="xsd:string" minOccurs="0" /> 
      </xsd:sequence> 
     </xsd:complexType> 

, I 이 여기까지 아주 잘 작동

} catch (Exception e) { 
     throw new DatabaseQueryFault(e.getMessage()); 
    } 

: 내가 잘못된 쿼리를 보내는 경우, 나는 모든 t을 포함하여 DatabaseQueryFault를 포함하는 SOAP 응답을 내려면 DatabaseQueryFault로를 "변환" 그는 데이터

<soapenv> 
    <soapenv:Body> 
    <soapenv:Fault> 
     <faultcode>soapenv:Server.generalException</faultcode> 
     <faultstring></faultstring> 
     <detail> 
     <ns1:databaseQueryFault xmlns:ns1="http://daga/knowledgebase/webservice">   
     <reason>Unknown column 'test14' in 'field list'</reason> 
     </ns1:databaseQueryFault> 
     <ns2:exceptionName xmlns:ns2="http://xml.apache.org/axis/"> 
      daga.knowledgebase.webservice.DatabaseQueryFault 
     </ns2:exceptionName> 
     <ns3:stackTrace xmlns:ns3="http://xml.apache.org/axis/"> 

하지만 지금 내 WebService에 클라이언트 :-) 문제가 Struts2 웹 응용 프로그램이되어 온다.

<global-exception-mappings> 
    <exception-mapping exception="java.lang.Exception" result="error" /> 
</global-exception-mappings> 

지금 내 JSP 오류 페이지 내에서 내 비누 오류의 ​​세부 사항에 액세스하기를 원하지만 필드가 비어 :이 나는 struts2의 기본 예외 처리 (struts.xml)를 사용

<p> 
    <s:property value="exception" /><br /> 
    <s:property value="exception.message" /><br /> 
    <s:property value="exception.reason" /> 
</p> 

jsp 파일에서 WebService 예외 데이터에 액세스하려면 어떻게해야합니까?

답변

1

글쎄, 당신이 만들고 던지면 않는 한 예외에 직접 액세스 할 수는 없습니다.

이 케이스를 S2 예외 처리 (이 경우 "meh"종류)로 처리하든 그렇지 않든 반환 메시지를 사용자에게 가치있는 것으로 변환해야합니다. XML을 사람이 읽을 수있는 것으로 변형하거나 앱과 관련된 관련 정보를 캡처하는 예외를 만들 수 있습니다.

+0

내 Java 코드에서 WebService (JAX-WS)를 잡아두고 거기에 새로운 "일반적인"예외를 던져 내 S2 파일에서이 예외를 처리해야 함을 의미합니까? – strauberry

+0

죄송합니다. 후속 조치를 놓쳤다. 더 많거나 적습니다. 예 - 예외가 SOAP 메시지에 캡슐화되었으므로 사용자가 SOAP 메시지를 만들지 않는 한 실제 애플리케이션 예외는 없습니다. 앱 예외가되어야하는지 아니면 정상적인 앱 오류 상태로보고되었는지 여부는 종종 선호되는 문제입니다. –