XML request error: Internal Server Error (500)解决方法
以下是网上找的最多的资料:
网上很容易找到一篇关于fckeditor的java文件上传扩展的帖子。但是,实践的时候经常会有人遇到servlet error的报错。如果有log,或正在debug,可以看到报错信息:java.lang.NoClassDefFoundError: org/apache/xml/serializer/TreeWalker
at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:821)
at com.fredck.FCKeditor.connector.ConnectorServlet.doGet(ConnectorServlet.java:151)
找不到TreeWalker这个类。
原本这个类是包含在xalan.jar中的,但是xalan-j2.7.0版的发布包中,将serializer包中的类单独打包成serializer.jar,不再包含在xalan.jar中,所以才会即使添加了xalan.jar也无法找到该类,添加后即可解决问题。
网上的相关资料:
> You need to include serializer.jar file also. This file includes the
> serializer. In the Xalan Java 2.7 release, serializer code is included in
> this jar file. The release 2.6 has serializer code included in the
> xalan.jar file.
:我的总结是:一般来说fckeditor出现问题首先web.xml里面是否配置正确,然后看是目录否权限问题
第三可能是xalan.jar不存在。
后面发现问题还是没有解决,开始从源代码中找问题的根源。
找到:browser.html中找
var oXML = new FCKXml() ;
alert('111111');
if ( callBackFunction ){
alert('2222:'+sUrl);
oXML.LoadUrl( sUrl, callBackFunction ) ; // Asynchronous load.
}else{
alert('3333');
return oXML.LoadUrl( sUrl ) ;
}
发现是在加载LoadUrl xml文件的时候报错,找到FCKXml在fckxml.js文件中定义的。
oXmlHttp.onreadystatechange = function()
{
if ( oXmlHttp.readyState == 4 )
{
oFCKXml.DOMDocument = oXmlHttp.responseXML ;
alert('444444:'+oXmlHttp.status);
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ){
asyncFunctionPointer( oFCKXml ) ;
}else{
alert('5555555555555:'+oXmlHttp.responseText);
alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
}
}
}
弹出oXmlHttp.status=500和异常情况信息:
java.net.URISyntaxException:Illegal character in path at index 18: file:///D:/Program File/
Apache Software Foundation/Tomcat 5.5/webapps/zeqi/upload
at java.net.URI$Parser.fail<URI.java:2809>
at java.net.URI$Parser.checkChars<URI.java:2902>
at java.net.URI$Parser.parseHierarchical<URI.java:3066>
at java.net.URI$Parser.parse<URI.java:3014>
at java.net.URI.<init><URI.java:578>
另外一种方法:在本地tomcat下测试的时候,如果启动控制台,在点击fck图片上传的时候控制台也会报上面相同的错误。确定了找到问题的原因之后,下面就比较好解决问题了。
主要原因是由于文件夹Program File中的空格所致,所以可以把我们发布在tomcat下的工程放到没有空格的文件夹下,如D盘根目录下。
修改tomcat配置文件,如:D:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml
在Host节点配置上加一个Context:<Context path="" docBase="D:\zeqi" reloadable="true" debug="0"></Context>
重新启动就可以了。由于开发的时候是用的eclipse+jetty+webwork(richtexteditor),在eclipse中运行的时候是没有问题的。
另外关于图片上传上去之后,选择显示不了图片的问题是由于端口不对,可以修改webwork.properties中的下面这行:
### used to build URLs, such as the UrlTag
webwork.url.http.port = 8081
修改成tomcat的端口号就可以了。