org.xml.sax.SAXParseException:文件过早结束,使用birt 2.3.2和firefox 15

org.xml.sax.SAXParseException:文件过早结束,使用birt 2.3.2和firefox 15,birt,Birt,我们正在使用Birt 2.3.2。 我们试图在Firefox15.0.1中打开我们的报告,我们得到了一个没有堆栈跟踪的异常“org.xml.sax.SAXParseException:Premature end of file” 我们试图调试它,发现firefox发送了错误的内容类型。当我使用TamperData插件修改请求头时,它起了作用 已发送的请求为 POST <<URL>> Request Headers: Host[<<MYHOST>>

我们正在使用Birt 2.3.2。 我们试图在Firefox15.0.1中打开我们的报告,我们得到了一个没有堆栈跟踪的异常“org.xml.sax.SAXParseException:Premature end of file”

我们试图调试它,发现firefox发送了错误的内容类型。当我使用TamperData插件修改请求头时,它起了作用

已发送的请求为

POST <<URL>> 
Request Headers:
Host[<<MYHOST>>]
User-Agent[Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1]
Accept[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
Accept-Language[en-us,en;q=0.5]
Accept-Encoding[gzip, deflate]
Connection[keep-alive]
Content-Length[1702]
Content-Type[application/x-www-form-urlencoded]
Referer[<<URL>>]
request-type[SOAP]
SOAPAction[""]
X-Prototype-Version[1.4.0]
X-Requested-With[XMLHttpRequest]
Cookie[JSESSIONID=A5E874082FE87F814F32B103EE864EBF.]
Pragma[no-cache]
Cache-Control[no-cache]
Post Data:
POST_DATA[<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><<SOAPBODY>></soap:Body></soap:Envelope>]
Response Headers:
Server[Apache-Coyote/1.1]
X-Powered-By[Servlet 2.5; JBoss-5.0/JBossWeb-2.1]
Content-Type[text/xml;charset=utf-8]
Transfer-Encoding[chunked]
Date[Fri, 28 Sep 2012 00:05:39 GMT]
Connection[close]

如果您是从servlet使用引擎,请确保在响应中设置了内容类型:


response.setContentType(“text/html”)

我相信这是一个众所周知的bug

请看评论6:

解决方法是注释掉webcontent/birt/ajax/lib/prototype.js的第668行和第669行

在注释这些行之前,Chrome将发送内容类型为“application/x-www-form-urlencoded,text/xml;charset=UTF-8”,这会导致异常

在注释掉这些行之后,Chrome将发送内容类型为“text/xml;charset=UTF-8”,就像其他性能良好的浏览器一样:)

不过,BIRT报告附带的prototype.js似乎很旧,因为这部分代码在4年前的1.5.0rc0版本中已经修改过

On server we are getting following exception

jvm 1    | java.io.CharConversionException: isHexDigit
jvm 1    |      at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:88)
jvm 1    |      at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:49)
jvm 1    |      at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:429)
jvm 1    |      at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:412)
jvm 1    |      at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:363)
jvm 1    |      at org.apache.catalina.connector.Request.parseParameters(Request.java:2562)
jvm 1    |      at org.apache.catalina.connector.Request.getParameterNames(Request.java:1102)
jvm 1    |      at org.apache.catalina.connector.Request.getParameterMap(Request.java:1082)
jvm 1    |      at org.apache.catalina.connector.RequestFacade.getParameterMap(RequestFacade.java:414)
jvm 1    |      at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:196)
jvm 1    |      at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
jvm 1    |      at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
jvm 1    |      at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
jvm 1    |      at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122)
jvm 1    |      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
jvm 1    |      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)