2012-10-02 44 views
3

我的應用程序正在連接到一個Web服務rpc/encoded。我使用Axis 1.4。 當web服務發送響應,它發送一個無效字符,那麼一個異常:Web服務響應包含無效的XML字符

http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: 
    An invalid XML character (Unicode: 0x3) was found in the element content of the document. 

XML編碼爲「ISO-8859-1」。我認爲這是問題。

我的問題是:是否有任何配置可以在我的應用程序中接受此無效字符?

+0

沒有了對Web服務,以及如何你調用它的詳細信息,並解析它很難結果告訴。問題可能出在服務器上。 –

+2

無論字符編碼如何,XML 1.0規範都禁止控制字符,例如U + 0003,甚至不能使用''來逃避它們。如果服務器抱怨_you_發送了一個無效字符,那麼您必須修復您的客戶端,如果客戶端正在抱怨它在響應中收到的字符,那麼您必須與服務所有者一起處理。 –

+0

作爲quick'n'dirty解決方案,您可以編寫一個代理,從響應中刪除非法字符。 –

回答

1

我解決了在org.apache.axis.handlers.LogHandler中放入一個方法來搜索和銷燬非法字符的問題,然後再解析xml響應中的內容。

To create your own LogHandler

The method to search and destroy illegal characters

內部日誌消息新LogHandler的方法把以下內容: private void logMessages(MessageContext msgContext) throws AxisFault { ... msgContext.setResponseMessage(new Message( stripNonValidXMLCharacters(((Message) msgContext .getResponseMessage()).getSOAPPartAsString()))); ... }

+0

Axis 1.4有一種方法可以自動生成存根來處理「rpc/encoded」。那麼你就不必攔截迴應。但是,我讀到它不適用於CXF,並且您永久綁定到Axis 1.x.請參閱http://stackoverflow.com/questions/412772/java-rpc-encoded-wsdls-are-not-supported-in-jaxws-2-0。 – ingyhere

2

「我的應用程序正在連接到一個web服務rpc/encoded。」

這就是抓住。該服務是「rpc/encoded」,它不符合WS-I標準。在過去的一些熱烈討論中,開發商決定在過去的not to 'fix' this error

+0

我無法避免rpc /編碼。 –

相關問題