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.
> 
> 

Reply via email to