2016-12-12 33 views
1

apache camelでcxf soap Webサービスを処理するWebサービスクライアントを作成しました。Apache Camel(Java DSL)でcxf Webサービスヘッダーを傍受する

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

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

Webサービスはsoap呼び出しを受け取りますが、要求にはwssの処理が必要なため例外がスローされます。

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.

理由は、サービスが要求に応じてllokingで見ることができるWSセキュリティを、必要であること、です。

<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"> 

私は、ヘッダプロパティを処理するためにインターセプタを実装する必要があることを知りました。

私の質問:

  • にはどうすればヘッダはキャメルのJava-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()); 

あなたは(JBOSSのような)JAASとコンテナであなたのキャメルを実行する場合は、必要に応じてコールバックハンドラを

org.apache.cxf.interceptor.security.JAASLoginInterceptor 

から拡張子を使用することができます。 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()。私はエラーメッセージ "プロパティの適切なセッターを見つけることができませんでした:cxfEndpointConfigurerと同じ型のsetterメソッドがない:java.lang.Stringも型変換も可能:" – ABX

+0

pls。これを読んでください:http://camel.465427.n5.nabble.com/cxfEndpointConfigurer-in-an-URI-td5773083.html – Vadim

関連する問題