# JSF Test Anwendung ausführen funktioniert nicht



## kama (21. Dez 2007)

Hallo,

ich versuche mich gerade an einer JSF Anwendung. Als einstieg habe ich mir ein Beispiel zum Thema FrontController geholt und nun wollte ich das mal laufen lassen....na ja, da der Java Got vor dem Lauf den Compiler gestellt hat, versuche ich nun zuerst das Teil mal zu compilieren....

aber da hakt es gerade gewaltig bei mir:

Ich habe folgende JAR's vorätig:

```
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-discovery-0.4.jar
commons-logging-1.1.jar
jsf-api.jar
jsf-impl.jar
jstl-1.1.0.jar
myfaces-api-1.2.0.jar
myfaces-impl-1.2.0.jar
servlet-api.jar
servlets-default.jar
```
Nun bekomme ich aber bei folgendem Code-Stück


```
FacesContext jsfContext = FacesContext.getCurrentInstance();
		ELContext elContext = jsfContext.getELContext();
		ValueExpression vExpr = jsfContext.getApplication()
```
 immer noch gemeldet, dass javax.el.ELContext nicht aufgelöst werden kann.

Das bedeutet ja nun, dass mir irgendein JAR-File noch fehlt. Die Frage ist eben nur welches?

Ich habe schon das Forum durchsucht, Google ...Hat da jemand einen Hinweis / Tip für mich ?

Vielen Dank im Voraus.
MfG
Karl Heinz Marbaise


----------



## kama (23. Dez 2007)

Nachdem ich nun nach einigen Versuchen es hinbekommen habe, die Anwendung zu compilieren und auch in einen Tomcat zu deployen
tritt jetzt ein anderes Problem auf....

Ich rufe das Teil via:
http://localhost:8080/SupoSEWFE-0.1.0.0/Controller?param1=xxxx&param2=YYYY
auf...


```
23.12.2007 11:25:30 org.apache.catalina.core.ApplicationDispatcher invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/JspIdConsumer
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1852)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:876)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1852)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:876)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1852)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:876)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208)
        at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1326)
        at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1578)
        at org.apache.jasper.compiler.Parser.parse(Parser.java:127)
        at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:212)
        at org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
        at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:156)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at com.soebes.supose.webapp.FrontController.doGet(FrontController.java:61)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:415)
        at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:475)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:143)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:595)
```

Der Code dazu:

```
package com.soebes.supose.webapp;
import java.io.IOException;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
 * FrontController-Servlet
 */
public class FrontController extends HttpServlet {
	private ApplicationFactory factory;
	private Application application;

	public void init() throws ServletException {				
		factory = (ApplicationFactory) FactoryFinder.getFactory(
					FactoryFinder.APPLICATION_FACTORY);
		application = factory.getApplication();
	}

      protected void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {
		Object obj = req.getParameter("param1");
		String param1 = (obj!=null) ? obj.toString() : "";
		obj = req.getParameter("param2");		
		String param2 = (obj!=null) ? obj.toString() : "";
		RepositoryBean pBean = new RepositoryBean();
		pBean.setParam1( param1 );
		pBean.setParam2( param2 );
		FacesContext jsfContext = FacesContext.getCurrentInstance(); 
		ELContext elContext = jsfContext.getELContext(); //HIER IST DAS PROBLEM...
//		Application application = jsfContext.getApplication();
		ValueExpression vExpr = application.getExpressionFactory()
			.createValueExpression( elContext, "#{RepositoryBean}", 
					RepositoryBean.class );
		vExpr.setValue( elContext, pBean );
		RequestDispatcher rd = 
			getServletContext().getRequestDispatcher( "/start.jsp" );
		rd.forward( req, res );
	}
}
```

web.xml:

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>ControllerServlet</servlet-name>
        <servlet-class>com.soebes.supose.webapp.FrontController</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ControllerServlet</servlet-name>
        <url-pattern>/Controller</url-pattern>
    </servlet-mapping>
</web-app>
```

und die face-config.xml

```
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>

    <managed-bean>
        <managed-bean-name>RepositoryBean</managed-bean-name>
        <managed-bean-class>com.soebes.supose.webapp.RepositoryBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

