2012-05-22 77 views
0

我已經寫返回字符串例如肥皂/ web服務:爪哇WebService的返回LT和大於對於字符< >

"<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> 

並且這是作爲我的網絡服務方法的響應返回的

<xs:complexType name="standardizeResponse"> 
    <xs:sequence> 
    <GeocodeResponse/> 
    </xs:sequence> 
</xs:complexType> 

在soap enve洛佩,XML是逃脫這樣反而讓我想了XML,我得到的是這樣的: &lt; GeocodeResponse &gt;&lt;&gt;丹佛&lt; /市&gt;&lt;&gt; CO &lt; /國家&gt;&lt;/GeocodeResponse &gt;

我認爲,通過使用模式來定義字符串中返回的內容,以避免字符串轉義。

回答

1

當您向XML處理器提供原始字符串時,理解是要將字符串的含義傳遞給接收方,以便可以重構實際的字符串。這意味着處理器將轉義任何保留的XML字符(<> &%),以便它們不會被誤解爲文檔的一部分而不是文檔中的消息。

如果您使用xjc生成反映模式的對象(或者更好,wsimport從WSDL生成對象和服務存根),您可以使用數據填充生成的對象,然後使用Marshaller構造響應消息,然後將被呈現爲正確標記的XML。 Marshaller文檔實際上提供了用於編組爲各種形式的很好的示例(http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html)。

我正在做出彌補缺乏上下文的假設,所以如果這個答案似乎並不適用,請回答這樣的問題,幷包括實際的服務端點代碼和I(或其他響應者)可以重新訪問。

祝你好運!

1

你可以試試這一個,它解決的問題,我

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

當你添加tmpElement你SOAP信封,您將收到的「<」適當的代表和「&」(而不是「<」和「&」)

相關問題