Unfortunately, DataHandlers are serialized as attachments, and
attachments are always deserialized as DataHandlers.  Therefore, your
deserializer cannot work with the existing Apache SOAP code.

A fairly simple alternative would be to have an Image [de-]serializer
that delegates to the Base64Serializer.  The jpeg gets managed as a byte
array, but you specify the javaType as Image so that the xsi:type
attribute reflects its origins and the byte array can be deserialized to
an Image.  This is not as efficient as the DataHandler (Base64 takes 33%
more space than straight bytes), but it will function with minimal work.

Scott Nichol

----- Original Message -----
From: "Vamsi Krishna" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, January 09, 2003 10:06 PM
Subject: Can I override the MimePartSerializer?? - Need Help Soon


> hi All,
>
> My service has a method -  saveJPEG(String name, java.awt.Image img)
>  taking a name and a jpeg image and saving that jpeg with that name in
a
> specified directory.
> I am using SOAP RPC. Since there is no Serializer/Deserializer for
Image
> type, i created my ImageSerializerDeserializer. The DD specifies this
> info. The client also does the mapTypes with this info. What I do in
> this class is - in the marshall method, i take the Image source,
convert
> it into a DataHandler object and call the MimePartSerializer with the
> DataHandler object (i simply pass all the other parameters onto
> MimePartSerializer - only the src is changed to dhsrc).
> In the unmarshall method - i first call the
> MimePartSerializer.unmarshall method and get the Bean. Since i know it
> is Image, i convert the DataHandler value in this bean to an Image
> object and create and return that Image bean.
>
> So the client works fine now - my ImageSerializer's marshall method
gets
> called and the call goes through to the Server. The problem is in the
> Deserialization. My ImageSerializer class's  unmarshall method is
never
> called at the server end. Always the MimePartSerializer.unmarshall is
> called and I get a fault saying there is no such method that accepts a
> DataHandler - saveJPEG(java.lang.String,javax.activation.DataHandler).
>
> What is the problem here? Is there a way to override the deserializer
> for javax.activation.DataHandler? Is my approach correct?
> (I know i can have an overloaded method with this signature taking the
> data handler and in this method convert the dh to image and call my
> original method. But this is not what i am looking for.)
>
>
> I appreciate any help in this.
>
> thanks a lot in advance,
> Vamsi.
>
>
> The DD entry is -
> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
>             xmlns:x="urn:xml-soap-j2eeca-soapattach-serverSaveJPEG"
>             qname="x:Image"
>             javaType="java.awt.Image"
>
java2XMLClassName="soapattach.soap.serializers.ImageSerializer"
>
> xml2JavaClassName="soapattach.soap.serializers.ImageSerializer" />
>
>
> --
> 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