我正在使用JAX-WS生成的客戶端(Java)代碼訪問第三方Web服務。 對啓動客戶端會話的服務的調用返回a.o.包含簽名的響應中的令牌。爲了進行身份驗證,後續調用其他服務時需要使用令牌。JAX-WS在令牌簽名中添加名稱空間
我從使用SoapUI得知WS/Endpoint要求令牌按原樣使用......意思是當我將Token(這是一條大線)從最初的響應中複製到任何請求時,一切正常我喜歡下一個。
現在我在我的JAX-WS客戶端中也這樣做了。我檢索了一個Token(我從Fiddler捕獲的響應中複製了它),然後在使用SoapUI進行的後續調用中成功進行了測試。
但是,當使用JAX-WS客戶端對服務執行後續調用時,令牌中的簽名部分會發生更改。它應該看起來像:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">...</Signature>
但(捕捉與提琴手的請求時),它現在看起來像:
<Signature:Signature xmlns:Signature="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.w3.org/2000/09/xmldsig#">...</Signature:Signature>
顯然,根據WS /端點所以現在我想這是不能接受的要知道:
- 爲什麼令牌被編組回來這種方式?
- 更重要的是,如何防止我的客戶做到這一點?
在此先感謝!
服務返回包含一個響應錯誤消息說令牌無效。我認爲它確實需要像服務提供的那樣。或者,這可能是我認爲我已經處理的WS-A尋址問題了嗎? – Kjeld 2015-02-25 08:30:44
如果您確定要正確發送數據,則需要查看生成的Signature類(如果它不是Signagure,請查看文檔的根目錄),因爲jaxb輸出可以使用我的答案中的Annotations進行控制。 – Zielu 2015-02-25 15:01:54
謝謝,您添加的有關注釋的部分很有幫助,更改package-info.java解決了這一部分。雖然問題還沒有完全解決:顯然,需要添加令牌中的其他名稱空間屬性。另請參閱我的新帖子:[鏈接](http://stackoverflow.com/questions/28761798/how-to-make-changes-in-marshalled-output-in-java-web-service-client) – Kjeld 2015-02-27 09:44:43