我有一个 JAX-WS 端点,其中包含许多方法,这些方法都返回转换为字符串的 XML 文档。
这在 Sun Java System Application Server 9.1 Update 2 上运行良好已有一段时间,但需要部署到新服务器上。
除了一个小问题外,它被部署到 Glassfish 3.0.1 没有任何问题。原始响应示例摘录:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return xmlns=""><?xml version="1.0" encoding="UTF-8"?>
<my_xml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Transfer In" name="Xfr or R/O In" type="X"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
在新服务器上,它返回为:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return><?xml version="1.0" encoding="UTF-8"?>
<myxml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Administration Fee" name="Fee:AUM" type="U"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
几乎完全相同,但只有左尖括号被转义,而不是右括号。
我已经使用直接 HTTP POST 请求对此进行了测试,所以我知道它没有被任何客户端代码破坏。
我再次将服务器升级到 Glassfish 3.1,认为包含的 Web 服务库有问题,但没有运气。我的应用程序完全依赖 glassfish 中的 web 服务支持——它不包含任何自己的 WS 或 XML 库。
端点基本定义如下:
@WebService
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class MyEndpoint {
@WebMethod()
public String getTransactionTypes() {
return someMethodThatReturnsXmlString();
}
}
我找不到其他人遇到这个问题,除了这张海报的参考,他将其视为服务的消费者:我可以强制 JAXB 不要将“转换为”,例如,当编组为 XML 时?
这是一个已发布的服务,所以我不能依赖消费者能够更新他们的客户来处理这个问题。有趣的是,我使用生成的 Java 客户端的现有测试接口似乎并没有受到它的困扰,但我不能依赖它。
有没有人遇到过这个并能够解决它?有没有办法可以连接到 WS 框架并自己转义作为解决方法?
提前致谢。