Thursday, May 12, 2011

Spring ws Tips - Unmarshalling attachments

Custom Jaxb2Marshaller to support pdf,tiff,image, etc attachments

import java.util.Iterator;
import javax.activation.DataHandler;
import javax.xml.transform.Source;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.ws.mime.Attachment;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
public class Jaxb2MarshallerWithMimeSupport extends Jaxb2Marshaller {
@Override
public Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException {
return super.unmarshal(source, new XOPMimeContainer(mimeContainer));
}
public static class XOPMimeContainer implements MimeContainer {
MimeContainer mimeContainer;
public XOPMimeContainer(MimeContainer mimeContainer) {
this.mimeContainer = mimeContainer;
}
public void addAttachment(String s, DataHandler datahandler) {
mimeContainer.addAttachment(s, datahandler);
}
public boolean convertToXopPackage() {
return mimeContainer.convertToXopPackage();
}
public DataHandler getAttachment(String s) {
return mimeContainer.getAttachment(s);
}
public boolean isXopPackage() {
if (mimeContainer != null) {
Object mimeMessage = new DirectFieldAccessor(mimeContainer).getPropertyValue("mimeMessage");
if (mimeMessage instanceof SaajSoapMessage) {
SaajSoapMessage soapMessage = (SaajSoapMessage) mimeMessage;
Iterator attachments = soapMessage.getAttachments();
if (attachments.hasNext()) {
Attachment attachment = attachments.next();
System.out.println(attachment.getContentType());
return true;
}
}
return mimeContainer.isXopPackage();
}
return false;
}
}
}

No comments:

Post a Comment