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/

Reply via email to