我编写了一个soap / web服务,返回一个字符串,如:
"<GeocodeResponse><City>Denver</City><State>CO</State></GeocodeResponse>"
我已为此数据定义了架构:
<xs:element name="GeocodeResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="City"/>
<xs:element name="State"/>
</xs:sequence>
</xs:complexType>
</xs:element>
并将其作为我的Web服务方法
的响应返回<xs:complexType name="standardizeResponse">
<xs:sequence>
<GeocodeResponse/>
</xs:sequence>
</xs:complexType>
在soap信封中,Xml被转义,所以不是得到我想要的xml,而是得到类似的东西:
<
GeocodeResponse><
City>
Denver<
/City><
State>
CO<
/State><
/GeocodeResponse>
我认为通过使用模式来定义字符串中返回的内容,我将避免字符串转义。
答案 0 :(得分:1)
当您向XML处理器提供原始字符串时,理解是将字符串的含义传达给接收器,以便可以重构实际字符串。这意味着处理器将转义任何保留的XML字符(&lt;&gt;&amp;%'),这样它们就不会被误解为文档的一部分而不是文档中的消息。
如果使用xjc生成对象以反映模式(或者更好的是,wsimport从WSDL生成对象和服务存根),您可以使用数据填充生成的对象,然后使用Marshaller构造响应然后将消息呈现为正确标记的XML。 Marshaller文档实际上提供了很好的使用示例,以便编组成各种形式(http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html)。
我正在做出假设以弥补上下文的不足,所以如果这个答案似乎不适用,请回复,并包括实际的服务端点代码,我(或其他响应者)可以重新访问。
祝你好运!答案 1 :(得分:1)
你可以尝试这个,它解决了我的问题
org.apache.axiom.om.OMElement tmpElement=org.apache.axiom.om.util.AXIOMUtil.stringToOM(Element.getText());
当您向SOAP信封添加tmpElement时,您将收到“&lt;”的正确表示形式和“&amp;” (而不是“&lt;”和“&amp;”)