如何在 JAX-WS 中禁用 fastinfoset 并且总是 return XML 结果
How to Disable fastinfoset in JAX-WS and always return XML results
我已经实现了一个 Java 8 本机 JAX-WS 网络服务,它是 returning xml 二进制响应 XML。不过很遗憾客户端不支持fastinfoset。是否有我可以使用的配置关闭 fastinfoset,并使 web 服务 return 以普通 XML 响应,无论客户端在 HTTP 请求 header 中传递给 web 服务什么?
如 JAX-WS RI/Metro user guide 所述,enabling/disabling FastInfoset 完全由客户端通过标准 Accept 和 Content-Type HTTP headers 驱动(假设网络服务支持 Fast Infoset) .这是标准行为,当 FastInfoset 在 Web 服务上为 supported/enabled 时。实际上,FastInfoset 恰好在 Metro 中默认启用。所以如果客户端不支持,至少不应该在对webservice请求的Acceptheader中包含application/fastinfoset
。
如果您想完全关闭 Metro Web 服务上的 FastInfoset 支持,您可以使用 Web Service "Quality of Service" configuration GUI of Netbeans IDE. More details on this in Netbeans documentation。您会在 window 的底部看到一个标记为 禁用快速信息集 的复选框。应用它应该会导致在您的 WSDL 中添加一个新的 WS-Policy 断言,如下所示:
<fi:OptimizedFastInfosetSerialization enabled="false"/>
... 其中 fi
是 (Metro-specific) 命名空间 http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service
的前缀。这假设您使用了 WSDL-first 方法。请注意,虽然 WS-Policy 是标准,但此断言不是,它仅供 Metro 堆栈使用。
总的来说,只要您想使用高级 JAX-WS 网络服务功能,例如消息优化(MTOM、Fast Infoset...)或 WS-* 标准(WS-Policy, WS-Security...) 如果您买不起商业工具,我强烈建议您使用 Netbeans IDE 和 WSDL-first 方法,至少 generate/modify WSDL(特别是, 如果没有像这样的合适工具,编辑 WS-Policy 断言是相当费力的)。实际上,Netbeans GUI 允许您发现比 Metro 用户指南中实际记录的功能更多的功能。
如果您已经在使用另一个 IDE,如 Eclipse 或其他),您始终可以将生成的 WSDL 和相关文件复制到您的 Eclipse 项目,并在用户指南中应用 Eclipse 的 JAX-WS RI/Metro 指南照常。特别是,您可能还需要在类路径中添加 Metro JAR,因为本机 JDK 中未提供这些功能中的大部分。
我已经实现了一个 Java 8 本机 JAX-WS 网络服务,它是 returning xml 二进制响应 XML。不过很遗憾客户端不支持fastinfoset。是否有我可以使用的配置关闭 fastinfoset,并使 web 服务 return 以普通 XML 响应,无论客户端在 HTTP 请求 header 中传递给 web 服务什么?
如 JAX-WS RI/Metro user guide 所述,enabling/disabling FastInfoset 完全由客户端通过标准 Accept 和 Content-Type HTTP headers 驱动(假设网络服务支持 Fast Infoset) .这是标准行为,当 FastInfoset 在 Web 服务上为 supported/enabled 时。实际上,FastInfoset 恰好在 Metro 中默认启用。所以如果客户端不支持,至少不应该在对webservice请求的Acceptheader中包含application/fastinfoset
。
如果您想完全关闭 Metro Web 服务上的 FastInfoset 支持,您可以使用 Web Service "Quality of Service" configuration GUI of Netbeans IDE. More details on this in Netbeans documentation。您会在 window 的底部看到一个标记为 禁用快速信息集 的复选框。应用它应该会导致在您的 WSDL 中添加一个新的 WS-Policy 断言,如下所示:
<fi:OptimizedFastInfosetSerialization enabled="false"/>
... 其中 fi
是 (Metro-specific) 命名空间 http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service
的前缀。这假设您使用了 WSDL-first 方法。请注意,虽然 WS-Policy 是标准,但此断言不是,它仅供 Metro 堆栈使用。
总的来说,只要您想使用高级 JAX-WS 网络服务功能,例如消息优化(MTOM、Fast Infoset...)或 WS-* 标准(WS-Policy, WS-Security...) 如果您买不起商业工具,我强烈建议您使用 Netbeans IDE 和 WSDL-first 方法,至少 generate/modify WSDL(特别是, 如果没有像这样的合适工具,编辑 WS-Policy 断言是相当费力的)。实际上,Netbeans GUI 允许您发现比 Metro 用户指南中实际记录的功能更多的功能。 如果您已经在使用另一个 IDE,如 Eclipse 或其他),您始终可以将生成的 WSDL 和相关文件复制到您的 Eclipse 项目,并在用户指南中应用 Eclipse 的 JAX-WS RI/Metro 指南照常。特别是,您可能还需要在类路径中添加 Metro JAR,因为本机 JDK 中未提供这些功能中的大部分。