Hi I just got bitten by this commit because the exception is swallowed when invoking a non existing method.
} catch (Exception e) { LOG.info("Problem setting " + method, e); } IMHO this kind of habit is bad practice. A severe issue like this should not just be ignored. On Fri, Apr 27, 2012 at 9:02 PM, <dk...@apache.org> wrote: > Author: dkulp > Date: Fri Apr 27 19:02:33 2012 > New Revision: 1331542 > > URL: http://svn.apache.org/viewvc?rev=1331542&view=rev > Log: > [CAMEL-5016, CAMEL-5228, CAMEL-5227] Update Jetty to use reflection > where needed to allow it to run with Jetty 7.5, 7.6, and 8.1. > Update OSGi version range to match. > > Modified: > > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelFilterWrapper.java > > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java > camel/trunk/parent/pom.xml > > Modified: > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelFilterWrapper.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelFilterWrapper.java?rev=1331542&r1=1331541&r2=1331542&view=diff > ============================================================================== > --- > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelFilterWrapper.java > (original) > +++ > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelFilterWrapper.java > Fri Apr 27 19:02:33 2012 > @@ -16,6 +16,7 @@ > */ > package org.apache.camel.component.jetty; > > +import java.io.File; > import java.io.IOException; > > import javax.servlet.Filter; > @@ -51,6 +52,20 @@ public class CamelFilterWrapper implemen > } > > public void init(FilterConfig config) throws ServletException { > + Object o = > config.getServletContext().getAttribute("javax.servlet.context.tempdir"); > + if (o == null) { > + //when run in embedded mode, Jetty 8 will forget to set this > property, > + //but the MultiPartFilter requires it (will NPE if not set) so > we'll > + //go ahead and set it to the default tmp dir on the system. > + try { > + File file = File.createTempFile("camel", ""); > + file.delete(); > + > config.getServletContext().setAttribute("javax.servlet.context.tempdir", > + > file.getParentFile()); > + } catch (IOException e) { > + //ignore > + } > + } > wrapped.init(config); > } > > > Modified: > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=1331542&r1=1331541&r2=1331542&view=diff > ============================================================================== > --- > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java > (original) > +++ > camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java > Fri Apr 27 19:02:33 2012 > @@ -17,6 +17,7 @@ > package org.apache.camel.component.jetty; > > import java.io.File; > +import java.lang.reflect.Constructor; > import java.lang.reflect.InvocationTargetException; > import java.lang.reflect.Method; > import java.net.URI; > @@ -368,11 +369,15 @@ public class JettyHttpComponent extends > if (endpoint.isMatchOnUriPrefix()) { > pathSpec = pathSpec.endsWith("/") ? pathSpec + "*" : pathSpec > + "/*"; > } > - context.addFilter(filterHolder, pathSpec, 0); > + addFilter(context, filterHolder, pathSpec); > } > > } > > + private void addFilter(ServletContextHandler context, FilterHolder > filterHolder, String pathSpec) { > + context.getServletHandler().addFilterWithMapping(filterHolder, > pathSpec, 0); > + } > + > private void enableMultipartFilter(HttpEndpoint endpoint, Server server, > String connectorKey) throws Exception { > ServletContextHandler context = > server.getChildHandlerByClass(ServletContextHandler.class); > CamelContext camelContext = this.getCamelContext(); > @@ -401,7 +406,7 @@ public class JettyHttpComponent extends > if (endpoint.isMatchOnUriPrefix()) { > pathSpec = pathSpec.endsWith("/") ? pathSpec + "*" : pathSpec + > "/*"; > } > - context.addFilter(filterHolder, pathSpec, 0); > + addFilter(context, filterHolder, pathSpec); > LOG.debug("using multipart filter implementation " + > filter.getClass().getName() + " for path " + pathSpec); > } > > @@ -487,12 +492,7 @@ public class JettyHttpComponent extends > > if (endpointSslContextParameters != null) { > SslContextFactory contextFact = new SslContextFactory() { > - /** > - * We are going to provide the context so none of the > configuration options > - * matter in the factory. This method does not account for > this scenario so > - * we short-circuit it here to just let things go when the > context is already > - * provided. > - */ > + > // This method is for Jetty 7.0.x ~ 7.4.x > @SuppressWarnings("unused") > public boolean checkConfig() { > @@ -509,7 +509,12 @@ public class JettyHttpComponent extends > > }; > > contextFact.setSslContext(endpointSslContextParameters.createSSLContext()); > - answer = new SslSelectChannelConnector(contextFact); > + for (Constructor<?> c : > SslSelectChannelConnector.class.getConstructors()) { > + if (c.getParameterTypes().length == 1 > + && c.getParameterTypes()[0].isInstance(contextFact)) { > + answer = > (SslSelectChannelConnector)c.newInstance(contextFact); > + } > + } > } else { > answer = new SslSelectChannelConnector(); > // with default null values, jetty ssl system properties > @@ -517,23 +522,23 @@ public class JettyHttpComponent extends > > String keystoreProperty = System.getProperty(JETTY_SSL_KEYSTORE); > if (keystoreProperty != null) { > - > answer.getSslContextFactory().setKeyStorePath(keystoreProperty); > + setKeyStorePath(answer, keystoreProperty); > } else if (sslKeystore != null) { > - answer.getSslContextFactory().setKeyStorePath(sslKeystore); > + setKeyStorePath(answer, sslKeystore); > } > > String keystorePassword = > System.getProperty(JETTY_SSL_KEYPASSWORD); > if (keystorePassword != null) { > - > answer.getSslContextFactory().setKeyManagerPassword(keystorePassword); > + setKeyManagerPassword(answer, keystorePassword); > } else if (sslKeyPassword != null) { > - > answer.getSslContextFactory().setKeyManagerPassword(sslKeyPassword); > + setKeyManagerPassword(answer, sslKeyPassword); > } > > String password = System.getProperty(JETTY_SSL_PASSWORD); > if (password != null) { > - answer.getSslContextFactory().setKeyStorePassword(password); > + setKeyStorePassword(answer, password); > } else if (sslPassword != null) { > - > answer.getSslContextFactory().setKeyStorePassword(sslPassword); > + setKeyStorePassword(answer, sslPassword); > } > } > > @@ -558,9 +563,30 @@ public class JettyHttpComponent extends > return answer; > } > > - protected boolean checkSSLContextFactoryConfig(SslContextFactory > instance) { > + private void invokeSslContextFactoryMethod(Object connector, String > method, String value) { > + try { > + Object factory = > connector.getClass().getMethod("getSslContextFactory").invoke(connector); > + factory.getClass().getMethod(method, > String.class).invoke(factory, value); > + } catch (Exception e) { > + LOG.info("Problem setting " + method, e); > + } > + } > + > + private void setKeyStorePassword(SslSelectChannelConnector answer, > String password) { > + invokeSslContextFactoryMethod(answer, "setKeyStorePassword", > password); > + } > + > + private void setKeyManagerPassword(SslSelectChannelConnector answer, > String keystorePassword) { > + invokeSslContextFactoryMethod(answer, "setKeyManagerPassword", > keystorePassword); > + } > + > + private void setKeyStorePath(SslSelectChannelConnector answer, String > keystoreProperty) { > + invokeSslContextFactoryMethod(answer, "setKeyStorePath", > keystoreProperty); > + } > + > + protected boolean checkSSLContextFactoryConfig(Object instance) { > try { > - Method method = SslContextFactory.class.getMethod("checkConfig"); > + Method method = instance.getClass().getMethod("checkConfig"); > return (Boolean)method.invoke(instance); > } catch (NoSuchMethodException ex) { > // ignore > > Modified: camel/trunk/parent/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/parent/pom.xml?rev=1331542&r1=1331541&r2=1331542&view=diff > ============================================================================== > --- camel/trunk/parent/pom.xml (original) > +++ camel/trunk/parent/pom.xml Fri Apr 27 19:02:33 2012 > @@ -202,7 +202,7 @@ > org.apache.commons.httpclient.*;version="[3.1,4.0)", > org.apache.velocity.*;version="[1.6.2,2)", > org.apache.xmlbeans.*;version="[2.4,3)", > - org.eclipse.jetty.*;version="[7.0,8)", > + org.eclipse.jetty.*;version="[7.4,8.2)", > com.thoughtworks.xstream.*;version="[1.3,2)", > org.antlr.stringtemplate.*;version="[3.0,4)", > org.jivesoftware.smack.*;version="[3.0,4)", > > -- Claus Ibsen ----------------- CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/