0

我编写了一个肥皂/网络服务,它返回一个字符串,例如:

"<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;GeocodeResponse&gt;&lt;City&gt;Denver&lt;/City&gt;&lt;State&gt;CO&lt;/State&gt;&lt;/GeocodeResponse&gt;

我认为通过使用模式来定义字符串中返回的内容,可以避免字符串被转义。

4

2 回答 2

1

当您向 XML 处理器提供原始字符串时,理解是字符串的含义将被传达给接收器,以便可以重建实际的字符串。这意味着处理器将转义任何保留的 XML 字符 (< > & % '),以便它们不会被误解为文档的一部分而不是文档中的消息。

如果您使用 xjc 生成对象以反映模式(或者更好的是,使用 wsimport 从 WSDL 生成对象和服务存根),您可以使用数据填充生成的对象,然后使用 Marshaller 构造响应消息,该消息将然后呈现为正确标记的 XML。Marshaller 文档实际上提供了很好的使用示例来编组为各种形式 ( http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html )。

我正在做出假设以弥补上下文的不足,因此如果此答案似乎不适用,请直接回复并包含实际的服务端点代码,我(或其他响应者)可以重新访问。

祝你好运!

于 2012-05-24T04:03:01.623 回答
1

你可以试试这个,它为我解决了问题

org.apache.axiom.om.OMElement tmpElement=org.apache.axiom.om.util.AXIOMUtil.stringToOM(Element.getText());

When you add tmpElement to you SOAP envelope you will receive proper representation of "<" and "&" (instead of "<" and "&")

于 2012-08-09T09:33:38.583 回答