会社の cisco 電話に少し機能を追加する、いくつかの安らかな Web サービスを作成しようとしています。基本的な考え方は単純です。ユーザーは、ログインとパスワードを入力する必要がある小さなクライアントを取得します。彼らがそうすると、彼らの電話は私の安らかなサービスに「登録」され、彼らの電話に追加機能が追加されます。ログアウトすると、登録が解除されます。追加機能(調整された発信者情報など)を提供するには、Cisco AXL API が必要です。これは SOAP ベースの API です。すでに wsdl を使用して Java クラスを生成しています。生成されたクラスを使用してテストクライアントを作成すると、すべて正常に動作します。
しかし、ここで問題が発生します。アプリケーションが Tomcat 7 コンテナーにデプロイされているときに SOAP 要求を実行しようとすると、機能しなくなります。
問題は、次のコードを実行するとハングする AXLAPIService にあるようです。
@WebEndpoint(name = "AXLPort")
public AXLPort getAXLPort() {
return super.getPort(new QName("http://www.cisco.com/AXLAPIService/", "AXLPort"), AXLPort.class);
}
つまり、soap リクエスト用のポートを取得できず、十分に待機すると tomcat がクラッシュします。
私はグーグルに行きました。古いstaxバージョンが原因で、あるフォーラムの誰かがかつて問題を抱えていました。POM で Stax のバージョンを調整して再試行しましたが、役に立ちませんでした。
また、基になる javax.xml.ws.Service には実際にポートの列挙があり、getPort() を実行すると、最も適切なポートが取得されることもどこかで読みました。次に、SOAP のデフォルト ポートを調べたところ、RESTful サービスに使用されるポートと同じように 80 でした。SOAP サービスがポート 80 を必要としているのに、既に使用されているためにそれを使用できないということでしょうか?
だから、私の質問を要約すると:
- 私の安らかなサービスが、私の石鹸リクエストが使用したいのと同じポートを消費している可能性はありますか?
- そうでない場合、何が問題なのか、どうすれば修正できますか?
追加情報として、これは axl wsdl がサービスを定義する方法です。
<service name="AXLAPIService">
<port binding="s0:AXLAPIBinding" name="AXLPort">
<soap:address location="https://CCMSERVERNAME:8443/axl/"/>
</port>
ソープポートを自分で交換しようと考えていました。いくつかのグーグルは、wsdlでそれを行うべきだと言っていますが、その方法は本当にわかりません。すでにここに投稿がありますが、別のポート名をバインドするとどのように役立つかわかりません....