...
Enabling MTOM is a rather simple process. First, you must annotate your schema type or POJO to let JAXB know that a particular field could be a candidate for MTOM optimization. Second, you just tell CXF that you wish to enable MTOM.
This page tells you how to activate MTOM for JAXB. MTOM is also supported in Aegis.
1) Annotating the Message
1a) Modifying your schema for MTOM
Lets say we have a Picture schema type like this:
...
This tells JAXB (which WSDL2Java uses to generate POJOs for your service) that this field could be of any content type. Instead of creating a byte[] array for the base64Binary element, it will create a DataHandler instead which can be used to stream the data.
1b) Annotation your JAXB beans to enable MTOM
If you're doing code first, you need to add an annotation to your POJO to tell JAXB that the field is a candidate for MTOM optimization. Lets say we have a Picture class with has Title and ImageData fields, then it might look like this:
Code Block | ||||
---|---|---|---|---|
| ||||
@XmlType public class Picture { private String title; @XmlMimeType("application/octet-stream") private DataHandler imageData; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public DataHandler getImageData() { return imageData; } public void setImageData(DataHandler imageData) { this.imageData = imageData; } } |
2) Enable MTOM on your service
If you've used JAX-WS to publish your endpoint you can enable MTOM like so:
...
Code Block | ||||
---|---|---|---|---|
| ||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:simple="http://cxf.apache.org/simple" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/simple http://cxf.apache.org/schema/simple.xsd"> <simple:server id="helloWorld" serviceClass="demo.spring.HelloWorldImpl" address="http://localhost/HelloWorld"> <simple:properties> <entry key="mtom-enabled" value="true"/> </simple:properties> </simple:server> <simple:client id="helloWorldClient" serviceClass="demo.spring.HelloWorldImpl" address="http://localhost/HelloWorld"> <simple:properties> <entry key="mtom-enabled" value="true"/> </simple:properties> </simple:client> </beans> |
Using DataHandlers
Once you've got the above done, its time to start writing your logic. DataHandlers are easy to use and create. To consume a DataHandler:
...