CIDs are now encoded for MTOM.

This commit is contained in:
Arjen Poutsma
2007-06-06 12:52:01 +00:00
parent 1ac0bd14dd
commit 2a423ab935

View File

@@ -20,6 +20,11 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Map;
import java.util.UUID;
import javax.activation.DataHandler;
@@ -336,11 +341,29 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller implements MimeMarsh
}
public String addMtomAttachment(DataHandler dataHandler, String elementNamespace, String elementLocalName) {
String contentId = UUID.randomUUID() + "@" + elementNamespace;
String host = getHost(elementNamespace, dataHandler);
String contentId = UUID.randomUUID() + "@" + host;
mimeContainer.addAttachment("<" + contentId + ">", dataHandler);
try {
contentId = URLEncoder.encode(contentId, "UTF-8");
}
catch (UnsupportedEncodingException e) {
// ignore
}
return "cid:" + contentId;
}
private String getHost(String elementNamespace, DataHandler dataHandler) {
try {
URI uri = new URI(elementNamespace);
return uri.getHost();
}
catch (URISyntaxException e) {
// ignore
}
return dataHandler.getName();
}
public String addSwaRefAttachment(DataHandler dataHandler) {
String contentId = UUID.randomUUID() + "@" + dataHandler.getName();
mimeContainer.addAttachment(contentId, dataHandler);
@@ -373,7 +396,14 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller implements MimeMarsh
public DataHandler getAttachmentAsDataHandler(String contentId) {
if (contentId.startsWith("cid:")) {
contentId = '<' + contentId.substring("cid:".length()) + '>';
contentId = contentId.substring("cid:".length());
try {
URLDecoder.decode(contentId, "UTF-8");
}
catch (UnsupportedEncodingException e) {
// ignore
}
contentId = '<' + contentId + '>';
}
return mimeContainer.getAttachment(contentId);
}