Hi,

I am using Eclipse 3.2 with the latest Webtools to develop a webservice.
As engine to run the service I use to tomcat 5.5 with axis 1.3 (axis is coming with eclipse!? - well I havent installed it anyway :D)

IDEA:
the service exposes two operations:
<code>
BackupResult uploadFiles(BackupFile[] files);
BackupResult downloadFiles();
//result is container for error OR files array.
</code>

SERVER:
Axis was used here to make WSDL for my Java Bean and manages the service when published on the tomcat server.

CLIENT:
wsdl2java genereated me the necessary stubs for the needed Bean (and all complex types)
My calls to the service are performed using axis

SO FAR SO GOOD
All's up and running... but one major drawback: every file's content is a byte[] This works for small files or few files but not when having to load all data in memory just so I can then send it off. I decided that what I wanted were attachments. And as my clients are java and/or c# I needed a interopable solution.

AND HERE'S WHERE IT WENT WRONG
:) I realized I'd need REAL Attachments (not just some variable typed as DataHandler) and they'd have to be in the DIME format. I cant get ANY attachment to work though :/ (oh and I do have action and mail.jar - no RuntimeError IIRC)

I tackled upload first. So the client has to attach data.
<code>
                //remove old and make DIME
                try {
                        ((BackupServiceProxy) 
backupService).getStub().clearAttachments();
                        ((BackupServiceProxy) 
backupService).getStub()._setProperty(
                                        Call.ATTACHMENT_ENCAPSULATION_FORMAT,
                                        
Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                ...
                        //attach File
                        DataSource source = new FileDataSource(new File(path));
                        DataHandler buildFile = new DataHandler(source);
                        try {
                                ((BackupServiceProxy) 
backupService).getStub().addAttachment(
                                                buildFile);

                        } catch (Exception e) {
                                e.printStackTrace();
                        }
</code>
I do this in a static private method after which I make the call using the proxy object (which in turn just calls the stub):
<code>
        public core.BackupResult uploadFiles(core.BackupSettings settings,
                        core.BackupFile[] files) throws 
java.rmi.RemoteException {
                if (backupService == null)
                        _initBackupServiceProxy();
             try {
int attachLength = ((BackupServiceSoapBindingStub) backupService).getAttachments().length;
                 System.out.println(attachLength + " attachments");
             } catch (Exception e) {
                 e.printStackTrace();
             }  
                return backupService.uploadFiles(settings, files);
        }
</code>
i added an output and it returns the correct amount of attachments namely one for each file.

next step is to 'unpack' the attachments on the server and here I get 0 everytime:
<code>
public static AttachmentPart[] getMessageAttachments() throws AxisFault {
                MessageContext msgContext = MessageContext.getCurrentContext();
                if (null == msgContext) {
                        System.out.println("cant get context");
                        return null;
                }
                
System.out.println("name of msg:" + msgContext.getCurrentMessage ().getSOAPPartAsString());
                Iterator it = msgContext.getCurrentMessage().getAttachments();
ArrayList<AttachmentPart> attachments = new ArrayList<AttachmentPart>();
                while (it.hasNext()) {
                        AttachmentPart part = (AttachmentPart) it.next();
                        attachments.add(part);
                }
                System.out.println(attachments.size() + " attachments");
                return attachments.toArray(new AttachmentPart[0]);
        }
}
</code>

QUESTION:
Simply - WHY. Im desperate and after hours of experimenting I ran out of ideas...

Best regards,
and thanks in advance,
Dominik

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to