Pat*_*era 6 java xml web-services escaping java-metro-framework
我有一个JAX-WS端点,其中包含许多方法,这些方法都返回转换为String的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>
Run Code Online (Sandbox Code Playgroud)
在新服务器上,它返回:
<?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>
Run Code Online (Sandbox Code Playgroud)
几乎完全相同但只有开口尖括号被转义,而不是关闭括号.
我已使用直接HTTP POST请求对此进行了测试,因此我知道它没有受到任何客户端代码的破坏.
我再次将服务器升级到Glassfish 3.1,认为包含的webservice库存在问题,但没有运气.我的应用程序完全依赖于glassfish中的webservice支持 - 它不包含任何自己的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();
}
}
Run Code Online (Sandbox Code Playgroud)
我一直无法找到这个问题的其他人,除了这个海报的参考,他已经将其视为服务的消费者:我可以强制JAXB不转换成"进入",例如,当编组到XML时?
这是一个已发布的服务,因此我不能依赖于消费者能够更新其客户端来处理此问题.有趣的是,我使用生成的Java客户端的现有测试界面似乎并没有受到它的困扰,但我不能依赖于此.
有没有人遇到这个并且能够解决它?有没有办法可以挂钩到WS框架并自行转义作为解决方法?
提前致谢.
来自http://www.w3.org/TR/xml/#syntax,第 2.4 节
与号字符 (&) 和左尖括号 (<) 不得以其文字形式出现,除非用作标记分隔符,或在注释、处理指令或 CDATA 部分中使用。如果其他地方需要它们,则必须分别使用数字字符引用或字符串“ & ”和“ < ”对其进行转义。右尖括号 (>) 可以使用字符串“ > ”表示,并且为了兼容性,当它出现在内容中的字符串“ ]]> ”中时,必须使用“ > ”或字符引用进行转义,当string 没有标记 CDATA 部分的结尾。
它指出右尖括号 (>) 可以被转义,但不是必须如此,所以应该没问题。
| 归档时间: |
|
| 查看次数: |
3760 次 |
| 最近记录: |