最初にhttp://www.mulesoft.org/documentation/display/current/Consuming+Web+Services+with+CXFガイドに従って CXF を使用してクライアント クラスを生成することにより、サンプル Mule フローを作成しました。
フローは に進むことで開始されlocalhost:8081/test
ます。は、次のparametersObjectArray
ように、任意のメッセージを Web サービス メソッド呼び出しに必要なハードコードされたオブジェクト配列に変換します。
package com.test.example.transformers;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractTransformer;
public class GetCustomersArrayTransformer extends AbstractTransformer {
@Override
protected Object doTransform(Object src, String enc)
throws TransformerException {
Object[] msg = new Object[3];
msg[0] = 10;
msg[1] = 0;
msg[2] = null;
return msg;
}
}
このトランスフォーマーをフローで使用してメッセージをjaxws-client
ノードに渡すと、すべてが期待どおりに機能します。
<custom-transformer name="parametersObjectArray" class="com.test.example.transformers.GetCustomersArrayTransformer" doc:name="Java"/>
<flow name="mulecartFlow" doc:name="mulecartFlow">
<http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="8081" doc:name="HTTP" path="test"/>
<transformer ref="parametersObjectArray" doc:name="Java"></transformer>
<https:outbound-endpoint exchange-pattern="request-response" host="12.34.56.78" port="1234" path="services/SOAP/TestEndpoint" doc:name="HTTP" connector-ref="httpsConnector" method="POST">
<cxf:jaxws-client clientClass="com.test.TestEndpointService" enableMuleSoapHeaders="true" doc:name="SOAP" operation="getCustomers" port="TestEndpoint" />
</https:outbound-endpoint>
<transformer ref="customerInfoTypesToString" doc:name="Transformer Reference"/>
<logger level="INFO" doc:name="Logger" message="#[message:payload]"/>
</flow>
パラメータが判読可能でタイプセーフであるように、ラッパーオブジェクトを使用したいと思います。
package com.test.example.transformers;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractTransformer;
import com.test.GetCustomers;
public class GetCustomersObjectTransformer extends AbstractTransformer {
@Override
protected Object doTransform(Object src, String enc)
throws TransformerException {
GetCustomers soapRequest = new GetCustomers();
soapRequest.setStartIndex(0);
soapRequest.setMaxBatchSize(1);
return soapRequest;
}
}
しかし、それはうまくいかないようです。マニュアルページに次のように記載されていることに気付きました:
注: CXF トランスポートは、ラッパー スタイルの Web サービス メソッド呼び出しをサポートしていません。バインディング ファイルを作成するか、WSDL を直接変更する必要がある場合があります。
どういう意味ですか?すべてのメソッド パラメータをラップするラッパー オブジェクトを Web サービス メソッドに送信するにはどうすればよいですか?