Re: passing servletRunner web.xml as stream

Adam Hardy <[email protected]> Mon, 28 Apr 2008 23:58:34 +0100
Newsgroups gmane.comp.web.httpunit.devel
Message-ID <[email protected]>
I couldn't see it during debugging earlier - I didn't have the jasper source to 
play with. Hence the message - I was hoping to be able to avoid debugging jasper :(

I'll check it out and get back to you.

Russell Gold on 28/04/08 04:06, wrote:
> Do you know how Jasper is trying to locate the web.xml? How does it  
> determine what path should contain it? It may simply be that you  
> cannot do the web.xml stream, but need to write it to the file system  
> and use it from there.
> 
> On Apr 27, 2008, at 9:39 AM, Adam Hardy wrote:
> 
>> Hi People,
>>
>> any comments on this issue?
>>
>>
>> Adam Hardy on 22/04/08 14:10, wrote:
>>
>> if you recall, I set up ServletUnit with a web.xml stream, and a  
>> servlet is
>> trying to find web.xml.
>>
>> I traced it to here:
>>
>> JspServletWrapper.handleJspException(Exception) line: 492	
>> JspServletWrapper.service(HttpServletRequest, HttpServletResponse,  
>> boolean)
>> line: 357	
>> JspServlet.serviceJspFile(HttpServletRequest, HttpServletResponse,  
>> String,
>> Throwable, boolean) line: 320	
>> JspServlet.service(HttpServletRequest, HttpServletResponse) line: 266	
>> JspServlet(HttpServlet).service(ServletRequest, ServletResponse)  
>> line: 853	
>> RequestDispatcherImpl.forward(ServletRequest, ServletResponse) line:  
>> 54	
>> ServletDispatcherResult.doExecute(String, ActionInvocation) line: 139	
>>
>>
>> The JspServletWrapper is from the org.apache.jasper.servlet package.
>>
>>
>> So your statement that my servlet is doing a request for the web.xml  
>> is only
>> partially correct - it seems that jasper is the true culprit, trying  
>> to run the
>> JSP.
>>
>> I didn't have the Jasper source code, but the next question is  
>> whether HttpUnit
>> can handle it? Perhaps the config should be available to Jasper  
>> somehow?
>>
>> here's its logging:
>>
>> FINE 14:06:54 JspRuntimeContext.<init>(): Parent class loader is:
>> sun.misc.Launcher$AppClassLoader@1858610 (org.apache.jasper.compiler)
>> FINE 14:06:54 JspRuntimeContext.initClassPath(): Compilation classpath
>> initialized:
>> /home/adam/projects/atomic/build/:/home/java/httpunit/trunk/httpunit/ 
>> build/:/home/java/httpunit/trunk/httpunit/jars/activation.jar:/home/ 
>> java/httpunit/trunk/httpunit/jars/ant-dependencies.jar:/home/java/ 
>> httpunit/trunk/httpunit/jars/mailapi.jar:/home/java/httpunit/trunk/ 
>> httpunit/jars/quicksite.jar:/home/java/httpunit/trunk/httpunit/jars/ 
>> js.jar:/home/java/httpunit/trunk/httpunit/jars/junit.jar:/home/java/ 
>> httpunit/trunk/httpunit/jars/nekohtml.jar:/home/java/httpunit/trunk/ 
>> httpunit/jars/servlet.jar:/home/java/httpunit/trunk/httpunit/jars/ 
>> Tidy.jar:/home/java/httpunit/trunk/httpunit/jars/xercesImpl.jar:/ 
>> home/java/httpunit/trunk/httpunit/jars/xmlParserAPIs.jar:/home/java/ 
>> m2-repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/home/java/ 
>> m2-repo/avalon-framework/avalon-framework/4.1.3/avalon- 
>> framework-4.1.3.jar:/home/java/m2-repo/com/opensymphony/xwork/2.0.4/ 
>> xwork-2.0.4.jar:/home/java/m2-repo/commons-beanutils/commons- 
>> beanutils/1.8.0-BETA/commons-beanutils-1.8.0-BETA.jar:/home/java/m
>>
>> 2-repo/commons-collections/commons-collections/3.2/commons- 
>> collections-3.2.jar:/home/java/m2-repo/commons-configuration/commons- 
>> configuration/1.5/commons-configuration-1.5.jar:/home/java/m2-repo/ 
>> commons-digester/commons-digester/1.8/commons-digester-1.8.jar:/home/ 
>> java/m2-repo/commons-lang/commons-lang/2.3/commons-lang-2.3.jar:/ 
>> home/java/m2-repo/freemarker/freemarker/2.3.8/freemarker-2.3.8.jar:/ 
>> home/java/m2-repo/logkit/logkit/1.0.1/logkit-1.0.1.jar:/home/java/m2- 
>> repo/opensymphony/ognl/2.6.11/ognl-2.6.11.jar:/home/java/m2-repo/org/ 
>> apache/struts/struts2-core/2.0.9/struts2-core-2.0.9.jar:/home/java/ 
>> m2-repo/org/apache/struts/struts2-tiles-plugin/2.0.9/struts2-tiles- 
>> plugin-2.0.9.jar:/home/java/m2-repo/org/apache/tiles/tiles-jsp/2.0.4/ 
>> tiles-jsp-2.0.4.jar:/home/java/m2-repo/org/apache/tiles/tiles-api/ 
>> 2.0.4/tiles-api-2.0.4.jar:/home/java/m2-repo/org/apache/tiles/tiles- 
>> core/2.0.4/tiles-core-2.0.4.jar:/home/java/m2-repo/org/apache/ 
>> commons/commons-io/1.3.2/commons-io-1.3.2.jar:/home/java
>>
>> /m2-repo/taglibs/standard/1.1.2/standard-1.1.2.jar:/home/java/m2- 
>> repo/javax/servlet/jstl/1.1.2/jstl-1.1.2.jar:/home/java/m2-repo/ 
>> commons-logging/commons-logging/1.1/commons-logging-1.1.jar:/home/ 
>> java/m2-repo/commons-fileupload/commons-fileupload/1.2.1/commons- 
>> fileupload-1.2.1.jar:/home/java/m2-repo/commons-math/commons-math/ 
>> 1.1/commons-math-1.1.jar:/home/java/m2-repo/cglib/cglib-nodep/2.1_3/ 
>> cglib-nodep-2.1_3.jar:/home/java/m2-repo/org/easymock/easymock/2.3/ 
>> easymock-2.3.jar:/home/java/m2-repo/org/easymock/ 
>> easymockclassextension/2.3/easymockclassextension-2.3.jar:/home/java/ 
>> m2-repo/org/permacode/atomic-test-jar/1.0-SNAPSHOT/atomic-test- 
>> jar-1.0-SNAPSHOT.jar:/home/java/m2-repo/org/dbunit/dbunit/2.2/ 
>> dbunit-2.2.jar:/home/java/m2-repo/httpunit/httpunit/1.6.2/ 
>> httpunit-1.6.2.jar:/home/java/m2-repo/org/apache/tomcat/jasper/ 
>> 6.0.13/jasper-6.0.13.jar:/home/java/m2-repo/org/apache/tomcat/juli/ 
>> 6.0.13/juli-6.0.13.jar:/home/java/m2-repo/org/apache/tomcat/jasper- 
>> el/6.0.13/jasper-el-6.0.13.jar:
>>
>> /home/java/m2-repo/org/apache/tomcat/jasper-jdt/6.0.13/jasper- 
>> jdt-6.0.13.jar:/home/java/m2-repo/org/apache/geronimo/specs/geronimo- 
>> jpa_3.0_spec/1.1.1/geronimo-jpa_3.0_spec-1.1.1.jar:/home/java/m2- 
>> repo/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar:/home/java/m2-repo/ 
>> p6spy/p6spy/1.3-patch/p6spy-1.3-patch.jar:/home/java/m2-repo/ 
>> postgresql/postgresql/8.2-507.jdbc3/postgresql-8.2-507.jdbc3.jar:/ 
>> home/java/m2-repo/com/h2database/h2/1.0.64/h2-1.0.64.jar:/home/java/ 
>> m2-repo/mysql/mysql-connector-java/5.0.5/mysql-connector- 
>> java-5.0.5.jar:/home/java/m2-repo/hsqldb/hsqldb/1.8.0.7/ 
>> hsqldb-1.8.0.7.jar:/home/java/m2-repo/org/apache/derby/derby/ 
>> 10.3.2.1/derby-10.3.2.1.jar:/home/java/m2-repo/commons-dbutils/ 
>> commons-dbutils/1.1/commons-dbutils-1.1.jar:/home/java/m2-repo/org/ 
>> springframework/spring-aop/2.0.6/spring-aop-2.0.6.jar:/home/java/m2- 
>> repo/org/springframework/spring-beans/2.0.6/spring-beans-2.0.6.jar:/ 
>> home/java/m2-repo/org/springframework/spring-context/2.0.6/spring- 
>> context-2.0.6.jar:/home/j
>>
>> ava/m2-repo/org/springframework/spring-core/2.0.6/spring- 
>> core-2.0.6.jar:/home/java/m2-repo/org/springframework/spring-dao/ 
>> 2.0.6/spring-dao-2.0.6.jar:/home/java/m2-repo/org/springframework/ 
>> spring-jdbc/2.0.6/spring-jdbc-2.0.6.jar:/home/java/m2-repo/org/ 
>> springframework/spring-jpa/2.0.6/spring-jpa-2.0.6.jar:/home/java/ 
>> eclipse-3.3.1.1/plugins/org.junit4_4.3.1/junit.jar:/home/java/m2- 
>> repo/org/hibernate/hibernate/3.2.5.ga/hibernate-3.2.5.ga.jar:/home/ 
>> java/m2-repo/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate- 
>> annotations-3.3.0.ga.jar:/home/java/m2-repo/org/hibernate/hibernate- 
>> entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar:/home/ 
>> java/m2-repo/jboss/jboss-archive-browsing/5.0.0alpha-200607201-119/ 
>> jboss-archive-browsing-5.0.0alpha-200607201-119.jar:/home/java/m2- 
>> repo/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar:/home/java/m2-repo/org/ 
>> hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons- 
>> annotations-3.0.0.ga.jar:/home/java/m2-repo/jboss/javassist/3.3.ga/ 
>> javassist-3
>>
>> .3.ga.jar:/home/java/m2-repo/antlr/antlr/2.7.6/antlr-2.7.6.jar:/home/ 
>> java/m2-repo/cglib/cglib/2.1_3/cglib-2.1_3.jar:/home/java/m2-repo/ 
>> asm/asm/1.5.3/asm-1.5.3.jar:/home/java/m2-repo/org/apache/openjpa/ 
>> openjpa-jdbc/1.1.0-SNAPSHOT/openjpa-jdbc-1.1.0-SNAPSHOT.jar:/home/ 
>> java/m2-repo/org/apache/openjpa/openjpa/1.1.0-SNAPSHOT/openjpa-1.1.0- 
>> SNAPSHOT.jar:/home/java/m2-repo/net/sourceforge/serp/serp/1.13.1/ 
>> serp-1.13.1.jar:/home/java/m2-repo/org/apache/openjpa/openjpa- 
>> examples/1.1.0-SNAPSHOT/openjpa-examples-1.1.0-SNAPSHOT.jar:/home/ 
>> java/m2-repo/com/oracle/toplink/toplink-essentials/2.0-b58g-fcs/ 
>> toplink-essentials-2.0-b58g-fcs.jar:/home/java/m2-repo/com/oracle/ 
>> toplink/toplink-essentials-agent/2.0-b58g-fcs/toplink-essentials- 
>> agent-2.0-b58g-fcs.jar:/home/java/m2-repo/javax/servlet/jsp/jsp-api/ 
>> 2.1/jsp-api-2.1.jar:/home/java/m2-repo/javax/servlet/servlet-api/2.5/ 
>> servlet-api-2.5.jar:/home/adam/projects/atomic-jdk-logging/build/:/ 
>> home/java/eclipse-3.3.1.1/configuration/org.eclipse.osgi/bundl
>>
>> es/384/1/.cp/:/home/java/eclipse-3.3.1.1/configuration/ 
>> org.eclipse.osgi/bundles/92/1/.cp/:/home/java/eclipse-3.3.1.1/ 
>> configuration/org.eclipse.osgi/bundles/9/1/.cp/:/tmp:null
>>
>> (org.apache.jasper.compiler)
>> FINE 14:06:54 JspServlet.init(): Scratch dir for the JSP engine is: / 
>> tmp
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.init(): IMPORTANT: Do not modify the  
>> generated servlets
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): JspEngine --> /test.jsp
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	     ServletPath: /test.jsp
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	        PathInfo: null
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	        RealPath:
>> /home/adam/projects/atomic/test.jsp (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	      RequestURI: /test/test.jsp
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	     QueryString: code=1
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 	  Request Params:   
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 JspServlet.service(): 		 code = 1  
>> (org.apache.jasper.servlet)
>> FINE 14:06:54 Compiler.removeGeneratedFiles(): Deleting
>> /tmp/org/apache/jsp/test_jsp.class (org.apache.jasper.compiler)
>> FINE 14:06:54 Compiler.removeGeneratedFiles(): Deleting
>> /tmp/org/apache/jsp/test_jsp.java (org.apache.jasper.compiler)
>>
>>
>>
>>
>> Russell Gold on 09/04/08 01:13, wrote:
>>>> Based on the stack trace, it appears that your servlet is doing a
>>>> request for the web.xml on its own. The input stream allows you to
>>>> specify the web.xml for ServletUnit to use to interpret requests;
>>>> however, if one of your servlets looks for that file, it will be
>>>> treated as any other web request.
>>>>
>>>>
>>>> On Apr 8, 2008, at 10:09 AM, Adam Hardy wrote:
>>>>
>>>>>> I am trying to figure out the exception from the following code  
>>>>>> (see
>>>>>> below for
>>>>>> stacktrace).
>>>>>>
>>>>>> What more do I need to do? I have done this:
>>>>>>
>>>>>> - instantiated servletRunner with XML stream for deployment  
>>>>>> descriptor
>>>>>> - created a WebRequest object
>>>>>> - passed in the request to the getResponse() call
>>>>>>
>>>>>> Yet ServletRunner is looking for the deployment descriptor again,
>>>>>> which it
>>>>>> should already have.
>>>>>>
>>>>>>
>>>>>> StringBuilder xml = new StringBuilder();
>>>>>> xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
>>>>>> xml.append("<web-app version=\"2.4\"");
>>>>>> xml.append(" xmlns=\"http://java.sun.com/xml/ns/j2ee\"");
>>>>>> xml.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance
>>>>>> \"");
>>>>>> xml.append(" xsi:schemaLocation=\"http://java.sun.com/xml/ns/ 
>>>>>> j2ee");
>>>>>> xml.append(" http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">");
>>>>>> xml.append("<filter><filter-name>Struts</filter-name>");
>>>>>> xml.append("<filter-class>");
>>>>>> xml.append("org.apache.struts2.dispatcher.FilterDispatcher");
>>>>>> xml.append("</filter-class></filter>");
>>>>>> xml.append("<filter-mapping><filter-name>Struts</filter-name>");
>>>>>> xml.append("<url-pattern>*.html</url-pattern></filter-mapping>");
>>>>>> xml.append("<servlet><servlet-name>bla</servlet-name><servlet-
>>>>>> class>");
>>>>>> xml.append("bug.EmptyServlet");
>>>>>> xml.append("</servlet-class></servlet>");
>>>>>> xml.append("<servlet-mapping><servlet-name>bla</servlet-name>");
>>>>>> xml.append("<url-pattern>*.html</url-pattern></servlet-mapping>");
>>>>>> xml.append("</web-app>");
>>>>>> ServletRunner servletRunner =
>>>>>>    new ServletRunner(new ByteArrayInputStream(xml.toString()
>>>>>>        .getBytes()), "/test");
>>>>>> servletRunner.registerServlet("bla",  
>>>>>> EmptyServlet.class.getName());
>>>>>> ServletUnitClient client = servletRunner.newClient();
>>>>>> File file = new File("src/test/resources/results.csv");
>>>>>> WebRequest getRequest =
>>>>>>    new GetMethodWebRequest(
>>>>>>        "http://localhost/test/test-result/edit.html");
>>>>>> WebResponse response = servletRunner.getResponse(getRequest);
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> com.meterware.httpunit.HttpInternalErrorException: Error on HTTP
>>>>>> request: 500
>>>>>> javax.servlet.ServletException:
>>>>>> /home/adam/projects/bug-httpunit-struts/WEB-INF/web.xml (No such
>>>>>> file or
>>>>>> directory) [http://localhost/test/test-result/edit.html]
>>>>>> 	at
>>>>>> com
>>>>>> .meterware
>>>>>> .servletunit 
>>>>>> .ServletUnitClient.newResponse(ServletUnitClient.java:121)


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone