2013-08-20 4 views
0

CXFServlet에 들어갈 때 SOAP 요청을 잡는 데 사용하려는 응용 프로그램을 작성하고 있습니다. CXFServlet이 처리하기 전에 서버 측의 SOAP 봉투로 처리해야 할 일이 있습니다.Apache CXF 요청/응답

나는 SOAP 봉투가 서버 측에 도달하면 HTTPServletRequest 객체의 매개 변수 중 하나라고 추정 해왔다. 하지만 (디버거를 사용하여) 무엇이 들어 있는지 살펴보면 찾을 수 없습니다.

클라이언트가 서버로 SOAP 요청을 보낼 때 SOAP 요청이 전달되는 위치를 알려줄 수 있습니까? 클라이언트가 HTTP POST를 사용하여 요청을 보내고 있으며 서버가 적절한 웹 서비스 메서드에 액세스하기 위해 요청의 정보를 사용하고 메서드의 반환 값을 SOAP 응답에 배치하고 반환한다는 것을 알고 있습니다. 클라이언트에게. 내가 알아야 할 것은 CXFServlet (또는 필터 중 하나)이 SOAP 정보를 얻기 위해 어디에서 보입니까? 그것은 매개 변수의 어딘가에 있습니까? 서블릿 컨텍스트에서? CXFServlet에 도착하기 전에 필터가 SOAP 정보를 처리합니까? 웹 서비스 메서드가 호출되기 전에 어떻게 그 봉투를 가져 와서 그것을 할 수 있습니까?

누군가가 조언하십시오.

+0

원래 요청에 액세스 하시겠습니까? – Gourabp

답변

0

원래 요청에 액세스 하시겠습니까? 그렇다면 실제 요청 또는 응답 객체 자체는 WebServiceContext 객체를 사용하여 액세스 할 수 있습니다.

첫째, 서비스 구현에으로, WebServiceContext에 대한 private 필드를 선언하고 자원

@Resource 개인으로, WebServiceContext 컨텍스트로 주석; 당신의 방법을 구현 내에서

그런 다음, 사용자가 액세스 할 수있는의 MessageContext는 HttpServletRequest의, 그리고 HttpServletResponse를 다음과 같이 :

의 MessageContext CTX = context.getMessageContext();

HttpServletRequest request = (HttpServletRequest) ctx.get (AbstractHTTPDestination.HTTP_REQUEST); 당신이 이제까지 CXFServlet도에 의해 처리되기 전에, 당신이 서블릿 Filter을 개발 보라는 요청을 차단해야하는 경우 http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/WebServiceContext.html

0

:으로, WebServiceContext에 대한 자세한 정보는 다음 URL을 참조하십시오

.

CXF가 처리하기 전에 SOAP 메시지를 처리하려는 경우 CXF Interceptor을 사용할 수 있습니다. 문서에서 언급 된 단계는 메시지를 가로 챌 수있는 지점을 나타냅니다. 수행하려는 작업/변경하려는 작업에 따라 단계별 작업이 필요할 수 있습니다.

CXF의 SoapHeaderInterceptor 또는 SoapActionInInterceptor의 출처는 SOAP 메시지 작업 방법을 알아보기에 좋은 장소입니다.

+0

패트릭 : 내가 찾고있는 것에 가깝지만 좀 더 정확해야한다. 내가하고 싶은 것은 서블릿에 요청을 보내면 처리하고 SOAP 봉투를 CXFServlet에 "주입"한다. CXF가 일반적으로하는 것처럼 SOAP 봉투를 처리해야하지만, 다른 서블릿에서 해당 봉투를 생성한다는 아이디어가 있습니다. 이것이 CXF에서 가능합니까? –

+0

요청을받는 서블릿이 단순히 CXF 웹 서비스에 대한 jaxws 클라이언트로 작동 할 수없는 이유가 있습니까? 간단 해 보이는 접근법입니다.또한 CXF 인터셉터를 사용하여 메시지 처리를 시작하기 전에 메시지의 입력 스트림을 수정할 수도 있습니다. CXFServlet에 SOAP 엔벨로프를 "삽입"한다는 것이 무슨 뜻인지 모르겠습니다. 아마도 당신이 해결하려고하는 문제를 묘사 할 수 있습니까? – Patrick

+0

사실, 그렇습니다. 필자는 SOAP 봉투를 직접 조작하고 경우에 따라 사용자 지정 SOAP 요청을 만들어야합니다. 비 SOAP 요청은 서블릿 A로 이동하고, 서블릿 A는 요청을 생성 한 다음 CXFServlet으로 전달합니다. 클라이언트가 SOAP 요청을 Servlet B로 보내면 서블릿 B는 약간의 변경과 추가를 한 다음 변경된 요청을 CXFServlet으로 전달합니다. 중요한 것은 CXFServlet과 독립적으로 SOAP 봉투의 직접 조작입니다. 서블릿 클라이언트 나 인터셉터로는 할 수없는 것입니다 ... –