# JSF und Proxy



## mad-din (5. Nov 2007)

Hi Leute!

Ich hab ein ganz komisches Problem und ich denke, es liegt daran, dass ich hier hinter einem Proxy sitze. Ich will eine JSF Anwendung mit Eclipse bauen. Eclipse ist soweit richtig eingestellt, nur bekomme ich immer den Fehler, dass das FacesServlet nicht gefunden werden kann. Es gibt in der ganzen Anwendung nur eine JSP, die folgende Taglibs einbindet:


```
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
```

Ich kann folgende Fehler ausschließen:

 - nicht alle Jars vorhanden
 - Kein Servlet-Mapping in web.xml
 - keine faces-config.xml

Als Fehlermeldungen gibt es diese, wenn ich die Anwendung so aufrrufe: http://localhost:8181/jsftest/



> Stacktrace:
> org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
> ...



Rufe ich die JSF-Seite direkt auf mit http://localhost:8181/jsftest/index.faces erhalte ich folgende Fehlermeldung:


```
javax.servlet.ServletException: Servlet.init() for servlet Faces Servlet threw exception
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Thread.java:595)

root cause

java.lang.NullPointerException
	javax.faces.webapp.FacesServlet.init(FacesServlet.java:144)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	java.lang.Thread.run(Thread.java:595)
```


Kann es sein, dass die Taglibs durch Angabe von "http:/java.sun.com" auch eine Internetverbindung benötigen? Wenn ja, wie kann ich Java darauf aufmerksam machen, dass es einen Proxy benutzen soll?

Danke schonmal und viele Grüße
Martin


----------



## SnooP (5. Nov 2007)

nein ... die url dient nur zur eindeutigen Identifzierung bzw. Zuordnung - ich glaube eher, dass es an einer falschen web.xml liegt. Wenn du auf localhost gehst, sollte auch auf keinem Fall irgendein Proxy aktiv werden! Warum überhaupt 8181?


----------



## mad-din (5. Nov 2007)

SnooP hat gesagt.:
			
		

> nein ... die url dient nur zur eindeutigen Identifzierung bzw. Zuordnung - ich glaube eher, dass es an einer falschen web.xml liegt. Wenn du auf localhost gehst, sollte auch auf keinem Fall irgendein Proxy aktiv werden! Warum überhaupt 8181?



Hi!

Ja, das nicht gerade, aber ich dachte vielleicht, dass Java sich mit http://java.sun.com/jsf/core irgendwie verbindet und sich da irgendwelche Definitionen, Daten o.Ä. holt. Warum 8181? Ganz einfach: Tomcat läuft auf 8080 und der Eclipse-Tomcat auf 8181  

Was könnte an der web.xml falsch sein? Diese wird ja auch von eclipse generiert und das Faces Servlet ist vorhanden, das Mapping auch und die Bibliotheken sind auch vorhanden. 

Viele Grüße
Martin


----------



## SnooP (5. Nov 2007)

poste doch mal  - in der webinf sind auch die notwendigen dateien drinne?

wie gesagt - an die definitionen ist er herzlich wenig interessiert - ich hab bei mir dafür häufig gar keinen netz-zugang gehabt und es ging trotzdem


----------



## mad-din (5. Nov 2007)

Hm,

okay. Es ist eine ganz einfache Testanwendung: Eine index.jsp und sonst nichts. Hier mal die Codes dazu:

web.xml


```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
	<display-name>reporting</display-name>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>
		javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>
```


faces-config.xml


```
<?xml version="1.0" encoding="UTF-8"?>

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

<faces-config>

</faces-config>
```

und die index.jsp:


```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>

<f:view>

	<h:outputText value="Test" />

</f:view>

</body>
</html>
```

Ich hoffe, ihr findet irgendeinen Fehler 

Viele Grüße,
Martin


----------



## HLX (5. Nov 2007)

1. Fehler: Kein URL-Mapping zum FacesServlet. Das FacesServlet muss für JSF zuerst initialisiert werden.

2. Fehler: Misteriös  ???:L 

