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)); > */ > } > } >