我已經實現了一個Java 8本地JAX-WS webservice,它將xml響應作爲二進制XML返回。然而,客戶不幸的是不支持fastinfoset。有沒有我可以使用的配置關閉fastinfoset,並使web服務以純XML格式返回響應,而不管客戶端在HTTP請求頭中傳遞給webservice的內容是什麼?如何在JAX-WS中禁用fastinfoset並始終返回XML結果
回答
如JAX-WS RI/Metro user guide所述,啓用/禁用FastInfoset完全由客戶端通過標準的Accept和Content-Type HTTP頭(假設web服務支持Fast Infoset)驅動。當Web服務支持/啓用FastInfoset時,這是標準行爲。實際上,MetroInfiguration默認啓用FastInfoset。所以如果客戶端不支持它,至少它不應該包含application/fastinfoset
到Web服務請求的Accept頭中。
如果要關閉Metro服務中的FastInfoset支持,可以使用Web Service "Quality of Service" configuration GUI of Netbeans IDE。在Netbeans documentation的更多詳細信息。您將在窗口底部看到一個複選框,標記爲Disable Fast Infoset。運用這將導致您的WSDL中增加了一個新的WS-Policy斷言像這樣的:
<fi:OptimizedFastInfosetSerialization enabled="false"/>
...其中fi
是(地鐵專用)命名空間http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service
的前綴。這假定您使用了WSDL優先方法。請注意,儘管WS-Policy是一個標準,但這個斷言並不是,它只能用於Metro堆棧。在一般說明中,無論何時您想使用高級JAX-WS Web服務功能(如消息優化(MTOM,Fast Infoset ...)或WS- *標準(WS-Policy,WS-Security ..) ),如果你買不起商業工具,我強烈建議你使用Netbeans IDE和WSDL優先方法,至少要生成/修改WSDL(特別是編輯WS-Policy斷言是非常費力的,沒有這樣的適當工具)。實際上,Netbeans GUI允許您發現比Metro用戶指南中實際記錄的更多功能。 如果您已經使用Eclipse之類的其他IDE或其他任何IDE),您可以照常將生成的WSDL和關聯文件複製到您的Eclipse項目中,並在用戶指南中應用適用於Eclipse的JAX-WS RI/Metro指南。尤其是,您可能還需要在類路徑中添加Metro JAR,因爲大多數這些功能都不在本機JDK中提供。
- 1. 你如何在JAXWS中使用FastInfoset?
- 2. 確保並始終返回結果
- 3. SQL始終返回相同的結果
- 4. 相機結果始終返回RESULT_CANCELED
- 5. 返回XML結果和nodevalue的ASP.NET Web服務始終爲空
- 6. 確實API XML源始終只返回25個結果
- 7. Javascript異步並行 - 如何返回最終結果/回調?
- 8. JSON結果返回在XML
- 9. PHP Post form並返回xml結果
- 10. 如何使用XSL查詢XML元素並返回結果?
- 11. 如何調用Web站點並解析返回的XML結果?
- 12. 如何禁用內容協商並始終從WCF數據服務返回JSON?
- 13. SQL XML - 返回結果集
- 14. Rails UJS數據禁用 - 返回結果
- 15. 如何返回,並開始在一個層次結構的路徑的終點
- 16. select-xml不會返回任何結果
- 17. 的LINQ to XML返回任何結果
- 18. JSON.Net始終返回{}
- 19. CLLocationManager始終崩潰並返回零值
- 20. JavaScript遞歸返回中間結果而不是最終結果
- 21. Android 4 startActivityForResult與Intent.ACTION_EDIT始終返回結果代碼RESULT_CANCELED
- 22. 是否可以讓WCF DataServices JSON結果始終返回camelCase?
- 23. SQL返回結果爲始終爲假條件
- 24. Deferreds並返回結果
- 25. Mule - 如何彙總來自foreach的結果並返回結果?
- 26. Angular 2 Http在Firefox中始終返回XML,應該是JSON
- 27. 如何確保ServiceStack始終返回JSON?
- 28. 如何遍歷結果集並在結果集中返回每行N行
- 29. 如何從回調中返回空結果並繼續刮取?
- 30. 如何在codeignitor模型返回結果中添加新密鑰返回結果()
不幸的是,客戶錯誤地包含了該頭文件(儘管它不支持它),並且客戶端不在我們的控制之下。切換到cxf允許我爲所有請求禁用fastinfoset。 – futureelite7
好吧,我不知道你不控制客戶端。所以我相應地更新了我的答案,以防你想回到Metro堆棧......有一天。 – cdan