Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problem running Xerces parser in simple HTTPServlet, help please!

23 views
Skip to first unread message

Wolfgang

unread,
Jan 26, 2003, 9:13:46 PM1/26/03
to
I'm running Tomcat 4.1.9, and the
Xerces Java parser XML4J version 4.1.2.
To isolate the propblem I have stripped the servlet code down to a
bare minimum, as per code below. See the appended very simple servlet
code.

I am simply instantiating a Xerces DOMParser in the doPost method of
the servlet, like this:
org.apache.xerces.parsers.DOMParser parser
= new org.apache.xerces.parsers.DOMParser();
(The path org.apache.xerces.parsers... is optional because it's
already in the import statement at the beginning of the servlet-- I
show it just to make things clear)

The servlet compiles fine. Also, this compiles and works fine in a
standalone application (naturally with more code to do some real
work). The code needs
xercesImpl.jar and xmlParserAPIs.jar,
which for the servlet I have placed in the appropriate WEB-INF/lib
directory of the servlet. So, the servlet shouldn't have a problem
whith this, and in fact it isn't compaining about something missing.

Hower, when I try to run the servlet, I'm getting this error:
java.lang.VerifyError: (
class:
org/apache/xerces/parsers/IntegratedParserConfiguration,
method:
configurePipeline signature: ()V) Incompatible type for getting or
setting field.

The complete error dump is also appended.

Any idea what's going on here? I'll be grateful for any hints as to
the cause of the problem.

Thanks.

Wolfgang,
UC Santa Barbara, CA

========================
Here is the simple servlet code:
========================
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Apache Xerces parser classes
import org.apache.xerces.parsers.*;

public class Test extends HttpServlet {
private DOMParser parser;

public void init(ServletConfig config) throws ServletException {
; // no work required here for this test
}

protected void doPost (
HttpServletRequest request,
HttpServletResponse response
) throws ServletException, IOException {

String placeName = request.getParameter("placename");
System.out.println("Place2: " + placeName);
// THE FOLLOWING STATEMENT CAUSES THE ERROR
// IF I COMMENT OUT THIS LINE, ALL IS FINE
org.apache.xerces.parsers.DOMParser parser
= new org.apache.xerces.parsers.DOMParser();
}
}

================================================
Here is the horrific error code produced by running the servlet
================================================

type Exception report

message

description The server encountered an internal error () that prevented
it from fulfilling this request.

exception

javax.servlet.ServletException: Invoker service() exception
at
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:509)
at
org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:216)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2350)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)


root cause

java.lang.VerifyError: (class:
org/apache/xerces/parsers/IntegratedParserConfiguration, method:
configurePipeline signature: ()V) Incompatible type for getting or
setting field
at java.lang.Class.getDeclaredConstructors0(Native Method)
at
java.lang.Class.privateGetDeclaredConstructors(Class.java:1590)
at java.lang.Class.getConstructor0(Class.java:1762)
at java.lang.Class.newInstance0(Class.java:276)
at java.lang.Class.newInstance(Class.java:259)
at
org.apache.xerces.util.ObjectFactory.newInstance(ObjectFactory.java:296)
at
org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:224)
at
org.apache.xerces.util.ObjectFactory.createObject(ObjectFactory.java:119)
at org.apache.xerces.parsers.DOMParser.(DOMParser.java:109)
at Test.doPost(Test.java:16)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:451)
at
org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:216)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2350)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
at java.lang.Thread.run(Thread.java:536)


Wolfgang

unread,
Jan 27, 2003, 10:53:04 AM1/27/03
to
I found the problem and solved it. Tomcat 4 by default comes with
Xerces jars in its configuratinon dir common/endorsed. Unaware of
this, I compiled my servlet with different Xerces jars, and so things
blew up. Now I have updated the jars in common/endorsed and the
servlet runs fine.

It is one of the more insidious pitfalls in Java that libraries in
"hidden" parts of the classpath can override what one intents to do.

Thanks.

Wolfgang

0 new messages