Java WebService 返回 < 和 > for chars < >



我写了一个 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,而是得到如下内容: &lt; 地理编码响应 &gt;&lt; 城市 &gt; 丹佛 &lt;/城市 &gt;&lt;&gt; CO &lt;/州 &gt;&lt;/地理编码响应 &gt;

我认为通过使用架构来定义字符串中返回的内容,我将避免字符串被转义。

当您向 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 信封时,您将收到 "<" 和 "&" 的正确表示形式(而不是 "<" 和 "&"(

最新更新