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)",


Reply via email to