私は Web サービスが初めてで、SSL 経由でサーバーと通信する単純な spring-ws クライアントを作成する必要があります。状況は次のとおりです。
- 私のクライアントは、Glassfish の localhost ws サーバーの http でうまく動作します (問題はリモート サーバーと https です)。
- リモート サーバーは正常に動作します。送信されたデータだけで作業します
- サーバーのhttpsアドレスを持っています
- サーバープロバイダーからのクライアント証明書を持っています
そのようなタスクの簡単なチュートリアルを見つけるのは簡単だと思いましたが、そのようなものを見つけるのに問題があります. 本当に異常なのか、それとも私の問題なのか? これを作成するための良いチュートリアル/本を知っていますか? それはいくつかの簡単な簡単な手順かもしれません。実際に必要なのは、そのサーバーに接続してそこからデータを取得することだけです。
私は使っている:
- STS 3.0.0.M3
- JDK1.7
- Java アプリケーションとしてのクライアント (後でおそらく動的 Web アプリケーションとして)
- サーバーの wsdl (JAXB) から生成されたクラス
- クライアントを作成するためのこのチュートリアルに従いましたhttp://justcompiled.blogspot.sk/2010/11/web-service-client-with-spring-ws.html
編集:トピックの詳細
前述のチュートリアルからクライアントを変更して、ローカルホストで作成した Web サービス (SSL なし) で動作するようにしました。うまく機能しました。リクエストとレスポンスは正しかったです。次に、リモートサーバーで動作するように変更しました。新しいクラスを生成し、ApplicationContext にサーバーの新しいアドレスを設定しました。最初のエラーは、commons-logging ライブラリが見つからないことでした。追加しました。その後、新しいエラーが表示されました (そのエラーの短いバージョン):
org.springframework.ws.client.WebServiceIOException: I/O error: java.security.cert.CertificateException: No name matching certificatename found; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching certificatename found
keytool を使用して、jdk の cacerts に証明書を追加しました。役に立ちませんでした。私はそのエラーについて何かを見つけ、ここに最後の投稿からコードを追加しようとしました:
http://www.coderanch.com/t/557677/sockets/java/CertificateException-No-name-matching-hostname
あまり安全ではないはずですが、試してみました。新しいエラーは次のとおりです。
Exception in thread "main" org.springframework.ws.client.WebServiceTransportException: Internal Server Error [500]
at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:663)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:587)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:378)
...