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, <[email protected]> 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: [email protected]
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/