2016-05-11 22 views
0

httpsを使用してJAX-WSを使用してWebサービス(C#で開発された)を呼び出そうとしています。私はSoapUIを通して呼び出しをセットアップしようとしましたが、これはうまくいきます。https urlを持つJax-wsがHTTPとして終了する

しかし、生成されたjax-wsクライアントで同じことをしようとすると、私が得るのは301応答です。これは、同じサービスへのhttp urlを使用してSoapUIを使用する場合と同様です。また、wiresharkはHTTP(HTTP/XML)POST操作を実行することを示しています。これは何らかの理由で、私の生成したJAX-WSクライアントがhttpsの代わりにhttpを使って呼び出しようとしていることを信じさせます。

Examplifiedコード:

new MyServiceInterface(new URL("https://acme.com/services/MyService.svc?wsdl")) 
         .getMyPort().test(); 

あなたが見ることができるように、私のクライアントを作成するときに、私はhttps URLを指定します。 JAX-WSがhttpsを使用するために必要なことはありますか?名前空間URIはすべてhttpですが、これは問題を引き起こす可能性がありますか?

更新:

私はここに受け入れ答えからガイドを使用してquesitonにサービスのSOAP要求を実装している:Working Soap client example ほとんどがSOAPUIからの情報を繰り返し、今では私に適切な200を与えます応答。

アップデート2:私のJAX-WSクライアントをデバッグする場合

、私は、このプロパティを見つける:

"javax.xml.ws.service.endpoint.address" -> "http://acme.com/services/MyService.svc" 

これは、http、httpsのないを持っています。関連性?

アップデート3:

httpではなく、HTTPS URLに "javax.xml.ws.service.endpoint.address" を変更するデバッガを使用して、私のクライアントが動作します。しかし、なぜhttpで始まるのですか?

+0

は、サーバー側の問題のように見えます。サーバにポート443でアクセスできるかどうか試してみてください。 – Stefan

+0

SoaPUIが動作するので、私はサーバもうまく動作すると思いますか? – Tobb

答えて

4

WSDLがhttp URLを参照していた場合、1つの原因が考えられます。

新しいMyServiceInterface(新 URL( "https://acme.com/services/MyService.svc?wsdl")) .getMyPort()テスト();

私はhttps://acme.com/services/MyService.svc?wsdlをダウンロードして<service><address>またはエンドポイントを見てお勧めしたいです。それはこのようになります場合:あなたはjavax.xml.ws.service.endpoint.addressで見ているものを説明することができる

<soap:address location="http://acme.com/services/MyService.svc"/> 

を。

それが事実だとあなたがリモートWSDLを修正/制御することはできません、あなたがプログラムでエンドポイントを無効にする必要があるかもしれません場合は、次の

MyServicePort myPort = new MyServiceInterface(new URL("https://acme.com/services/MyService.svc?wsdl")).getMyPort(); 
// set endpoint to use https 
String endpointURL = "https://acme.com/services/MyService.svc"; 
BindingProvider bp = (BindingProvider) myPort; 
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); 
myPort.test(); 
+0

私はそれをチェックし、サイドノートとしてプロパティを手作業で設定することによって動作させました。 jax-bがxmlを間違った名前で生成して次の問題に遭遇するだけです(もちろん)。 Meh、開発者としての生活: – Tobb

+0

WSDLをチェックしたところ、あなたは正しいです、service-element内のaddress-elementにはhttp URLがあります。これはバグと呼ばれることがありますか?それとも、.NETで作成されたwsdlsでどのように処理されているのでしょうか? – Tobb

関連する問題