[
https://issues.apache.org/jira/browse/CXF-5832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14050672#comment-14050672
]
Daniel Kulp commented on CXF-5832:
----------------------------------
I'm really not expecting this to work. The OUTBOUND_MESSAGE_ATTACHMENTS is
really a temporary wrapper around the internal List<Attachment> that is only
valid for the scope of the invoke method. Once that returns, it's removed.
HOWEVER, if you do something like:
{code:java}
//force the runtime to create the response message
context.get(OUTBOUND_MESSAGE_ATTACHMENTS);
//Get the outbound message created above
Message m =
PhaseInterceptorChain.getCurrentMessage().getExchange().getOutMessage();
//get or create the List<Attachments>
List<Attachment> attachments = (List)m.get(Message.ATTACHMENTS);
if (attachments == null) {
attachments = new ArrayList<Attachment>();
m.put(Message.ATTACHMENTS, attachments)
}
marshaller.setAttachmentMarshaller(new
org.apache.cxf.jaxb.attachment.JAXBAttachmentMarshaller(attachments,
threshold));
return new JAXBSource(marshaller, obj);
{code}
then I believe it would work as it would use the same internal structures we
use and would survive outside the scope of the invoke method.
> JAX-WS Provider returning JAXBSource with attachment
> ----------------------------------------------------
>
> Key: CXF-5832
> URL: https://issues.apache.org/jira/browse/CXF-5832
> Project: CXF
> Issue Type: Improvement
> Components: Bus, Core, JAX-WS Runtime
> Affects Versions: 3.0.0
> Reporter: Zsolt Szloboda
> Priority: Minor
>
> I am trying to return a JAXBSource payload from a JAX-WS Provider;
> the JAXBSource's Marshaller has a custom AttachmentMarshaller
> that puts the attachments into the MessageContext's
> OUTBOUND_MESSAGE_ATTACHMENTS Map
> the problem is that the attachments are not included in the response
> multipart SOAP message
> however, if I transform the same JAXBSource result payload
> into a DOMSource, and return this DOMSource from the Provider#invoke()
> method,
> then the attachments are included in the response multipart SOAP message!
> I think the problem is that
> when I return the JAXBSource
> the attachments are added "too late"
> (when the JAXBSource is processed by the CXF runtime, outside of the
> Provider#invoke() method)
> to the MessageContext
> am I right, if I think that this means
> that CXF currently does not support
> JAXBSource payload results *with attachments*?
> which means that we have to build an unnecessary DOM tree in these cases...
--
This message was sent by Atlassian JIRA
(v6.2#6252)