Does it mean that the following method should work fine if I change DataHandler to Object? Does it work w/o any changes in the method implementation?
 
public String createOrUpdateContentObjectWithAttachments(String sessionID,
   String containerID, String xmlString, String customerID,  String contentID, DataHandler source, String sourceFileName,
   DataHandler thumb, String thumbFileName);
 
input argument DataHandler is sent stream. How would the client and server know that it has to send the stream for that specific argument. You are just sending xsd:AnyType.
 
Andy, do you mind sending your code. Or atleast the snippet of the method that takes attachment as input argument?. I would appreciate if could also send your .NET snippet.
 
Thannks
Praveen
 
----- Original Message -----
From: "ANDREW MICONE" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, January 07, 2005 5:22 PM
Subject: RE: Best way to send attachments

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