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

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

commit a4b83d0509815c555733e98c427a70ef562173a1
Author: andreibastun <[email protected]>
AuthorDate: Tue May 6 23:57:19 2025 +0200

    [CXF-9134] Do not wrap Attachment into another Attachment (#2392)
    
    (cherry picked from commit 2b1e467c704a03b7fd2ec70d9d68a0b17d880377)
    (cherry picked from commit be34f66e9b29e37fbf05b4cf5ec6a73332b32e5e)
---
 .../java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java   |  6 +++++-
 .../org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java    | 13 +++++++++++++
 .../java/org/apache/cxf/systest/jaxrs/MultipartStore.java   | 11 +++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
index f03ff45b0f..aea834b51d 100644
--- 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
+++ 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
@@ -802,7 +802,11 @@ public class ClientProxyImpl extends AbstractClient 
implements
             if (part != null) {
                 Object partObject = params[p.getIndex()];
                 if (partObject != null) {
-                    atts.add(new Attachment(part.value(), part.type(), 
partObject));
+                    if (partObject instanceof Attachment) {
+                        atts.add((Attachment)partObject);
+                    } else {
+                        atts.add(new Attachment(part.value(), part.type(), 
partObject));
+                    }
                 }
             }
         });
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
index b3b3a6f451..444e6137fc 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
@@ -508,6 +508,19 @@ public class JAXRSMultipartTest extends 
AbstractBusClientServerTestBase {
         assertEquals("CXF in Action - 2", b.getName());
     }
 
+    @Test
+    public void attachmentIsNotWrappedIntoAnotherAttachment() throws Exception 
{
+        MultipartStore store =
+                JAXRSClientFactory.create("http://localhost:"; + PORT, 
MultipartStore.class);
+
+        Attachment attachment =
+                new Attachment("audio", MediaType.APPLICATION_OCTET_STREAM, 
new byte[]{42});
+
+        Book b = store.addAudioBook(new Book("CXF in Action", 125L), 
attachment);
+        assertEquals(125L, b.getId());
+        assertEquals("CXF in Action - 42", b.getName());
+    }
+
     @Test
     public void testNullPartProxy() throws Exception {
         MultipartStore store =
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
index 03c03019ae..1b73fa7fa7 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
@@ -469,6 +469,17 @@ public class MultipartStore {
         return addBookJaxbJson(b1, b2);
     }
 
+    @POST
+    @Path("/books/audiofiles")
+    @Consumes("multipart/related")
+    @Produces("text/xml")
+    public Book addAudioBook(
+            @Multipart(value = "book", type = "application/json") Book book,
+            @Multipart(value = "audio") Attachment audioFile) throws Exception 
{
+        String payload = 
String.valueOf(audioFile.getDataHandler().getContent().toString().getBytes()[0]);
+        return new Book(book.getName() + " - " + payload, book.getId());
+    }
+
     @POST
     @Path("/books/jaxbandsimpleparts")
     @Consumes("multipart/related")

Reply via email to