Da du Eclipse vorhin erwähnt hast: Eclipse und Web Container sind so ne Sache. Man sucht stundenlang nach einem Fehler, dabei ist Eclipse schuld. Es lohnt sich ab und zu mal die Anwendung vom Tomcat zu schmeißen, das Work-Directory des Tomcat zu leeren (rechte Maustaste auf Server im Server-View) und das Projekt neu zu deployen.


----------



## mad-din (5. Nov 2007)

Hm,

vielleicht hilft auch noch folgende Meldung:


```
05.11.2007 15:17:45 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Java\SDK\jdk\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Programme\PHP\;C:\Java\SDK\jdk\bin;C:\Programme\oracle\ora92\bin;C:\Programme\Oracle\jre\1.3.1\bin;C:\Programme\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\MySQL\MySQL Server 5.0\bin;C:\Java\SDK\bin;C:\Entwicklung\D\dm\bin;C:\Entwicklung\D\dmd\bin;
05.11.2007 15:17:45 org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8181
05.11.2007 15:17:45 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 282 ms
05.11.2007 15:17:45 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
05.11.2007 15:17:45 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.23
05.11.2007 15:17:45 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
05.11.2007 15:17:45 org.apache.catalina.startup.HostConfig deployDirectory
SCHWERWIEGEND: Error deploying web application directory ROOT
java.lang.NoSuchMethodError: org.apache.naming.NamingContextEnumeration.<init>(Ljava/util/Iterator;)V
	at org.apache.naming.resources.FileDirContext.list(FileDirContext.java:311)
	at org.apache.naming.resources.ProxyDirContext.list(ProxyDirContext.java:482)
	at org.apache.catalina.startup.TldConfig.tldScanResourcePathsWebInf(TldConfig.java:633)
	at org.apache.catalina.startup.TldConfig.tldScanResourcePaths(TldConfig.java:602)
	at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:283)
	at org.apache.catalina.core.StandardContext.processTlds(StandardContext.java:4307)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4144)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
05.11.2007 15:17:45 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8181
05.11.2007 15:17:45 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8109
05.11.2007 15:17:45 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16  config=null
05.11.2007 15:17:45 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
05.11.2007 15:17:45 org.apache.catalina.startup.Catalina start
INFO: Server startup in 282 ms
```

So wie es aussieht kann auch mein Testprojekt nicht deployen, warum auch immer. Komisch ist aber dann, dass ich das WAR-File ohne Probleme auf meinem Tomcat über den Manager deployen kann und da sind auch alle JARS, etc. vorhanden.

Viele Grüße,
Martin


----------



## mad-din (5. Nov 2007)

HLX hat gesagt.:
			
		

> 1. Fehler: Kein URL-Mapping zum FacesServlet. Das FacesServlet muss für JSF zuerst initialisiert werden.



URL-Mapping ist doch vorhanden oder übersehe ich was? In der web.xml steht doch 

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-mapping>*.faces</url-mapping>
</servlet-mapping>

Und davor ist das Servlet selbst definiert. Das Problem ist ja, dass es nicht nur nicht mit eclipse, sondern auch nicht mit anderen Tomcats funktioniert. 

Viele Grüße
Martin


----------



## HLX (5. Nov 2007)

mad-din hat gesagt.:
			
		

> URL-Mapping ist doch vorhanden oder übersehe ich was? In der web.xml steht doch
> 
> <servlet-mapping>
> <servlet-name>Faces Servlet</servlet-name>
> ...



Mapping ist zwar vorhanden, jedoch taucht in der URL "http://localhost:8181/jsftest/" kein ".faces" auf.


----------



## mad-din (5. Nov 2007)

Ach so,

http://localhost:8181/jsftest/index.faces bringt die gleichen Meldungen. Ich denke, dass es aber eher ein Tomcat-Problem ist. Was mich nur wundert ist, dass es selbst als Webarchiv nicht funktioniert. 

Viele Grüße
Martin


----------



## mad-din (5. Nov 2007)

Hi!

Es scheint wirklich irgendein Tomcat-Konflikt zu sein. Ich habe bei mir aufm Rechner noch den Sun Java Systems Application Server laufen, dazu hab ich mir eben das Plugin für eclipse geholt und diesen Server eingetragen. Darüber funktioniert es problemlos. Ich denke, dass mein lokaler Tomcat irgendein Problem hat...

Viele Grüße
Martin


----------

