30.2. 프로토콜 Faults
30.2.1. 개요
요청 처리 중에 오류가 발생하면 프로토콜 예외가 발생합니다. 모든 동기 원격 호출은 프로토콜 예외를 throw할 수 있습니다. 근본적인 원인은 소비자의 메시지 처리 체인 또는 서비스 공급자에서 발생합니다.
JAX-WS 사양은 일반 프로토콜 예외를 정의합니다. 또한 SOAP 관련 프로토콜 예외 및 HTTP 특정 프로토콜 예외를 지정합니다.
30.2.2. 프로토콜 예외 유형
JAX-WS 사양은 세 가지 유형의 프로토콜 예외를 정의합니다. catch하는 예외는 애플리케이션에서 사용하는 전송 및 바인딩에 따라 다릅니다.
표 30.2. “일반 프로토콜 예외의 유형” 세 가지 유형의 프로토콜 예외와 이러한 예외가 throw되는 경우에 대해 설명합니다.Describes the three types of protocol exception and when they are thrown.
예외 클래스 | Thrown |
---|---|
javax.xml.ws.ProtocolException | 이 예외는 일반적인 프로토콜 예외입니다. 사용 중인 프로토콜에 관계없이 잡을 수 있습니다. SOAP 바인딩 또는 HTTP 바인딩을 사용하는 경우 특정 오류 유형으로 캐스팅할 수 있습니다. HTTP 또는 JMS 전송과 함께 XML 바인딩을 사용하는 경우 일반 프로토콜 예외를 보다 구체적인 오류 유형으로 캐스팅할 수 없습니다. |
javax.xml.ws.soap.SOAPFaultException | 이 예외는 SOAP 바인딩을 사용할 때 원격 호출에 의해 발생합니다.This exception is thrown by remote invocations when using the SOAP binding. 자세한 내용은 “SOAP 프로토콜 예외 사용” 에서 참조하십시오. |
javax.xml.ws.http.HTTPException | 이 예외는 Apache CXF HTTP 바인딩을 사용하여 RESTful 웹 서비스를 개발할 때 throw됩니다. 자세한 내용은 VI 부. RESTful 웹 서비스 개발 에서 참조하십시오. |
30.2.3. SOAP 프로토콜 예외 사용
SOAPFaultException 예외는 SOAP 오류를 래핑합니다. 기본 SOAP 오류는 fault
필드에 javax.xml.soap.SOAPFault 오브젝트로 저장됩니다.
서비스 구현에서 애플리케이션에 대해 생성된 사용자 지정 예외에 맞지 않는 예외를 throw해야 하는 경우 예외 작성자를 사용하여 SOAPFaultException에서 오류를 래핑하고 사용자에게 다시 throw할 수 있습니다. 예 30.1. “SOAP 프로토콜 예외 발생” 메서드가 잘못된 매개 변수를 전달하는 경우 SOAPFaultException을 만들고 throw하기 위한 코드를 표시합니다.Shows code for creating and throwing a SOAPFaultException if the method is passed an invalid parameter.
예 30.1. SOAP 프로토콜 예외 발생
public Quote getQuote(String ticker) { ... if(tickers.length()<3) { SOAPFault fault = SOAPFactory.newInstance().createFault(); fault.setFaultString("Ticker too short"); throw new SOAPFaultException(fault); } ... }
소비자가 SOAPFaultException 예외를 catch하면 래핑된 SOAPFault 예외를 검사하여 예외의 기본 원인을 검색할 수 있습니다. 예 30.2. “SOAP 프로토콜 예외에서 Fault를 받기” 와 같이 SOAPFault 예외는 SOAPFaultException 예외의 getFault()
메서드를 사용하여 검색됩니다.
예 30.2. SOAP 프로토콜 예외에서 Fault를 받기
...
try
{
proxy.getQuote(ticker);
}
catch (SOAPFaultException sfe)
{
SOAPFault fault = sfe.getFault();
...
}