2016-02-04 26 views
0

我已經實現了一個Java 8本地JAX-WS webservice,它將xml響應作爲二進制XML返回。然而,客戶不幸的是不支持fastinfoset。有沒有我可以使用的配置關閉fastinfoset,並使web服務以純XML格式返回響應,而不管客戶端在HTTP請求頭中傳遞給webservice的內容是什麼?如何在JAX-WS中禁用fastinfoset並始終返回XML結果

回答

1

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中提供。

+0

不幸的是,客戶錯誤地包含了該頭文件(儘管它不支持它),並且客戶端不在我們的控制之下。切換到cxf允許我爲所有請求禁用fastinfoset。 – futureelite7

+0

好吧,我不知道你不控制客戶端。所以我相應地更新了我的答案,以防你想回到Metro堆棧......有一天。 – cdan

相關問題