</faces-config>
```

Die Frage ist einfach. Geht das mit dem FrontController so nicht? Oder übersehe ich noch etwas....
Derzeit vermute ich, dass ich noch ein JAR vergesse...nur ich finde nicht welches...

Vielen dank im Voraus.
MfG
Karl Heinz Marbaise


----------



## Guest (26. Dez 2007)

Fehlt da nicht noch die standard.jar? 

Zu finden hier.


----------



## kama (27. Dez 2007)

Hallo,

zuerst einmal vielen Dank für den Hinweis....das hat mich wieder einen Schritt weiter gebracht....

jetzt bekomme ich noch beim starten im Tomcat 6 folgendes zu sehen:

```
27.12.2007 13:58:34 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.14
27.12.2007 13:58:34 org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive SupoSEWFE-0.1.0.0.war
27.12.2007 13:58:35 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\download\Java\Tomcat\6.0\apache-tomcat-6.0.14\webapps\SupoSEWFE-0.1.0.0\WEB-INF\lib\servlet-api.jar)
 - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
27.12.2007 13:58:35 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Error listenerStart
27.12.2007 13:58:35 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Context [/SupoSEWFE-0.1.0.0] startup failed due to previous errors
27.12.2007 13:58:36 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
27.12.2007 13:58:36 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
27.12.2007 13:58:36 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/32  config=null
27.12.2007 13:58:36 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1252 ms
27.12.2007 13:59:18 org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
27.12.2007 13:59:19 org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
27.12.2007 13:59:19 org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
```

So ich habe jetzt auch schon wieder ein wenig Probiert...aber leider bisher nicht von Erfolg gekrönt....
Die Liste der Jar's sieht jetzt so aus:

```
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-el-1.0.jar
commons-fileupload-1.0.jar
commons-lang-2.1.jar
commons-validator-1.3.1.jar
commons-logging-1.0.4.jar
el-api.jar
el-ri.jar
jsf-api.jar
jsp-api.jar
jstl-1.1.0.jar
myfaces-api-1.2.0.jar
myfaces-impl-1.2.0.jar
servlet-api.jar
servlets-default.jar
standard.jar
```

MfG
Karl Heinz Marbaise


----------



## kama (27. Dez 2007)

Hallo,

so nachdem ich die JAR's:


```
myfaces-api-1.2.0.jar
myfaces-impl-1.2.0.jar
```
durch 

```
myfaces-api-1.1.5.jar
myfaces-impl-1.1.5.jar
```
ausgetauscht habe, bekomme ich zumindestens während des Hochfahrens des Tomcat keine Fehlermeldung mehr.....

aber wenn ich die Anwendung aufrufe....


```
27.12.2007 16:35:43 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet ControllerServlet threw exception
java.lang.NullPointerException
	at com.soebes.supose.webapp.FrontController.doGet(FrontController.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:595)
```


```
FacesContext jsfContext = FacesContext.getCurrentInstance();
      ELContext elContext = jsfContext.getELContext(); //HIER IST DAS PROBLEM...
```
Hm....Es scheint, als ob hier getCurrentInstance() nichts liefert......

MfG
Karl Heinz Marbaise


----------



## Guest (29. Dez 2007)

Was istn das für eine Applikation, die du da testen möchtest. Kann man die irgendwo runterladen, um sich das mal näher anzuschauen? Unter soebes.com konnte ich jetzt nix finden. Ich vermute nämlich, dass der Fehler ein Folgefehler ist, der zwar an der von dir genannten Stelle auftritt, dort aber nicht verursacht wird.


----------



## kama (29. Dez 2007)

Hallo,

zuerst mal vielen Dank für die Hilfe....



			
				Anonymous hat gesagt.:
			
		

> Was istn das für eine Applikation, die du da testen möchtest. Kann man die irgendwo runterladen, um sich das mal näher anzuschauen? Unter soebes.com konnte ich jetzt nix finden. Ich vermute nämlich, dass der Fehler ein Folgefehler ist, der zwar an der von dir genannten Stelle auftritt, dort aber nicht verursacht wird.


Die "Applikation" ist derzeit noch nicht mehr als lediglich ein Versuch im Rahmen eine JSF Anwendung einen FrontController zu realisieren, der per URL aufgerufen mit Parametern aufgerufen wird...mehr nicht....

Ich hab's das Teil mal Online gestellt...
Download:
Der WAR-File:
http://download.soebes.de/SupoSEWFE-0.1.0.0.war
Der Source-Code:
http://download.soebes.de/SupoSEWFE-0.1.0.0-src.tar.gz

MfG
Karl Heinz Marbaise


----------



## HLX (29. Dez 2007)

Möglicherweise ist JSF noch nicht korrekt initialisiert. Dafür kann es mehrere Ursachen geben.

Du verwendest MyFaces. Damit kenne ich mich leider nicht aus. Für das übliche JSF gilt, dass zur Initialisierung vor allen anderen Dingen das FacesServlet aufgerufen wird.

Überprüfe außerdem, ob alle erforderlichen Einstellungen in der web.xml vorhanden sind. Ggf. müssen Context-Parameter gesetzt werden.


----------

