30.2. 프로토콜 폴트
30.2.1. 개요
요청 처리 중에 오류가 발생하면 프로토콜 예외가 발생합니다. 모든 동기 원격 호출은 프로토콜 예외를 throw할 수 있습니다. 근본적인 원인은 소비자의 메시지 처리 체인 또는 서비스 공급자에서 발생합니다.
Cryostat-WS 사양은 일반 프로토콜 예외를 정의합니다. 또한 ESP 특정 프로토콜 예외 및 HTTP 특정 프로토콜 예외를 지정합니다.
30.2.2. 프로토콜 예외 유형
Cryostat-WS 사양은 세 가지 유형의 프로토콜 예외를 정의합니다. catch하는 예외는 애플리케이션에서 사용하는 전송 및 바인딩에 따라 다릅니다.
표 30.2. “일반 프로토콜 유형 예외” 프로토콜 예외의 세 가지 유형과 이러한 예외가 throw되는 시기에 대해 설명합니다.
예외 클래스 | Thrown 시 |
---|---|
javax.xml.ws.ProtocolException | 이 예외는 일반 프로토콜 예외입니다. 사용 중인 프로토콜에 관계없이 사용할 수 있습니다. Cryostat 바인딩 또는 HTTP 바인딩을 사용하는 경우 특정 오류 유형으로 캐스팅할 수 있습니다. HTTP 또는 JMS 전송과 함께 XML 바인딩을 사용하는 경우 일반 프로토콜 예외를 보다 구체적인 fault 유형으로 캐스팅할 수 없습니다. |
javax.xml.ws.soap.SOAPFaultException | 이 예외는 Cryostat 바인딩을 사용할 때 원격 호출에 의해 발생합니다. 자세한 내용은 “Cryostat 프로토콜 예외 사용” 에서 참조하십시오. |
javax.xml.ws.http.HTTPException | 이 예외는 Apache CXF HTTP 바인딩을 사용하여 RESTful 웹 서비스를 개발할 때 발생합니다. 자세한 내용은 VI 부. RESTful 웹 서비스 개발 에서 참조하십시오. |
30.2.3. Cryostat 프로토콜 예외 사용
CryostatFaultException 예외는 Cryostat 오류를 래핑합니다. 기본 Cryostat 오류는 fault
필드에 javax.xml.soap.SOAPFault 개체로 저장됩니다.
서비스 구현에서 애플리케이션에 대해 생성된 사용자 지정 예외에 맞지 않는 예외를 throw해야 하는 경우 예외 작성자를 사용하여 오류를 래핑하고 소비자로 다시 throw할 수 있습니다. 예 30.1. “ESP 프로토콜 예외 발생” 메서드가 잘못된 매개 변수를 통과한 경우 CryostatFaultException을 생성하고 throw하는 코드를 표시합니다.
예 30.1. ESP 프로토콜 예외 발생
public Quote getQuote(String ticker) { ... if(tickers.length()<3) { SOAPFault fault = SOAPFactory.newInstance().createFault(); fault.setFaultString("Ticker too short"); throw new SOAPFaultException(fault); } ... }
소비자가#159FaultException 예외를 catch하면 래핑된 CryostatFault 예외를 검사하여 예외의 기본 원인을 검색할 수 있습니다. 예 30.2. “Fault from a Cryostat Protocol Exception” 에 표시된 대로 CryostatFault 예외는 CryostatFaultException 예외의 getFault()
메서드를 사용하여 검색됩니다.
예 30.2. Fault from a Cryostat Protocol Exception
...
try
{
proxy.getQuote(ticker);
}
catch (SOAPFaultException sfe)
{
SOAPFault fault = sfe.getFault();
...
}