2016-12-12 14 views
1

apache camel을 사용하여 cxf soap 웹 서비스를 처리 할 웹 서비스 클라이언트를 만들었습니다.Apache Camel (Java DSL)로 cxf 웹 서비스 헤더 가로 채기

String serviceUri = "cxf:http://localhost:10000/myservice?serviceClass=" + 
    MyRequest.class.getCanonicalName(); 

from(uri).to("mock:xyz"); 

웹 서비스는 SOAP 호출을 수신하지만, 요구 WSS위한 처리를 필요로하기 때문에 예외를 던진다. 서비스 요청에 lloking 볼 수 있습니다 WS 보안을 필요로

org.apache.cxf.binding.soap.SoapFault: MustUnderstand headers: [{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood.

이유는

.

<SOAP-ENV:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" SOAP-ENV:mustUnderstand="1"> 

헤더 속성을 처리하기위한 인터셉터를 구현해야한다는 것을 알게되었습니다.

내 질문 :

  • 가 어떻게 헤더를 처리하는 인터셉터를 추가 할 수는 낙타 자바 DSL과 속성?

  • SOAP 결함을 없애기에 충분합니까?

답변

1

당신은 cxfEndpointConfigurer 옵션 @see를 통해 수행 할 수 있습니다 Camel-CXF configuration

(나는 봄 (가 훨씬 쉽다)를 사용),하지만 난 DSL에 대한 URI 모양을 추측 같은 :

String serviceUri = "cxf:http://localhost:10000/myservice?serviceClass=" + 
MyRequest.class.getCanonicalName() + 
"&cxfEndpointConfigurer="+ MyConfigurer.class.getCanonicalName(); 

org.apache.camel.component.cxf.CxfEndpointConfigurer를 구현하여 configureServer 메소드 내에 인터셉터를 추가 할 수 있습니다.

server.getEndpoint().getInInterceptors().add(new MyJAASLoginInterceptor()); 

당신은 필요한 콜백 핸들러와

org.apache.cxf.interceptor.security.JAASLoginInterceptor 

에서 확장 기능을 사용할 수 있습니다 (JBOSS 등) JAAS와 용기에 낙타를 실행합니다. JBOSS 사용자에 대해 WSS 헤더에서 사용자/비밀번호 유효화 간단한 예 : 불행히도

public class MyJAASLoginInterceptor extends javax.security.auth.callback.JAASLoginInterceptor { 

    @Override 
    protected CallbackHandler getCallbackHandler(String name, String password) { 

    return new org.apache.cxf.interceptor.security.NamePasswordCallbackHandler(name, password, "setCredential"); 

    } 

} 
+0

"& cxfEndpointConfigurer ="+ MyConfigurer.class.getCanonicalName을(); 작동하지 않습니다. 오류 메시지가 나타납니다. "같은 유형의 setter 메소드가 없기 때문에 : cxfEndpointConfigurer 속성에 적합한 setter를 찾을 수 없습니다. java.lang.String도 형식 변환도 가능합니다." – ABX

+0

pls. 읽기 : http://camel.465427.n5.nabble.com/cxfEndpointConfigurer-in-an-URI-td5773083.html – Vadim