Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 343996

Summary: ProxyServlet$Transparent not accessible
Product: [RT] Jetty Reporter: jereid
Component: clientAssignee: Greg Wilkins <gregw>
Status: RESOLVED WORKSFORME QA Contact:
Severity: normal    
Priority: P3 CC: gregw, jetty-inbox
Version: unspecified   
Target Milestone: 7.2.x   
Hardware: PC   
OS: Linux   
Whiteboard:

Description jereid CLA 2011-04-27 13:10:58 EDT
Build Identifier: 7.3.0.v20110203

Attempting to configure a transparent proxy as follows:

  <servlet>
    <servlet-name>GoogleProxy</servlet-name>
    <servlet-class>org.eclipse.jetty.servlets.ProxyServlet$Transparent</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
      <param-name>ProxyTo</param-name>
      <param-value>http://google.com</param-value>
    </init-param>
    <init-param>
      <param-name>Prefix</param-name>
      <param-value>/folders</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>GoogleProxy</servlet-name>
    <url-pattern>/folders/*</url-pattern>
  </servlet-mapping>


YIELDS:

2011-04-27 10:57:16.863:WARN::FAILED o.e.j.w.WebAppContext{/car,file:/home/sdenovan/src/bci/icms/icms_jetty/web/}: java.lang.NoClassDefFoundError: org/eclipse/jetty/client/HttpExchange
2011-04-27 10:57:16.863:WARN::Unable to reach node goal: started
java.lang.NoClassDefFoundError: org/eclipse/jetty/client/HttpExchange
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
	at java.lang.Class.getConstructor0(Class.java:2699)
	at java.lang.Class.newInstance0(Class.java:326)
	at java.lang.Class.newInstance(Class.java:308)
	at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:606)
	at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:744)
	at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:422)
	at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:260)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:763)
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:245)
	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1158)
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:588)
	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:436)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
	at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:180)
	at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:479)
	at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:136)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:137)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:50)
	at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:477)
	at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:389)
	at org.eclipse.jetty.util.Scanner.scan(Scanner.java:339)
	at org.eclipse.jetty.util.Scanner.start(Scanner.java:275)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:114)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:540)
	at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:219)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:42)
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:52)
	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:96)
	at org.eclipse.jetty.server.Server.doStart(Server.java:258)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1068)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:993)
	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.eclipse.jetty.start.Main.invokeMain(Main.java:477)
	at org.eclipse.jetty.start.Main.start(Main.java:623)
	at org.eclipse.jetty.start.Main.parseCommandLine(Main.java:273)
	at org.eclipse.jetty.start.Main.main(Main.java:81)
Caused by: 
java.lang.ClassNotFoundException: org.eclipse.jetty.client.HttpExchange
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
	at java.lang.Class.getConstructor0(Class.java:2699)
	at java.lang.Class.newInstance0(Class.java:326)
	at java.lang.Class.newInstance(Class.java:308)
	at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:606)
	at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:744)
	at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:422)
	at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:260)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:763)
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:245)
	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1158)
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:588)
	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:436)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
	at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:180)
	at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:479)
	at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:136)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:137)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:50)
	at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:477)
	at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:389)
	at org.eclipse.jetty.util.Scanner.scan(Scanner.java:339)
	at org.eclipse.jetty.util.Scanner.start(Scanner.java:275)
	at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:114)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:540)
	at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:219)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:42)
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:52)
	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:96)
	at org.eclipse.jetty.server.Server.doStart(Server.java:258)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
	at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1068)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:993)
	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.eclipse.jetty.start.Main.invokeMain(Main.java:477)
	at org.eclipse.jetty.start.Main.start(Main.java:623)
	at org.eclipse.jetty.start.Main.parseCommandLine(Main.java:273)
	at org.eclipse.jetty.start.Main.main(Main.java:81)


Reproducible: Always
Comment 1 jereid CLA 2011-04-27 13:16:31 EDT
Copying jetty-client-7.3.0.v20110203.jar to WEB-INF/lib (Jetty IRC suggestion) doesn't resolve the issue -- same error.
Comment 2 Greg Wilkins CLA 2011-05-11 23:04:04 EDT
The Jetty test webapp has this servlet OK, so it is probably best to model your webapp on that.

You need to make sure that all the dependent jars are available:

[INFO] org.eclipse.jetty:jetty-client:jar:7.4.1-SNAPSHOT
[INFO] +- org.eclipse.jetty:jetty-http:jar:7.4.1-SNAPSHOT:compile
[INFO] |  \- org.eclipse.jetty:jetty-io:jar:7.4.1-SNAPSHOT:compile
[INFO] |     \- org.eclipse.jetty:jetty-util:jar:7.4.1-SNAPSHOT:compile


you can put these in WEB-INF/lib
or you can add client to the start.ini OPTIONS and update the contexts classloader configuration so those classes are visible.


Either way, closing this as it is not a bug - rather a request for support. So please follow up on jetty mailing lists.