You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2022/02/16 20:35:36 UTC

[cxf] branch 3.4.x-fixes updated (82a4e41 -> a34c810)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a change to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git.


    from 82a4e41  Fixing post-merge issues
     new 1061676  CXF-8657: Headers are copied as case sensitive in MessageContextImpl (#907)
     new a34c810  Recording .gitmergeinfo Changes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitmergeinfo                                      |  1 +
 .../apache/cxf/jaxrs/ext/MessageContextImpl.java   |  2 +-
 .../cxf/jaxrs/ext/MessageContextImplTest.java      | 54 ++++++++++++++++++++++
 3 files changed, 56 insertions(+), 1 deletion(-)

[cxf] 02/02: Recording .gitmergeinfo Changes

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit a34c8104ed889ffdf781024db35c461ad55a23cc
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Wed Feb 16 15:03:08 2022 -0500

    Recording .gitmergeinfo Changes
---
 .gitmergeinfo | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitmergeinfo b/.gitmergeinfo
index dc6646d..b8d1e82 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -120,6 +120,7 @@ B fe058a4c83590e7a768e5be32c94622cbe1a3b6b
 M 0099eed503ce519c7514ac63b67758882f00e14f
 M 011debd91b16215245e039309e620699042a9f4b
 M 0320ad320ba88a123a5296a8060d3ac1794009f6
+M 049ed3c49a05f9997111afd66ba583dc2b4630f2
 M 0903bdd2f5f91de71425dedde8c5d7fbf44d297f
 M 0c609dc1e242e4156ad55e10fa0699636da02ee9
 M 0dad051a0f126b1e365f83dfe1e4647a36e163f9

[cxf] 01/02: CXF-8657: Headers are copied as case sensitive in MessageContextImpl (#907)

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 1061676c9b81461d82ce890b0178fa9f9432de05
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Wed Feb 16 10:26:19 2022 -0500

    CXF-8657: Headers are copied as case sensitive in MessageContextImpl (#907)
    
    (cherry picked from commit b03bfd13355a2058ea7b072f73558360fab12101)
    (cherry picked from commit 599ce5123b5c8d3284c38461c10845a171500005)
---
 .../apache/cxf/jaxrs/ext/MessageContextImpl.java   |  2 +-
 .../cxf/jaxrs/ext/MessageContextImplTest.java      | 54 ++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
index f421ca7..d2bdbd80 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
@@ -218,7 +218,7 @@ public class MessageContextImpl implements MessageContext {
         Attachment root = (Attachment)handlers.get(0);
 
         String rootContentType = root.getContentType().toString();
-        MultivaluedMap<String, String> rootHeaders = new MetadataMap<>(root.getHeaders());
+        MultivaluedMap<String, String> rootHeaders = new MetadataMap<>(root.getHeaders(), true, false, true);
         if (!AttachmentUtil.isMtomEnabled(outMessage)) {
             rootHeaders.putSingle(Message.CONTENT_TYPE, rootContentType);
         }
diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java
index ca73512..4a6c67f 100644
--- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java
+++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/ext/MessageContextImplTest.java
@@ -19,12 +19,20 @@
 
 package org.apache.cxf.jaxrs.ext;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Collections;
+import java.util.UUID;
+
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
@@ -32,7 +40,10 @@ import javax.ws.rs.ext.ContextResolver;
 import javax.ws.rs.ext.Providers;
 import javax.xml.bind.JAXBContext;
 
+import org.apache.cxf.binding.Binding;
 import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
 import org.apache.cxf.jaxrs.impl.HttpHeadersImpl;
 import org.apache.cxf.jaxrs.impl.HttpServletRequestFilter;
 import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter;
@@ -46,15 +57,20 @@ import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.phase.PhaseInterceptorChain;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
 
+import org.easymock.Capture;
 import org.easymock.EasyMock;
+import org.easymock.IAnswer;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
 
 public class MessageContextImplTest {
 
@@ -197,6 +213,42 @@ public class MessageContextImplTest {
         MessageContext mc = new MessageContextImpl(createMessage());
         assertNull(mc.getContext(Message.class));
     }
+    
+    @Test
+    public void testAttachments() throws IOException {
+        final Message in = createMessage();
+        final MessageContext mc = new MessageContextImpl(in);
+        
+        try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+            final Message out = new MessageImpl();
+            out.put(Message.CONTENT_TYPE, "image/png");
+            out.setContent(OutputStream.class, output);
+            out.setInterceptorChain(new PhaseInterceptorChain(Collections.emptySortedSet()));
+            in.getExchange().setOutMessage(out);
+            
+            final Binding binding = in.getExchange().getEndpoint().getBinding();
+            final Capture<Message> capture = Capture.newInstance();
+            EasyMock.expect(binding.createMessage(EasyMock.capture(capture)))
+                .andAnswer(
+                    new IAnswer<Message>() {
+                        @Override
+                        public Message answer() throws Throwable {
+                            return capture.getValue();
+                        }
+                    }
+                ).anyTimes();
+    
+            final String id = UUID.randomUUID().toString();
+            final MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();
+            // Headers should be case-insensitive
+            headers.add("Content-Id", id);
+            mc.put(MultipartBody.OUTBOUND_MESSAGE_ATTACHMENTS, 
+                Collections.singletonList(new Attachment(headers, new byte[0])));
+
+            output.flush();
+            assertThat(new String(output.toByteArray()), containsString("Content-ID: <" + id + ">"));
+        }
+    }
 
     private Message createMessage() {
         ProviderFactory factory = ServerProviderFactory.getInstance();
@@ -205,12 +257,14 @@ public class MessageContextImplTest {
         Exchange e = new ExchangeImpl();
         m.setExchange(e);
         e.setInMessage(m);
+        Binding binding = EasyMock.mock(Binding.class);
         Endpoint endpoint = EasyMock.mock(Endpoint.class);
         EasyMock.expect(endpoint.getEndpointInfo()).andReturn(null).anyTimes();
         EasyMock.expect(endpoint.get(Application.class.getName())).andReturn(null);
         EasyMock.expect(endpoint.size()).andReturn(0).anyTimes();
         EasyMock.expect(endpoint.isEmpty()).andReturn(true).anyTimes();
         EasyMock.expect(endpoint.get(ServerProviderFactory.class.getName())).andReturn(factory).anyTimes();
+        EasyMock.expect(endpoint.getBinding()).andReturn(binding).anyTimes();
         EasyMock.replay(endpoint);
         e.put(Endpoint.class, endpoint);
         return m;