Stefan Schuster wrote:
Hi everybody,
how can I send an attachment from the client to an server without
using the DataHandler in the method signature? I tried
to get the MessageContext (getCurrentMessageContext()), but it
returns null.
How can I obtain an messageContext to set the attachment to an
message in the client?
Thanks in advance,
Stefan
Hello,
I have an example where the server sends an attachment
public SOAPEnvelope extractReport(String _reportName, String _path,
HashMap _parameters, String _format)
throws RemoteException {
trace.info("Extracting report...");
try {
MessageContext msgContext = MessageContext.getCurrentContext();
Message response = msgContext.getResponseMessage();
Iterator attachmentsIterator = response.getAttachments();
if (attachmentsIterator == null) {
trace.fatal("No Support for attachments !");
throw new SOAPException("No Support for attachments");
}
//Crystal Reports Extraction
ReportBuilder builder = ReportFactory.getFactory().getBuilder();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ReportFormat format = ReportFormat.getReportFormat(_format);
final String host =
ConfigSingleton.getInstance().getConfiguration().getString(Conf.CRYSTAL_HOST);
Exportable export = new ExportableImpl(out, format, host,
_parameters, _path);
builder.getReport(export).export();
ByteArrayInputStream input = new
ByteArrayInputStream(out.toByteArray());
AttachmentPart current = response.createAttachmentPart();
current.setContent(input, format.getContentType());
current.setContentId(_reportName!=null?_reportName:REPORT_CONTENT_ID);
response.addAttachmentPart(current);
response.saveChanges();
return response.getSOAPEnvelope();
} catch (ReportException e) {
trace.error(getClass().getName() + ".extractReport():" +
e.getMessage(), e);
throw new RemoteException(e.getMessage(), e);
} catch (SOAPException e) {
trace.error(getClass().getName() + ".extractReport():" +
e.getMessage(), e);
throw new RemoteException(e.getMessage(), e);
} catch (ConfigurationException e) {
trace.error(getClass().getName() + ".extractReport():" +
e.getMessage(), e);
throw new RemoteException(e.getMessage(), e);
} finally {
trace.info("Report extracted");
}
}
Hope this helps
Alexandre