Lief,

Thanks for your contribution.  I have committed the original change for
returning strings as attachments.  I'll wait for byte array support to
allow arbitrary attachments.

Scott Nichol

----- Original Message -----
From: "Leif Nilsson TACMa" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, December 10, 2002 10:41 AM
Subject: RE: Again: Attachments through COMProvider


> Hi!
>
>
> Regarding byte array I see that arrays are currently not supported:
>      else if( o.getClass().isArray())
>      {
>       // ArrayInfo ai= new ArrayInfo(o);
>       // v= ai.toVariant();
>       throw new SOAPException(Constants.FAULT_CODE_SERVER, "Currently
arrays
> are unsupported,  type received:" + o.getClass().getName());
>      }
>
> One idea would be to send the response object as a serialized
>  Object - the following way:
>  (Whenever someone decides to add bytearray it would be possible to
attach
> it ?!?!)
>  (In the previous solution we were dependant on the UTF-8 encoding)
>
>     Object ret= null;
>     try{
>       ret= invoke( threadingModel, progid, methodName, vp);
>     }catch( Exception e)
>     {
>       String msg= Log.msg(Log.ERROR,
"msg.comprovider.error.nativeError",
> e.toString());
>       throw new SOAPException( Constants.FAULT_CODE_SERVER, msg);
>     }
>     try {
>       Parameter pret= null;
>       if(ret != null) {
>         if (attachSerializedObject && ret instanceof Serializable) {
>           // We are about to return a serializable object and they
should be
>           //  returned as attachments. Use a DataHandler object.
>           ByteArrayOutputStream baos = new ByteArrayOutputStream();
>           ObjectOutput            oo = new ObjectOutputStream(baos);
>           oo.writeObject(ret);
>           oo.flush();
>
>           DataSource  ds  = new
ByteArrayDataSource(baos.toByteArray(),
> "application/octet-stream");
>           DataHandler dh  = new DataHandler(ds);
>           ret = dh;
>         }
>
>         pret= new Parameter(RPCConstants.ELEM_RETURN , ret.getClass(),
ret,
> null);
>       }
>    }
>
>
> Is this acceptable ?????
> You activate the attach serialized object by addding the following to
your
> DeplymentDescriptor
>
>        <isd:option key="attachSerializedObject" value="true" />
>
> On the client side you do as follows:
>
> Parameter ret = resp.getReturnValue();
> try {
>   Object obj = ret.getValue();
>
>   if (obj instanceof DataHandler) {
>     try {
>       DataHandler dh = (DataHandler) obj;
>       DataSource  ds = dh.getDataSource();
>
>       InputStream is  = ds.getInputStream();
>       ObjectInput oi  = new ObjectInputStream(is);
>       Object      attachedObject = oi.readObject();
>
>      .... Do your stuff .....
>
> /Leif
>
> -----Original Message-----
> From: Scott Nichol [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, December 03, 2002 13:46
> To: [EMAIL PROTECTED]
> Subject: Re: Again: Attachments through COMProvider
>
>
> Lief,
>
> Thank you for being both patient and persistent!
>
> My one question about this is that the option you add applies to
> Strings, which are returned from COM objects as Unicode.  This would
not
> allow binary files to be returned unless the COM object does some
> encoding on the file, such as Base64.  Would we be able to implement
> this for another data type (array of byte?) that would support
arbitrary
> files?
>
> Scott Nichol
>
> ----- Original Message -----
> From: "Leif Nilsson TACMa" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, December 03, 2002 3:24 AM
> Subject: Again: Attachments through COMProvider
>
>
> Hi!
>
> Since no one seems to object I suggest this change to be added.
>
> /Leif
>
> >  -----Original Message-----
> > From: Leif Nilsson TACMa
> > Sent: Monday, October 28, 2002 19:10
> > To: '[EMAIL PROTECTED]'
> > Subject: Attachments through COMProvider
> >
> > Hi!
> >
> > We send XML-files through Apache Soap.
> > There is a COM-server accessed via Apaches COMProvider.
> > The best way to send files as discussed is through attachments.
> > The only way I have figured out to do this via the ComProvider is to
> alter
> > the
> >  org.apache.soap.providers.com.RPCProvider.java code.
> >
> > I'm sure there is a better way but I will explain what I have done.
> >   I have added an option for the COmProvider DeploymentDescriptor
> > (attachString), which if present and set to true will cause
> >   Strings returned from COM-servers to be packaged in a DataHandler
> object
> > using UTF-8 coding.
> >
> > Any suggestions for how to do this better / cleaner ?
> > Cf. attached java code.
> >  <<Original RPCProvider.java>>  <<RPCProvider.java>>
> >
> > Leif Nilsson
> > Software Engineer
> >
> > TAC AB
> > Jägershillgatan 18
> > SE-213 75 Malmö, Sweden
> > Direct +46 40 38 69 56
> > Fax +46 40 21 82 87
> > Mobile +46 46 299 89 56
> > www.tac-global.com
> >
> > This email is intended only for the use of the individual or entity
to
> > whom it is addressed. It may contain information that is privileged,
> > confidential or otherwise protected from disclosure under applicable
> law.
> > If you have received this transmission in error, please delete it
> > immediately and notify me by mailing me.
> >
> >
>
>
>
> ----------------------------------------------------------------------
--
> --------
>
>
> > --
> > To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>


------------------------------------------------------------------------
--------


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


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

Reply via email to