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 >
