On Thu, May 3, 2012 at 10:13 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> 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.
>

Okay I digged a bit more. Jetty is of course a bit API unstable.
So if you use older releases than the 7.5.4, then that code breaks and
causes an exception that is swalled.
And you end up running without the keystore you configured, causing
unwanted side effects, or worse it
defaults to another keystore etc. Which in my case was a .keystore in
the home dir.

I will improved this by not swalling the exception and thrown a more
descriptive error message.

>
>
> 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/



-- 
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