外部システムとの統合中に、ある環境から別の環境に切り替える必要がありました。これは、wsdlが置かれているURLを変更し、ヘッダーにユーザーの資格情報を入れることを意味します。かなり簡単に見えますが、私は奇妙な行動に気付きました。SOAPActionヘッダーがサービスと一致しません
がID: 496
Address: https://domain/env/port
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml
Headers: {Accept=[*/*], password=[test], SOAPAction=["serviceB"], UserName=[test]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><a:aRequest xmlns:a="http://a/namespace/">...
その後、応答は次のとおりです。私はポート1上にあるサービスAをコールしようとすると、ポート1にもあるSOAPActionヘッダーがサービスBの値に置き換えられ、何らかの理由でそれは何かのように見えますもちろん、予期しない要求オブジェクトが渡されています。 SOAPActionヘッダーがOKであることが時々あるということは奇妙なことですが、呼び出されたサービスはOKであり、要求オブジェクトはOKですが、何らかの理由で別のサービスを呼び出すためにコール。
私の質問は:SAOPActionの値がどのように設定されているのですか - 生成されたクラスから@WebMethod(action = "serviceA")
か、それともwsdlファイルの読み込み中に生成されていますか?問題が私側にあるのか、外部のサーバー側にあるのかを把握する必要があります。
EDIT: 私が気付いたのは、初めてserviceAを呼び出すと、SOAPActionヘッダーがoperationBに設定されていることです。次に、serviceAとレスポンスコードが2回目になると、最初にserviceBを呼び出し、SOAPActionヘッダーがserviceAに設定されています。私はserviceBを呼び出すと二度目はその後、応答コードが200で、キャッシングのいくつかの種類があるようなので、それが見えます...
EDIT(?!): オクラホマので、それはそれのようになります。私は、ポートを作成していますjavax.xml.wsパッケージのServiceクラスはService myservice = Service.create(serviceName)
メソッド、myservice.getPort(MySpecifiedPort.class)
です。私は@Produces
とこのメソッドを注釈し、私はこのポートが必要な場合は、@Inject
注釈を注入する。時々私はプールからインスタンスを受け取る(私は考える)。そしてそれが起こるならば、SOAPActionは以前の呼び出しからの値に設定されます。しかし、なぜこれは起こるのでしょうか? WSAを呼び出すたびにSOAPActionを新しいものとして設定するべきではありませんか? Whisは何とかキャッシュされるように見えますか?