43.7. 자주하는 질문

43.7.1. 개요

핸들러는 메시지 처리 중에 ProtocolException 예외가 throw될 때 오류 메시지를 처리하는 데 handleFault() 메서드를 사용합니다.

handleFault() 메서드는 처리기 유형에 따라 LogicalMessageContext 개체 또는 SOAPMessageContext 개체를 수신합니다. 수신된 컨텍스트는 핸들러의 메시지 페이로드에 대한 구현 액세스를 제공합니다.

handleFault() 메서드는 오류 메시지 처리 방법에 따라 true 또는 false를 반환합니다. 또한 예외를 throw할 수 있습니다.

43.7.2. 메시지 페이로드 가져오기

handleFault() 메서드에서 받은 컨텍스트 오브젝트는 handleMessage() 메서드에서 수신한 오브젝트와 유사합니다. 컨텍스트의 getMessage() 메서드를 사용하여 동일한 방식으로 메시지 페이로드에 액세스합니다. 유일한 차이점은 컨텍스트에 포함된 페이로드입니다.

LogicalMessageContext 사용에 대한 자세한 내용은 43.3절. “논리 핸들러에서 메시지 처리” 을 참조하십시오.

SOAPMessageContext 사용에 대한 자세한 내용은 43.5절. “SOAP 핸들러에서 메시지 처리” 을 참조하십시오.

43.7.3. 반환 값 확인

handleFault() 메서드가 메시지 처리를 완료하는 방법은 메시지 처리가 진행되는 방식에 직접적인 영향을 미칩니다. 다음 작업 중 하나를 수행하여 완료합니다.

return true
오류 처리가 정상적으로 계속되어야 한다는 실제 신호를 반환합니다. 체인에서 다음 처리기의 handleFault() 메서드가 호출됩니다.
return false
오류 처리가 중지되는 잘못된 신호를 반환합니다. 현재 메시지를 처리하는 데 호출된 핸들러의 close() 메서드가 호출되고 오류 메시지가 디스패치됩니다.
예외를 throw
예외를 throw하면 오류 메시지 처리가 중지됩니다. 현재 메시지를 처리하는 데 호출된 핸들러의 close() 메서드가 호출되고 예외가 디스패치됩니다.

43.7.4. 예제

예 43.13. “메시지 핸들러에서 Fault 처리” 는 메시지 본문을 화면에 출력하는 handleFault() 의 구현을 보여줍니다.

예 43.13. 메시지 핸들러에서 Fault 처리

public final boolean handleFault(LogicalMessageContext messageContext)
{
  System.out.println("handleFault() called with message:");

  LogicalMessage msg=messageContext.getMessage();
  System.out.println(msg.getPayload());

  return true;
}