You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2014/07/02 22:32:24 UTC
[jira] [Commented] (CXF-5832) JAX-WS Provider returning JAXBSource
with attachment
[ 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)