Right, it's passed in either directly or by reference as xsd:anyType and then the receiver has to type the anyType to determine whether its base64encoded, SwA, or DIME. -- Andy
>>> [EMAIL PROTECTED] 01/07/05 03:10PM >>> Nothing in that wsdl fragment indicates that there will be any MIME or DIME based attachments. Cheers Simon > -----Original Message----- > From: ANDREW MICONE [mailto:[EMAIL PROTECTED] > Sent: Friday, January 07, 2005 12:14 PM > To: [EMAIL PROTECTED] > Subject: RE: Best way to send attachments > > Here's an example of a WSDL snippet that is consumed by both > .NET and Axis that handles attachments and interoperates > between the two. This is from a service in production: > > <complexType name="NodeDocument"> > <sequence> > <element name="name" nillable="true" type="xsd:string"/> > <element name="type" nillable="true" type="xsd:string"/> > <element name="content" nillable="true" > type="xsd:anyType"/> > </sequence> > </complexType> > <complexType name="ArrayofDoc"> > <complexContent> > <restriction base="soapenc:Array"> > <attribute ref="soapenc:arrayType" > wsdl:arrayType="tns1:NodeDocument[]"/> > </restriction> > </complexContent> > </complexType> > > BTW, I didn't write it, I just implemented it. -- Andy > > >>> [EMAIL PROTECTED] 01/07/05 12:26PM >>> > I don't believe there is a way to define this in wsdl so that > both .Net and Java(axis) can consume the wsdl. Someone please > correct me if I am wrong. My clients just have to understand > that certain methods have filles attached. I also allow them > to set a request parameter do define whether the attachment > should be set to Dime or Mime encoding (the service is Axis). > > > Raul > > -----Original Message----- > From: BLIS Webmaster (Patrick Houbaux) > [mailto:[EMAIL PROTECTED] > Sent: Friday, January 07, 2005 1:12 PM > To: [EMAIL PROTECTED] > Subject: Re: Best way to send attachments > > I have no problem sending attachements to .NET client. > > I have a RPC web service (I guess it works for other web > service style), and here is the methodologie: > > Let's assume you have a web service supposed to send some > attachments, the idea is to add the attachment to the SOAP > message before the web service method returns on the server > side (please note the following is using AXIS 1.1, but it is > almost the same with the latest version of AXIS, the AXIS API > has changed a bit). > > 1- get the response message from the message context: > //... > org.apache.axis.MessageContext msgContext= > org.apache.axis.MessageContext.getCurrentContext(); > org.apache.axis.Message rspMsg= msgContext.getResponseMessage(); > > 2 - Set the attachment type to be sent as DIME > > > rspMsg.getAttachmentsImpl().setSendType(org.apache.axis.attach > ments.Atta > chments.SEND_TYPE_DIME); > > 3- Let's assume you want to send a file > > java.io.File fileToAddAsAttachment = new > java.io.File("<the path to your file>"); > > 4- Add the file to attachment of the response message > > javax.activation.DataHandler dh=new > javax.activation.DataHandler(new > javax.activation.FileDataSource(fileToAddAsAttachment)); > org.apache.axis.attachments.AttachmentPart part = new > org.apache.axis.attachments.AttachmentPart(dh); > rspMsg.addAttachmentPart(part); > > 5- Return your method > > The drawback with that is I haven't figured out how to declare (with > java2wsdl) the attachment in the WSDL so you have to document > your web service or inform your clients they have to expect > some attachments when they call your method. > > On the .NET client side, the method is the following: > > 1- Call the web service method > > 2- Just after the previous call returned, get the SOAP > Response message context > SoapContext rspContext = service.ResponseSoapContext; > > 3- Get the DIME attachements, loop on them and write in a > file what you find there: > DimeAttachmentCollection attachments = rspContext.Attachments; > for (int i=0; i<attachments.Count; i++) > { > Stream str = attachments[i].Stream; > FileStream fs = new FileStream("<the file name > where you want to save the > attachment>",FileMode.Create,FileAccess.Write); > ((MemoryStream)str).WriteTo(fs); > str.Close(); > fs.Close(); > } > > That's all, that works perfectly for me ... hope it helps. > > Cheers, > Patrick. > > > > Vy Ho wrote: > > All of the reples make no sense whatsover to me. > > > > The original poster makes a very clear question that how to send > > attachments using soap way that works with many environments. For > > example, Axis and .Net. > > > > To rephrase this, I would say how to create a Wsdl that works with > > both axis and .net. Currently, using the DataHandler in > the wsdl (or > > generating the wsdl from java code with DataHandler) would not work > > with other environment. I haven't tried this, but looking at the > > definition of DataHandler (package name), and its namespace in the > > wsdl, you can tell it comes from apache, not some Soap standard, > > unless Apache is the official standard used for attachment. > > > > It's funny to read a bunch of replies that have little > answer value to > > > the original question. > >