Figured this out yesterday.

The server piece is fine. On the server in order to attach documents
with axis you just do the following:

  DataSource ds = new FileDataSource("/tmp/msg.pdf");
  AttachmentPart att = new AttachmentPart(new DataHandler(ds));
  Message msg =
        (Message)MessageContext.getCurrentContext().getResponseMessage();
  msg.addAttachmentPart(att);
  msg.saveChanges();

To see these at the client you need the following code:

Iterator iterator = call.getResponseMessage().getAttachments();
if (iterator.hasNext())
{
  AttachmentPart part     = (AttachmentPart) iterator.next();
  DataHandler    dh       = part.getDataHandler();
  dh.writeTo(new java.io.FileOutputStream("somefilename"));
}

-a.

On Fri, 2003-09-26 at 11:05, Andrew Smith wrote:
> I have a very simple web service that echos back the xml given that
> looks like this:
> 
> public class MessageService 
> {
>     public Document echoDocument(Document doc) throws Exception 
>     {
>       return doc;
>     }
> } 
> 
> On the client I have the various methods setup to retrieve the result
> vector and print out the document.
> 
> So far so good. 
> 
> Now when I try to add an attachment from the server the result vector on
> the client is empty. Using TCPMonitor I can see that the mime message is
> coming through just fine. A perl client using SOAP::Lite is able to see
> the data too.
> 
> public class MessageService 
> {
>     public Document echoDocument(Document doc) throws Exception 
>     {
>       DataSource ds = new FileDataSource("/tmp/msg.pdf");
>       AttachmentPart att = new AttachmentPart(new DataHandler(ds));
>       Message msg =
>       (Message)MessageContext.getCurrentContext().getResponseMessage();
>       msg.addAttachmentPart(att);
>       msg.saveChanges();
> 
>       return doc;
>     }
> } 
> 
> Has anyone written an axis client for a document style service that can
> handle an attachment?
> 
> -a.
> 
> 
> For completeness here is the MessageClient:
> 
> public class MessageClient 
> {
>     public static void main(String[] args) throws Exception 
>     {
>       DocumentBuilder builder =
> DocumentBuilderFactory.newInstance().newDocumentBuilder();
>       Document doc = builder.parse(args[0]);
> 
>       System.out.println("sending " + XMLUtils.DocumentToString(doc));
> 
>       Service  service = new Service();
>       Call call = (Call) service.createCall();
>       String endpoint =
> "http://localhost:8080/msgservice/services/MessageService";;
>       call.setTargetEndpointAddress(new URL(endpoint));
>       call.setOperation(new QName(endpoint, "echoDocument"),
> "echoDocument"); 
> 
>       Object ret = call.invoke(new Object[] {new
> SOAPBodyElement(doc.getDocumentElement())});
>       Vector result = (Vector) call.invoke(new Object[] {new
> SOAPBodyElement(doc.getDocumentElement())});      
>       System.out.println(result);
>       /*
>       SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
>       Document retDoc = sbe.getAsDocument();
>       System.out.println("received " +
> XMLUtils.DocumentToString(retDoc));
>       */
>     }
> }
> 

Reply via email to