我写了一个 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>
在肥皂信封中,Xml 被转义,因此我得到的不是我想要的 xml,而是得到如下内容: <
地理编码响应 ><
城市 >
丹佛 <
/城市 ><
州 >
CO <
/州 ><
/地理编码响应 >
我认为通过使用架构来定义字符串中返回的内容,我将避免字符串被转义。
当您向 XML 处理器提供原始字符串时,理解是将字符串的含义传达给接收方,以便可以重建实际字符串。 这意味着处理器将转义任何保留的XML字符(<>&%'(,以便它们不会被误解为文档的一部分而不是文档中的消息。
如果使用 xjc 生成对象以反映模式(或者更好的是,使用 wsimport 从 WSDL 生成对象和服务存根(,则可以使用数据填充生成的对象,然后使用封送程序构造响应消息,然后呈现为正确标记的 XML。 Marshaller 文档实际上提供了很好的示例,说明如何编组成各种形式 (http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html(。
我正在做出假设以弥补上下文的不足,因此如果此答案似乎不适用,请按此方式回复并包含实际的服务端点代码,我(或其他响应者(可以重新访问。
祝你好运!
你可以试试这个,它为我解决了问题
org.apache.axiom.om.OMElement tmpElement=org.apache.axiom.om.util.AXIOMUtil.stringToOM(Element.getText());
当您将 tmpElement 添加到 SOAP 信封时,您将收到 "<" 和 "&" 的正确表示形式(而不是 "<" 和 "&"(