I don't we'll release 2.23.5

Il mer 23 ott 2019, 17:56 <[email protected]> ha scritto:

> This is an automated email from the ASF dual-hosted git repository.
>
> ffang pushed a commit to branch camel-2.23.x
> in repository https://gitbox.apache.org/repos/asf/camel.git
>
>
> The following commit(s) were added to refs/heads/camel-2.23.x by this push:
>      new 9f91d2c  [CAMEL-14105]avoid using deprecated
> org.eclipse.jetty.util.MultiPartInputStreamParser
> 9f91d2c is described below
>
> commit 9f91d2cc6dbae55af7193e1beeba0a146ea13368
> Author: Freeman Fang <[email protected]>
> AuthorDate: Wed Oct 23 11:36:40 2019 -0400
>
>     [CAMEL-14105]avoid using deprecated
> org.eclipse.jetty.util.MultiPartInputStreamParser
>
>     (cherry picked from commit b71cf87b0d29db8d3ba265f443555e410456d27a)
>     (cherry picked from commit 57e95a1b3aa742f64567a6618fba1b72bb32295d)
> ---
>  .../camel/component/jetty/JettyHttpComponent.java  | 14 ++++-
>  .../camel/component/jetty/JettyHttpEndpoint.java   |  4 +-
>  .../camel/component/jetty/MultiPartFilter.java     | 66
> ++++++++++++++++++++++
>  .../src/main/docs/jetty-component.adoc             |  2 +-
>  .../component/jetty9/AttachmentHttpBinding.java    | 18 ++++--
>  .../jetty/MultiPartFormWithCustomFilterTest.java   |  2 +-
>  6 files changed, 96 insertions(+), 10 deletions(-)
>
> diff --git
> a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
> index 0f47261..5f79c23 100644
> ---
> a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
> +++
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
> @@ -32,6 +32,7 @@ import java.util.Locale;
>  import java.util.Map;
>  import javax.management.MBeanServer;
>  import javax.servlet.Filter;
> +import javax.servlet.MultipartConfigElement;
>  import javax.servlet.RequestDispatcher;
>  import javax.servlet.http.HttpServletRequest;
>  import javax.servlet.http.HttpServletResponse;
> @@ -78,6 +79,8 @@ import org.eclipse.jetty.jmx.MBeanContainer;
>  import org.eclipse.jetty.server.AbstractConnector;
>  import org.eclipse.jetty.server.Connector;
>  import org.eclipse.jetty.server.Handler;
> +import org.eclipse.jetty.server.HttpConnectionFactory;
> +import org.eclipse.jetty.server.MultiPartFormDataCompliance;
>  import org.eclipse.jetty.server.Request;
>  import org.eclipse.jetty.server.Response;
>  import org.eclipse.jetty.server.Server;
> @@ -90,7 +93,6 @@ import org.eclipse.jetty.servlet.FilterHolder;
>  import org.eclipse.jetty.servlet.ServletContextHandler;
>  import org.eclipse.jetty.servlet.ServletHolder;
>  import org.eclipse.jetty.servlets.CrossOriginFilter;
> -import org.eclipse.jetty.servlets.MultiPartFilter;
>  import org.eclipse.jetty.util.component.Container;
>  import org.eclipse.jetty.util.ssl.SslContextFactory;
>  import org.eclipse.jetty.util.thread.QueuedThreadPool;
> @@ -1344,9 +1346,19 @@ public abstract class JettyHttpComponent extends
> HttpCommonComponent implements
>          holder.setAsyncSupported(true);
>          holder.setInitParameter(CamelServlet.ASYNC_PARAM,
> Boolean.toString(endpoint.isAsync()));
>          context.addServlet(holder, "/*");
> +
> +        File file = File.createTempFile("camel", "");
> +        file.delete();
> +
> +        //must register the MultipartConfig to make jetty server
> multipart aware
> +        holder.getRegistration().setMultipartConfig(new
> MultipartConfigElement(file.getParentFile().getAbsolutePath(), -1, -1, 0));
>
>          // use rest enabled resolver in case we use rest
>          camelServlet.setServletResolveConsumerStrategy(new
> HttpRestServletResolveConsumerStrategy());
> +
> +        //must make RFC7578 as default to avoid using the deprecated
> MultiPartInputStreamParser
> +
> connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration()
> +
>  .setMultiPartFormDataCompliance(MultiPartFormDataCompliance.RFC7578);
>
>          return camelServlet;
>      }
> diff --git
> a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
> index ac2a460..68344bb 100644
> ---
> a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
> +++
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
> @@ -64,7 +64,7 @@ public abstract class JettyHttpEndpoint extends
> HttpCommonEndpoint {
>      @UriParam(label = "consumer",
>              description = "If this option is true, Jetty JMX support will
> be enabled for this endpoint. See Jetty JMX support for more details.")
>      private boolean enableJmx;
> -    @UriParam(description = "Whether Jetty
> org.eclipse.jetty.servlets.MultiPartFilter is enabled or not."
> +    @UriParam(description = "Whether
> org.apache.camel.component.jetty.MultiPartFilter is enabled or not."
>              + " You should set this value to false when bridging
> endpoints, to ensure multipart requests is proxied/bridged as well.")
>      private boolean enableMultipartFilter;
>      @UriParam(label = "consumer", defaultValue = "true",
> @@ -297,7 +297,7 @@ public abstract class JettyHttpEndpoint extends
> HttpCommonEndpoint {
>      }
>
>      /**
> -     * Whether Jetty org.eclipse.jetty.servlets.MultiPartFilter is
> enabled or not.
> +     * Whether org.apache.camel.component.jetty.MultiPartFilter is
> enabled or not.
>       * You should set this value to false when bridging endpoints, to
> ensure multipart requests is proxied/bridged as well.
>       */
>      public void setEnableMultipartFilter(boolean enableMultipartFilter) {
> diff --git
> a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
> new file mode 100644
> index 0000000..87f141d
> --- /dev/null
> +++
> b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
> @@ -0,0 +1,66 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +package org.apache.camel.component.jetty;
> +
> +import java.io.IOException;
> +
> +import javax.servlet.Filter;
> +import javax.servlet.FilterChain;
> +import javax.servlet.FilterConfig;
> +import javax.servlet.ServletException;
> +import javax.servlet.ServletRequest;
> +import javax.servlet.ServletResponse;
> +import javax.servlet.http.HttpServletRequest;
> +
> +
> +/**
> + * To enable handle attachments with Jetty 9 when this filter is set.
> + * <p/>
> + * To replace the deprecated org.eclipse.jetty.servlets.MultiPartFilter
> + * Tell AttachmentHttpBinding to use Servlet 3
> HttpServletRequest.getParts API
> + */
> +public class MultiPartFilter implements Filter {
> +
> +    public static final String MULTIPART = "populate.multipart";
> +
> +    @Override
> +    public void init(FilterConfig filterConfig) throws ServletException {
> +
> +    }
> +
> +    @Override
> +    public void doFilter(ServletRequest request, ServletResponse
> response, FilterChain chain)
> +        throws IOException, ServletException {
> +        HttpServletRequest srequest = (HttpServletRequest)request;
> +        if (srequest.getContentType() == null ||
> !srequest.getContentType().startsWith("multipart/form-data")) {
> +            chain.doFilter(request, response);
> +        } else {
> +            srequest.getParts(); //load and init attachments
> +            request.setAttribute(MULTIPART, Boolean.TRUE);
> +            chain.doFilter(request, response);
> +        }
> +    }
> +
> +    @Override
> +    public void destroy() {
> +
> +    }
> +
> +
> +
> +}
> diff --git a/components/camel-jetty9/src/main/docs/jetty-component.adoc
> b/components/camel-jetty9/src/main/docs/jetty-component.adoc
> index 0c313f7..a404909 100644
> --- a/components/camel-jetty9/src/main/docs/jetty-component.adoc
> +++ b/components/camel-jetty9/src/main/docs/jetty-component.adoc
> @@ -131,7 +131,7 @@ with the following path and query parameters:
>  | Name | Description | Default | Type
>  | *chunked* (common) | If this option is false the Servlet will disable
> the HTTP streaming and set the content-length header on the response | true
> | boolean
>  | *disableStreamCache* (common) | Determines whether or not the raw input
> stream from Servlet is cached or not (Camel will read the stream into a in
> memory/overflow to file, Stream caching) cache. By default Camel will cache
> the Servlet input stream to support reading it multiple times to ensure it
> Camel can retrieve all data from the stream. However you can set this
> option to true when you for example need to access the raw stream, such as
> streaming it directly to a file or other persis [...]
> -| *enableMultipartFilter* (common) | Whether Jetty
> org.eclipse.jetty.servlets.MultiPartFilter is enabled or not. You should
> set this value to false when bridging endpoints, to ensure multipart
> requests is proxied/bridged as well. | false | boolean
> +| *enableMultipartFilter* (common) | Whether
> org.apache.camel.component.jetty.MultiPartFilter is enabled or not. You
> should set this value to false when bridging endpoints, to ensure multipart
> requests is proxied/bridged as well. | false | boolean
>  | *headerFilterStrategy* (common) | To use a custom HeaderFilterStrategy
> to filter header to and from Camel message. |  | HeaderFilterStrategy
>  | *transferException* (common) | If enabled and an Exchange failed
> processing on the consumer side, and if the caused Exception was send back
> serialized in the response as a application/x-java-serialized-object
> content type. On the producer side the exception will be deserialized and
> thrown as is, instead of the HttpOperationFailedException. The caused
> exception is required to be serialized. This is by default turned off. If
> you enable this then be aware that Java will deserialize the in [...]
>  | *httpBinding* (common) | To use a custom HttpBinding to control the
> mapping between Camel message and HttpClient. |  | HttpBinding
> diff --git
> a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
> b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
> index b72f0c6..10a654b 100644
> ---
> a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
> +++
> b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
> @@ -31,11 +31,11 @@ import javax.servlet.http.Part;
>  import org.apache.camel.Attachment;
>  import org.apache.camel.Exchange;
>  import org.apache.camel.RuntimeCamelException;
> +import org.apache.camel.component.jetty.MultiPartFilter;
>  import org.apache.camel.http.common.DefaultHttpBinding;
>  import org.apache.camel.http.common.HttpHelper;
>  import org.apache.camel.http.common.HttpMessage;
>  import org.apache.camel.impl.DefaultAttachment;
> -import org.eclipse.jetty.util.MultiPartInputStreamParser;
>  import org.slf4j.Logger;
>  import org.slf4j.LoggerFactory;
>
> @@ -52,12 +52,11 @@ final class AttachmentHttpBinding extends
> DefaultHttpBinding {
>
>      @Override
>      protected void populateAttachments(HttpServletRequest request,
> HttpMessage message) {
> -        Object object =
> request.getAttribute("org.eclipse.jetty.servlet.MultiPartFile.multiPartInputStream");
> -        if (object instanceof MultiPartInputStreamParser) {
> -            MultiPartInputStreamParser parser =
> (MultiPartInputStreamParser)object;
> +        Boolean object =
> (Boolean)request.getAttribute(MultiPartFilter.MULTIPART);
> +        if (object != null && object) {
>              Collection<Part> parts;
>              try {
> -                parts = parser.getParts();
> +                parts = request.getParts();
>                  for (Part part : parts) {
>                      DataSource ds = new PartDataSource(part);
>                      Attachment attachment = new DefaultAttachment(ds);
> @@ -67,6 +66,15 @@ final class AttachmentHttpBinding extends
> DefaultHttpBinding {
>                          }
>                      }
>                      message.addAttachmentObject(part.getName(),
> attachment);
> +                    String name = part.getSubmittedFileName();
> +                    Object value = message.getAttachment(name);
> +                    Map<String, Object> headers = message.getHeaders();
> +                    if (getHeaderFilterStrategy() != null
> +                        &&
> !getHeaderFilterStrategy().applyFilterToExternalHeaders(name, value,
> message.getExchange())
> +                        && name != null) {
> +                        HttpHelper.appendHeader(headers, name, value);
> +                    }
> +
>                  }
>              } catch (Exception e) {
>                  throw new RuntimeCamelException("Cannot populate
> attachments", e);
> diff --git
> a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
> b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
> index aeae20a..bb11f4b 100644
> ---
> a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
> +++
> b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
> @@ -37,7 +37,7 @@ import
> org.apache.commons.httpclient.methods.multipart.FilePart;
>  import
> org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
>  import org.apache.commons.httpclient.methods.multipart.Part;
>  import org.apache.commons.httpclient.methods.multipart.StringPart;
> -import org.eclipse.jetty.servlets.MultiPartFilter;
> +
>  import org.junit.Test;
>
>  public class MultiPartFormWithCustomFilterTest extends BaseJettyTest {
>
>

Reply via email to