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