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