访问报HTTP Status 500错误。ubuntu+tomcat+java6 页面的功能是显示一些要查询的XML文件。请高手帮忙看看,本人不是太懂JSP语言~
===========================================================================
访问返回的错误内容:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.role.modrolexml_jsp._jspService(org.apache.jsp.role.modrolexml_jsp:120)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.goldhuman.auth.AuthFilter.doFilter(AuthFilter.java:186)
root cause java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z
com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:373)
com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:127)
com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662)
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
protocol.XmlRole.toXMLByteArray(XmlRole.java:636)
org.apache.jsp.role.modrolexml_jsp._jspService(org.apache.jsp.role.modrolexml_jsp:97)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.goldhuman.auth.AuthFilter.doFilter(AuthFilter.java:186)
====================================网页源代码======================================
<%@page contentType="text/html; charset=GBK"%>
<%@page import="java.lang.*"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.text.*"%>
<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
<%@page import="protocol.*"%>
<%@page import="com.goldhuman.auth.*"%>
<%@page import="org.apache.commons.logging.Log"%>
<%@page import="org.apache.commons.logging.LogFactory"%>
<%
com.goldhuman.Common.Octets.setDefaultCharset("UTF-16LE");
String strRoleId = request.getParameter("roleid");
String strRoleName = request.getParameter("name");LogFactory.getLog("modrolexml.jsp").info("request xml for roleid=" + strRoleId + ",name=" + strRoleName + ",operator=" + AuthFilter.getRemoteUser(session) );int roleid = -1;
if( null != strRoleId && strRoleId.length() > 0 )
 roleid = Integer.parseInt(request.getParameter("roleid"));if( -1 == roleid && null != strRoleName && strRoleName.length() > 0 )
{
 try{ roleid = GameDB.getRoleIdByName( strRoleName ); }
 catch (Exception e) { out.println(e.toString()); return; }
 if( -1 == roleid )
 {
  out.println("8" );
  return;
 }
}
if( -1 == roleid )
{
 out.println("9");
 return;
}String xmlstring = null;
byte[] xmlbytes = null;
try{
 XmlRole.Role role = XmlRole.getRoleFromDB(roleid);
 if( null == role )
 {
  out.println("7");
  return;
 }
 xmlbytes = XmlRole.toXMLByteArray(role);
 if( null == xmlbytes )
 {
  out.println("6");
  return;
 }
 xmlstring = new String( xmlbytes, "UTF-8" ); Runtime.getRuntime().exec("/bin/mkdir -p /var/spool/rolexml/outcoming");
 (new FileOutputStream("/var/spool/rolexml/outcoming/" 
  +roleid+"_"+System.currentTimeMillis()/1000+".xml"))
  .write(xmlstring.getBytes("UTF-8"));
}
catch (Exception e) { out.println(e.toString()); return; }
LogFactory.getLog("modrolexml.jsp").info("getRoleInfoXML success, roleid=" + roleid + ",name=" + strRoleName + ",operator=" + AuthFilter.getRemoteUser(session) );
%>
<%=xmlstring%> 

