
org.bouncycastle.mail.smime.handlers.PKCS7ContentHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcjmail-jdk15to18 Show documentation
Show all versions of bcjmail-jdk15to18 Show documentation
The Bouncy Castle Java S/MIME APIs for handling S/MIME protocols. This jar contains S/MIME APIs for JDK 1.5 to JDK 1.8. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs. The Jakarta Mail API and the Jakarta activation framework will also be needed.
The newest version!
package org.bouncycastle.mail.smime.handlers;
import java.awt.datatransfer.DataFlavor;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import jakarta.activation.ActivationDataFlavor;
import jakarta.activation.DataContentHandler;
import jakarta.activation.DataSource;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeBodyPart;
import org.bouncycastle.mail.smime.SMIMEStreamingProcessor;
public class PKCS7ContentHandler
implements DataContentHandler
{
private final ActivationDataFlavor _adf;
private final ActivationDataFlavor[] _dfs;
PKCS7ContentHandler(
ActivationDataFlavor adf,
ActivationDataFlavor[] dfs)
{
_adf = adf;
_dfs = dfs;
}
public Object getContent(
DataSource ds)
throws IOException
{
return ds.getInputStream();
}
public Object getTransferData(
ActivationDataFlavor df,
DataSource ds)
throws IOException
{
if (_adf.equals(df))
{
return getContent(ds);
}
else
{
return null;
}
}
public ActivationDataFlavor[] getTransferDataFlavors()
{
return _dfs;
}
public void writeTo(
Object obj,
String mimeType,
OutputStream os)
throws IOException
{
if (obj instanceof MimeBodyPart)
{
try
{
((MimeBodyPart)obj).writeTo(os);
}
catch (MessagingException ex)
{
throw new IOException(ex.getMessage());
}
}
else if (obj instanceof byte[])
{
os.write((byte[])obj);
}
else if (obj instanceof InputStream)
{
int b;
InputStream in = (InputStream)obj;
if (!(in instanceof BufferedInputStream))
{
in = new BufferedInputStream(in);
}
while ((b = in.read()) >= 0)
{
os.write(b);
}
in.close();
}
else if (obj instanceof SMIMEStreamingProcessor)
{
SMIMEStreamingProcessor processor = (SMIMEStreamingProcessor)obj;
processor.write(os);
}
else
{
// TODO it would be even nicer if we could attach the object to the exception
// as well since in deeply nested messages, it is not always clear which
// part caused the problem. Thus I guess we would have to subclass the
// IOException
throw new IOException("unknown object in writeTo " + obj);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy