JAXWSクライアントが使用しているアドレスを動的に変更するにはどうすればよいですか?このクライアントはwsimportによって生成されました。
Apache CXFを使用して問題を解決しました。
わずか2行のコードで!以下がスニペットです。
URL url_wsdl = new URL("http://myserver/myservice?wsdl");
Service service = Service.create(url_wsdl, new QName("http://myaddress...", "ServiceName"));
return service.getPort(MyJAXWSPortClass.class);
これは、BindingProviderインターフェイスを使用して実現できます。
/**
* The following snippets shows how to set a custom endpoint for a JAX-WS generated WebClient on runtime
*/
// Get the service and the port
SampleService service = new SampleService();
Sample port = service.getESamplePort();
// Use the BindingProvider's context to set the endpoint
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.aviramsegal.com/ws/sample");
/* Optional credentials */
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "user");
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");
port.callSampleMethod();
Paypalの統合は初めてですが、Adaptive Payment APIについてはわかりません。ただし、GetVerifiedStatusメソッドを使用して、特定のメールIDがPaypalにアカウントを持っているかどうかを確認する特権があります。
以下のサンドボックスwsdl URLを使用してメールを確認してください
URL: https://svcs.sandbox.Paypal.com/AdaptiveAccounts?wsdl
応答は以下のようになります
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ns2:GetVerifiedStatusResponse xmlns:ns2="http://svcs.Paypal.com/types/aa">
<responseEnvelope>
<timestamp>2015-07-20T23:42:46.661-07:00</timestamp>
<ack>Success</ack>
<correlationId>5cea9a8575ab9</correlationId>
<build>17345626</build>
</responseEnvelope>
<accountStatus>UNVERIFIED</accountStatus>
<countryCode>IN</countryCode>
<userInfo>
<emailAddress>[email protected]</emailAddress>
<accountType>PERSONAL</accountType>
<accountId>6KD7EVWM2E2AQW</accountId>
<name>
<salutation/>
<firstName>anand</firstName>
<middleName/>
<lastName>anand</lastName>
<suffix/>
</name>
<businessName/>
</userInfo>
</ns2:GetVerifiedStatusResponse>
</soapenv:Body>
</soapenv:Envelope>
注:スタブの作成中に、以下のようにエンドポイントを設定することを忘れないでください。これを設定していない場合、期待される出力を取得できません。
String endpointURL = "https://svcs.sandbox.Paypal.com/AdaptiveAccounts/GetVerifiedStatus";
以下の方法を使用してエンドポイントを追加します
private static void addEndPoint(AdaptiveAccountsPortType port,
String endpointURL) {
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
/*List hchain = bp.getBinding().getHandlerChain();
if (hchain == null) {
hchain = new ArrayList();
}
hchain.add(new HTTPUserAgentHandler());
bp.getBinding().setHandlerChain(hchain);*/
}
Wsimportを使用する場合の方法はわかりません。同じ問題があったため、Intellij IDEA(バージョン9)を使用してクライアントコードを作成しました。wsdlurlを受け取るサービスエンドポイントコンストラクターを提供しました。