cxf soap-headers に問題があります。Contract-firs-development メソッドを使用して cxf-project をセットアップしました。このような cxf コンポーネントを使用して Web サービスを呼び出したいと考えています。
<cxf:cxfEndpoint id="ICCSCustomerService"
address="http://localhost:8080/iccs-xsoap/CustomerService/updateCustomer"
serviceClass="de.iccs.xsoap.customer.v1.CustomerServiceImpl" >
</cxf:cxfEndpoint>
ws のリクエストとして pojo-message throw ダイレクト コンポーネントを送信したい 私のルートは次のようになります。
<route id="CustomerServiceUpdateCustomerTest">
<camel:from uri="direct:iccsUpdateCustomerRequest"/>
<camel:process ref="addCredentials"/>
<to uri="cxf:bean:ICCSCustomerService"/>
<camel:to uri="stream:out"/>
</route>
次のような SOAP ヘッダーを実装する必要があります。
<ns2:Header>
<simpleAuth xmlns="http://xsoap.iccs.de/v1" password="abc" username="xxx"/>
</ns2:Header>
これをアーカイブするために、次のようなプロセッサを作成しました ( http://camel.apache.org/cxf.htmlの例も参照してください)。
@Override
public void process(Exchange exchange) throws Exception {
List<SoapHeader> soapHeaders = CastUtils.cast((List<?)exchange.getOut().getHeader(Header.HEADER_LIST));
// Insert a new header
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><outofbandHeader "
+ "xmlns=\"http://cxf.apache.org/outofband/Header\" hdrAttribute=\"testHdrAttribute\" "
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" soap:mustUnderstand=\"1\">"
+ "<name>simpleAuth username=\"xxx\" password=\"abc\" xmlns=\"http://xsoap.iccs.de/v1\"</name></outofbandHeader>";
SoapHeader newHeader = new SoapHeader(new QName("http://xsoap.iccs.de/v1", "simpleAuth"),
DOMUtils.readXml(new StringReader(xml)).getDocumentElement());
// make sure direction is OUT since it is a response message.
newHeader.setDirection(Direction.DIRECTION_OUT);
//newHeader.setMustUnderstand(false);
soapHeaders.add(newHeader);
}
残念ながら、次のステートメントで null-pointer Exception が発生します: List soapHeaders = CastUtils.cast((List
明らかに、このメッセージには SOAP ヘッダーはありません。そして、それは石鹸のメッセージではないようです。このようなマーシャリング
<camel:marshal>
<soapjaxb contextPath="de.iccs.xsoap.customer.v1" />
</camel:marshal>
<camel:process ref="addCredentials"/>
これは、soap-header なしで soap-envelope のみを生成するため、機能しません。(もちろん、これは cxf-endpoint が pogo-mode で機能するため機能しません) pojo-message から SOAP メッセージ(soap-header 付き)を設定する方法の例を教えてください。
ありがとうガブリエル