2

この問題について少し調査しましたが、他のすべての回答には、応答の送信方法の変更が含まれているようです。XML 文字列を返すサード パーティの Web サービスを呼び出しています。ローカルの Win7 マシンで実行すると、問題なく動作します。しかし、私たちのサーバーである Win Server 2003 に送信すると、次のエラーが返されます。

Error 500: Executing action [vinlookup] of controller [AutoVehicleController] caused   exception: null
Servlet: grails
URI: /NonProfits/grails/autoVehicle/vinlookup.dispatch
Exception Message: An invalid XML character (Unicode: 0x5c) was found in the public identifier. 
Caused by: An invalid XML character (Unicode: 0x5c) was found in the public identifier. 
Class: AutoVehicleController 
At Line: [172] 
Code Snippet:
Stack Trace
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x5c) was found in the public identifier.

    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)

    at VinPowerService.decodeVin(VinPowerService.groovy:40)

    at VinPowerService$$FastClassByCGLIB$$6f8d198b.invoke(<generated>)

    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

    at VinPowerService$$EnhancerByCGLIB$$f1db38bd.decodeVin(<generated>)

    at VinPowerService$decodeVin.call(Unknown Source)

    at AutoVehicleController$_closure7.doCall(AutoVehicleController.groovy:172)

    at AutoVehicleController$_closure7.doCall(AutoVehicleController.groovy)

    at java.lang.Thread.run(Thread.java:619)
4

3 に答える 3

2

メッセージはかなり明確です。

公開識別子に無効な XML 文字 (Unicode: 0x5c) が見つかりました。

「公開識別子」は、DOCTYPE 宣言の PUBLIC キーワードの後に​​表示される文字列です。公開識別子に使用できる文字には規則があり、バックスラッシュは使用できません。

選択肢があります。この ID を生成した人々に自分たちのやり方を修正するよう説得するか、受信時に不適切な XML を修復する何らかのスクリプトを作成してください。公開識別子の値が何であるかを気にする人はほとんどいないので、ダメージを与えることなくバックスラッシュを削除するだけでよいでしょう。

于 2012-07-27T21:49:19.693 に答える
1

0x5c は\「エスケープ シーケンス」に使用できる「強打」文字です。そのため、XML コンテンツの場合は、それ自体をエスケープする必要があります。HTMLEncode (ここではメモリから描画) のようなヘルパー関数が必要です。これは、そのようなすべての文字を「エスケープされたバージョン」に変換します (つまり、&になります&)。

于 2012-07-27T13:17:47.683 に答える
0

XMLが適切な形式である場合は、最初のノードの後に​​空白がないことを確認してください。サーバーは文字列を返しますが、前に空白を追加したいので、エラーが発生しました...

于 2012-07-27T13:18:55.877 に答える