Thanks for the quick reply.

So, is there any other way that MTOM attachments are made available through
the Dispatch SPI (i.e. I don't want to do JAXB data binding).



On Thu, Apr 22, 2010 at 11:45 AM, Daniel Kulp <[email protected]> wrote:

>
> > I had hoped that the Apache runtime would process the attachment and
> inline
> > it into the
> > 'DOMSource request' before the 'invoke' method is called, but it appears
> > that no mtom
> > processing takes place.
>
> Well, the main reason we don't do this is that in many cases we COULDN'T do
> it
> without a ton of memory available and it also would be extremely
> inefficient
> for most use cases.   At some point, I do think we COULD wrapper the
> XMLStreamReader with one that would do the mtom processing, but that would
> half to be made optional somehow.
>
> For example, lets pretend your attachment is a 500MB file.   With the
> current
> setup, you would have the WebServiceContext injected where you could get
> the
> Attachment and an input stream to get the raw data.   That input stream
> would
> be a wrapper to the raw HttpInputStream so the data would be streamed in
> not
> consuming any memory and not involving any processor time to encode and
> such.
>
> If we processed it, we would need to pull the 500MB in, run a base64 encode
> on
> it to create a base64 string (which, since it's unicode, would take 1.3GB
> of
> memory) to add to the DOM.   To use that data, you would NORMALLY then
> decode
> it back to the byte[] data thus wasting more cpu time.
>
> Dan
>
>
> On Thursday 22 April 2010 11:29:55 am Thomas Koenig wrote:
> > Is MTOM attachment handling supported through the Dispatch SPI?
> >
> > I have modified the jaxws_dispatch_provider CXF sample, to accept/send
> > payloads that contain Base64Binary data.
> >
> > #######################################################################
> > Schema:
> > #######
> > <complexType name="DocumentDetailType">
> >   <sequence>
> >     <element name="identifier" type="xsd:string"/>
> >     <element name="content" type="xsd:base64Binary"/>
> >   </sequence>
> > </complexType>
> >
> > <complexType name="DocumentType">
> >   <sequence>
> >     <element name="name" type="xsd:string"/>
> >     <element name="id" type="xsd:string"/>
> >     <element name="detail" type="types:DocumentDetailType"/>
> >   </sequence>
> > </complexType>
> >
> > <element name="testDocumentRequest" type="types:DocumentType" />
> > <element name="testDocumentResponse" type="types:DocumentType" />
> > #######################################################################
> >
> >
> > #######################################################################
> > Request Message sample:
> > #######
> > ------=_Part_4_8271067.1271948982000
> > Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
> > Content-Transfer-Encoding: 8bit
> > Content-ID: <[email protected]>
> >
> > <soapenv:Envelope xmlns:soapenv="
> http://schemas.xmlsoap.org/soap/envelope/";
> > xmlns:typ="http://cxf.apache.org/mime/types";>
> >    <soapenv:Header/>
> >    <soapenv:Body>
> >       <typ:testDocument>
> >          <typ:name>RequestSOAPUI_01</typ:name>
> >          <typ:id>RequestSOAPUI_01_id</typ:id>
> >          <typ:detail>
> >             <typ:identifier>RequestSOAPUI_01_identifier</typ:identifier>
> >             <typ:content><inc:Include href="cid:217539756627" xmlns:inc="
> > http://www.w3.org/2004/08/xop/include"/></typ:content>
> >          </typ:detail>
> >       </typ:testDocument>
> >    </soapenv:Body>
> > </soapenv:Envelope>
> > ------=_Part_4_8271067.1271948982000
> > Content-Type: text/xml; charset=us-ascii
> > Content-Transfer-Encoding: 7bit
> > Content-ID: <217539756627>
> >
> > PGE+DQogIDxiIG5hbWU9IlRob21hcyIvPg0KPGE+
> > ------=_Part_4_8271067.1271948982000--
> > #######################################################################
> >
> >
> > #######################################################################
> > Apache CXF dispatch provider:
> > #######
> > @MTOM(threshold = 0, enabled = true)
> > @WebServiceProvider(
> >   portName = "TestDocumentPort",
> >   serviceName = "TestDocumentService",
> >   targetNamespace = "http://cxf.apache.org/mime";,
> >   wsdlLocation = "wsdl/mtom_xop.wsdl")
> > @ServiceMode(value = Service.Mode.MESSAGE)
> > public class TestDocumentDomSourceMessageProvider implements
> > Provider<DOMSource> {
> >
> >     public TestDocumentDomSourceMessageProvider() {
> >     }
> >
> >     public DOMSource invoke(DOMSource request) {
> >         DOMSource response = new DOMSource();
> >         try {
> >             MessageFactory factory = MessageFactory.newInstance();
> >             SOAPMessage soapReq = factory.createMessage();
> >             soapReq.getSOAPPart().setContent(request);
> >
> >             System.out.println("Incoming Client Request as a DOMSource
> data
> > in MESSAGE Mode");
> >             soapReq.writeTo(System.out);
> >             System.out.println("\n");
> >
> >             InputStream is =
> > getClass().getResourceAsStream("TestDocumentResponse.xml");
> >             SOAPMessage testDocumentResponse =
>  factory.createMessage(null,
> > is);
> >             is.close();
> >
> >             response.setNode(testDocumentResponse.getSOAPPart());
> >         } catch (Exception ex) {
> >             ex.printStackTrace();
> >         }
> >         return response;
> >     }
> > }
> >
> > Object implementor = new TestDocumentDomSourceMessageProvider();
> > String address = "http://localhost:9000/document-test";;
> > Endpoint ep = Endpoint.publish(address, implementor);
> > ((SOAPBinding)ep.getBinding()).setMTOMEnabled(true);
> >
> >
> #######################################################################xmln
> > s:soapenv=" http://schemas.xmlsoap.org/soap/envelope/"; xmlns:typ="
> > http://cxf.apache.org/mime/types";>
> >
> > I had hoped that the Apache runtime would process the attachment and
> inline
> > it into the
> > 'DOMSource request' before the 'invoke' method is called, but it appears
> > that no mtom
> > processing takes place.
>
> --
> Daniel Kulp
> [email protected]
> http://dankulp.com/blog
>

Reply via email to