카테고리 없음

SAAJ 클라이언트에 핸들러 등록하기.

lovian 2007. 1. 4. 14:29
 SAAJ로 SOAPMessage를 생성하여 endPoint에 전송하는 코드가 있다.

 이 코드에서 핸들러를 사용하려고 한다.
 그러나 핸들러는 DII 타입의 클라이언트에서 등록하는 방법만 알고 있다.
 
 여기저기 쑤셔본 결과, 딱히 등록한 위치는 못찾겠다. Handle 인터페이스의 모양새가 init 후 handleRequest, handleResponse 이므로 각각의 메서드를 그냥 호출하기로 했다. 특별한 이상없이 잘 작동하였으나, handleRequest의 파라미터가 MessageContext 이기 때문에 이 클래스의 인스턴스가 필요하다. SAAJ, JAXRPC 인터페이스로는 생성이 불가하고, AXIS에서 구현한 클래스(org.apache.axis.MessageContext)로 인스턴스를 생성할 수 있었다.
 
 이 인스터스를 생성할 때에 파라미터가 AxisEngine이라는 객체인데, 잘 모르므로 null을 넘겼다.
 이 객체에 setRequestMessage를 설정후, handleRequest 메서드에 넘겨 요청시에 핸들러를 작동시키고 서비스를 호출했다. 그리고 응답받은 Message를 setResponseMessage로 등록 후에 handleResponse 메서드에 넘겼다.
 
 뭐, 결과는 산뜻했다.
 단, AXIS에서 핸들러가 작동할 때에 SOAPMessage.writeTo 메서드를 호출하면 첨부데이터가 사라지는 이유는 알 수 없다. (Weblogic에서는 사라지지 않았다.)