2012-07-27 58 views
2

我对这个问题做了一点研究,但似乎所有其他答案都包括更改响应发送给您的方式。我正在调用第三方web服务,它返回一个xml字符串。当我在我的本地Win7机器上做什么时,情况就好了。但是,当我把它拿出来给我们的服务器,运Server 2003中,我得到这个错误的回报:Grails错误:无效的XML字符(Unicode:0x5c)

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) 
+0

你不说你是如何调用webservice,或者显示任何代码引发这个错误,或者说你正在使用哪个版本的Grails和相关插件......这可能有用吗? – 2012-07-27 15:14:59

回答

2

的信息是非常明确的:

An invalid XML character (Unicode: 0x5c) was found in the public identifier.

“公共标识符”是后出现的字符串DOCTYPE声明中的关键字PUBLIC。有哪些字符可以出现在公共标识符中,并且不允许反斜杠。

您有选择。说服产生这个标识符的人来修补他们的方式,或者写一些脚本来修复收到的坏XML。任何人都不太可能关心公共标识符的价值,所以你可以直接删除反斜杠而不会造成任何损害。

1

0x5c是“捶”字\,可用于“转义序列”。因此,它需要为XML内容自行转义。应该有一个帮助函数,如HTMLEncode(从内存中抽取),将所有这些字符转换为其“转义版本”(即&变为&)。

+0

该'''''不用于在XML中转义。这是一个正常的标点符号。它在名称标记(例如标记名称或属​​性名称)中无效,但只允许使用某些标点符号。 – ataylor 2012-07-27 15:49:24

+0

没错,我没有澄清。 – Darek 2012-07-27 20:46:54

+0

也许这适用? [链接](http://stackoverflow.com/questions/5858684/getting-jdomexception-on-one-machine-but-the-same-xml-works-fine-in-another) – Darek 2012-07-27 20:48:57

0

如果您的XML格式良好,请验证您在第一个节点之后不要有空白。服务器返回一个字符串,但它希望前加空格,而且,出现错误而发生......