Something might be missing from the code snippet for the client.  I get a 
serialization exception at 

Vector elems = (Vector) call.invoke(input);

Judging from the exception, I think SOAPBodyElement is not serializable, or is it 
something else?


-S


This an example i use for my message style Web service. The webService wait
a DOM and response with another DOM and a binary attachment. I have added
several comments in the code following.

Hope this helps,

Cédric Carbone
Neopost France
cca<at>brainsoft.fr


Server side (the Web service) :
-------------------------------
public Document SendMessage(Document demand) throws RemoteException,
SOAPException {
        //make your stuff with the org.xml.w3c.Document demand  
        
        //build your DOM answer
        org.xml.w3c.Document response = ...;

        //Bind the attachments (here 2 javax.activation.Datahandler)
        DataHandler dh1 = new DataHandler(new FileDataSource("c:/web.jpg"));
        DataHandler dh2 = new DataHandler(new
FileDataSource("c:/TaskManager.txt"));
        MessageContext messageContext = MessageContext.getCurrentContext();
        org.apache.axis.Message responseMessage =
messageContext.getResponseMessage();
        responseMessage.addAttachmentPart(new AttachmentPart(dh1));
        responseMessage.addAttachmentPart(new AttachmentPart(dh2));
        
        //return the DOM answer
        return response;
}

Client Side :
-------------
                Element payload = /*the DOM to send to the web service*/ ;

                Service service = new Service();
                Call call = (Call) service.createCall();
                call.setTimeout(this.timeout);
                call.setTargetEndpointAddress(this.endPoint);
                SOAPBodyElement[] input = new SOAPBodyElement[1];
                input[0] = new SOAPBodyElement(payload);
                Vector elems = null;
        //Send 
                Vector elems = (Vector) call.invoke(input);

        // Response treatement
                //Extract Attachment(s)
                org.apache.axis.MessageContext messageContext =
call.getMessageContext();
                org.apache.axis.Message returnedMessage =
messageContext.getResponseMessage();
                System.out.println("Number of attachments is -> " +
returnedMessage.countAttachments());
                Iterator iteAtta = returnedMessage.getAttachments();
                DataHandler[] dhTab = new
DataHandler[returnedMessage.countAttachments()];
                for (int i=0;iteAtta.hasNext();i++) {
                        AttachmentPart ap = (AttachmentPart) iteAtta.next();
                        dhTab[i] = ap.getDataHandler(); 
                        System.out.println("Filename=" +
dhTab[i].getName());    
                }

        //Extract XML Payload
                SOAPBodyElement SOAPelem = null;
                SOAPelem = (SOAPBodyElement) elems.get(0);
                Element elemResp = SOAPelem.getAsDOM();


The DOM response is Element elemResp.
The attachments received from the server are DataHandler[] dhTab[].

-----Message d'origine-----
De : Steve Pruitt [mailto:[EMAIL PROTECTED]
Envoyé : lundi 9 février 2004 17:00
À : [EMAIL PROTECTED]
Objet : JAX-RPC with attachments question


I have a service that needs to return xml and an attachment, the xml
contains some meta-information about the attachment.  I am using the jax-rpc
api.  My question is how to return both an xml document and an attachment.
I can see how to return one or the other, but not both.

Can someone point me to a good example, I can't find one.

Thanks,

-Steve Pruitt

Reply via email to