解决方案 »

  1.   

    去work目录下找到这个文件org.apache.jsp.role.modrolexml_jsp.java,找到第120行,看看是什么代码,然后对应到jsp文件中来看看是哪一行代码出错,就知道了。
      

  2.   

    找到了。。内容如下
    package org.apache.jsp.role;import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.lang.*;
    import java.util.*;
    import java.io.*;
    import java.text.*;
    import org.apache.commons.lang.StringEscapeUtils;
    import protocol.*;
    import com.goldhuman.auth.*;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;public final class modrolexml_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent {  private static java.util.Vector _jspx_dependants;  public java.util.List getDependants() {
        return _jspx_dependants;
      }  public void _jspService(HttpServletRequest request, HttpServletResponse response)
            throws java.io.IOException, ServletException {    JspFactory _jspxFactory = null;
        PageContext pageContext = null;
        HttpSession session = null;
        ServletContext application = null;
        ServletConfig config = null;
        JspWriter out = null;
        Object page = this;
        JspWriter _jspx_out = null;
        PageContext _jspx_page_context = null;
        try {
          _jspxFactory = JspFactory.getDefaultFactory();
          response.setContentType("text/html; charset=GBK");
          pageContext = _jspxFactory.getPageContext(this, request, response,
           null, true, 8192, true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;      out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");
          out.write("\n");com.goldhuman.Common.Octets.setDefaultCharset("UTF-16LE");
    String strRoleId = request.getParameter("roleid");
    String strRoleName = request.getParameter("name");LogFactory.getLog("modrolexml.jsp").info("request xml for roleid=" + strRoleId + ",name=" + strRoleName + ",operator=" + AuthFilter.getRemoteUser(session) );int roleid = -1;
    if( null != strRoleId && strRoleId.length() > 0 )
    roleid = Integer.parseInt(request.getParameter("roleid"));if( -1 == roleid && null != strRoleName && strRoleName.length() > 0 )
    {
    try{ roleid = GameDB.getRoleIdByName( strRoleName ); }
    catch (Exception e) { out.println(e.toString()); return; }
    if( -1 == roleid )
    {
    out.println("8" );
    return;
    }
    }
    if( -1 == roleid )
    {
    out.println("9");
    return;
    }String xmlstring = null;
    byte[] xmlbytes = null;
    try{
    XmlRole.Role role = XmlRole.getRoleFromDB(roleid);
    if( null == role )
    {
    out.println("7");
    return;
    }
    xmlbytes = XmlRole.toXMLByteArray(role);
    if( null == xmlbytes )
    {
    out.println("6");
    return;
    }
    xmlstring = new String( xmlbytes, "UTF-8" ); Runtime.getRuntime().exec("/bin/mkdir -p /var/spool/rolexml/outcoming");
    (new FileOutputStream("/var/spool/rolexml/outcoming/" 
    +roleid+"_"+System.currentTimeMillis()/1000+".xml"))
    .write(xmlstring.getBytes("UTF-8"));
    }
    catch (Exception e) { out.println(e.toString()); return; }
    LogFactory.getLog("modrolexml.jsp").info("getRoleInfoXML success, roleid=" + roleid + ",name=" + strRoleName + ",operator=" + AuthFilter.getRemoteUser(session) );      out.write('\n');
          out.print(xmlstring);
        } catch (Throwable t) {
          if (!(t instanceof SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              out.clearBuffer();
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
          }
        } finally {
          if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
    }
      

  3.   

    http://www.nabble.com/java.lang.AbstractMethodError:-org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z-td23527152.html这里的回复说:
    XML-parser related AbstractMethodError can be seen when you're using   
    older version of parser in your configuration. 
    getXmlStandalone() method is available from DOM Level 3(or, JDK5.0). 
    http://java.sun.com/javase/6/docs/api/org/w3c/dom/Document.html#getXmlStandalone() 
    Your XML-parser should be DOM Level 2 or earlier version. see also: 
    http://groups.google.com/group/twitter4j/browse_thread/thread/f6f8440c1e0d44d7/24f69ad2dd3db138?lnk=gst&q=abstractmethoderror#24f69ad2dd3db138API的中文地址:http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/org/w3c/dom/Document.html
      

  4.   

    我不太明白楼上朋友的意思,只是使用JSP网站系统,不懂JSP语言,不知道应该如何去做。 之前这套系统在重装系统之前是可以的。 代码应该是没问题!
      

  5.   

    其他页面可以打开, 这个页面和另外一个需要读写XML的页面无法正常浏览,都是报出同样错误!@
      

  6.   

    应该是目前的系统不支持DOM level 3或者JDK版本比较低造成的,有可能是系统少了某些补丁