如何在 Java 中创建 MIME 附件文本/xml?
Posted
技术标签:
【中文标题】如何在 Java 中创建 MIME 附件文本/xml?【英文标题】:How to create MIME-atachment text/xml in Java? 【发布时间】:2015-08-30 12:36:48 【问题描述】:如何为我的 SOAPMessage
创建 mime-attachment text/xml
?
我有一个函数,它发送 XML 的二进制文件。但我不知道该怎么做。
【问题讨论】:
【参考方案1】:在客户端使用DataHandler/DataSource将二进制数据推送到消息中。
在服务器端,你需要创建一个DataContentHandler实现并注册到激活框架中。
第 1 步 - 添加二进制附件
实现一个简单的 DataSource 来获取数据:
import javax.activation.*;
class BinaryDataSource implements DataSource
InputStream _is;
public BinaryDataSource(InputStream is)
_is = is;
public String getContentType() return "application/binary";
public InputStream getInputStream() throws IOException return _is;
public String getName() return "some file";
public OutputStream getOutputStream() throws IOException
throw new IOException("Cannot write to this file");
现在使用此代码添加附件:
InputStream data = ...
SOAPMessage msg = ...
DataHandler dh = new DataHandler(new BinaryDataSource(data));
AttachmentPart attachment = msg.createAttachmentPart(dh);
msg.addAttachmentPart(attachment);
第 2 步 - 设置服务器端
[注意:这对我有用]
创建一个处理“应用程序/二进制”类型的传入附件的 DataContentHandler。
import javax.activation.*;
import java.io.*;
public class BinaryDataHandler implements DataContentHandler
/** Creates a new instance of BinaryDataHandler */
public BinaryDataHandler()
/** This is the key, it just returns the data uninterpreted. */
public Object getContent(javax.activation.DataSource dataSource) throws java.io.IOException
System.out.println("BinaryDataHandler: getContent called with: " + dataSource);
return dataSource.getInputStream();
public Object getTransferData(java.awt.datatransfer.DataFlavor dataFlavor,
javax.activation.DataSource dataSource)
throws java.awt.datatransfer.UnsupportedFlavorException,
java.io.IOException
return null;
public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors()
return new java.awt.datatransfer.DataFlavor[0];
public void writeTo(Object obj, String str, java.io.OutputStream outputStream)
throws java.io.IOException
// You would need to implement this to have
// the conversion done automatically based on
// mime type on the client side.
现在,您可以使用此代码获取附件的数据:
SOAPMessage msg = ... //received message
Iterator ats = msg.getAttachments();
if( ats.hasNext() )
AttachmentPart attachment = (AttachmentPart)ats.next();
InputStream contents = (InputStream)attachment.getContent();
最后,您需要注册您的 DataContentHandler 以便激活框架使用它。有几种方法(请参阅激活框架 javadocs 中的 MailcapCommandMap)。我所做的是在我的“java”解释器使用的 lib 目录中创建一个名为“mailcap”的文件。
这个文件看起来像这样:
应用程序/二进制文件;二进制数据处理程序 应用程序/二进制文件;; x-java-content-handler=BinaryDataHandler
这告诉激活框架将您的处理程序用于指定的 MIME 类型。
【讨论】:
如果我需要下一个结构:Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<TEST>" --MIME_boundary Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-ID:<TEST>
最后:--MIME_boundary Content-Type: application/zip Content-Transfer-Encoding: binary Content-ID: <package1> <!-- attach --> --MIME_boundary
我该怎么做?以上是关于如何在 Java 中创建 MIME 附件文本/xml?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Worklight 应用程序中创建 html 链接,以使用 mime 在设备中使用默认程序打开文件?
如何编写多部分 MIME 混合消息以在 Outlook 中正确显示