Java WebService返回<和>对于字符< >

时间:2012-05-22 20:26:09

标签: web-services soap wsdl

我编写了一个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,而是得到类似的东西:                 &lt;GeocodeResponse&gt;&lt;City&gt;Denver&lt;/City&gt;&lt;State&gt;CO&lt;/State&gt;&lt;/GeocodeResponse&gt;

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

2 个答案:

答案 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;”)