trying to use the "typeMapping" tag, to fix a problem with SOAP sent from Mac OS X, 10.3

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

trying to use the "typeMapping" tag, to fix a problem with SOAP sent from Mac OS X, 10.3

dmorrow
Dear list,

I'm new to Axis, but not to web-services development. I've developed  
web services clients for the Mac, which communicate to .NET based  
services. Now, I'm involved in ditching the .NET work, in favor of Axis.

Anyway, we have a few Mac clients, which send some data Base64  
encoded. So, when the data gets serialized into the SOAP packet, the  
parameter might look something like this:

<myTag xsi:type="xsd:base64">AAAA</myTag>

For some reason, Mac OS X, 10.3, claims the type is "base64", when it  
really should be "base64Binary". Why it does this, I don't know. (For  
those who are curious, 10.4, or "Tiger", does flag the parameter as a  
base64Binary)

What I'm trying to tell Axis, is that if you see a param flagged as a  
"base64", then treat it as a "base64Binary".

My guess is that I can accomplish this by adding a "typeMapping" tag  
in my "deploy.wsdd" file:

<typeMapping qname="xsd:base64"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   languageSpecificType="java:byte[]"
   serializer="org.apache.axis.encoding.ser.Base64SerializerFactory"
   deserializer="org.apache.axis.encoding.ser.Base64DeserializerFactory"
   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>

But this seems to have no effect, as I still get a SOAP-fault message  
sent back.

If anyone has done something like this, I'd really like to know how,  
as I'd like to continue to allow Mac OS X users to connect to my Web  
Service.

Thanks for any help in this regard,
-Dan.

P.S. - I'm using Eclipse 3.1M6, with the latest Web Tools, which  
includes Axis 1.1.
Reply | Threaded
Open this post in threaded view
|

Re: trying to use the "typeMapping" tag, to fix a problem with SOAP sent from Mac OS X, 10.3

Jeff Greif
It's a little hard to tell without seeing the fault, but somewhere there
should be an accessible declaration of the type xsd:base64, for example
as a trivial restriction of xsd:base64Binary to prevent failure based on
no type definition being available.  You may not be allowed to define
new types in the XML Schema namespace, so this may be a trickier problem
than it looks.

Jeff

Daniel Morrow wrote:

> Dear list,
>
> I'm new to Axis, but not to web-services development. I've developed  
> web services clients for the Mac, which communicate to .NET based  
> services. Now, I'm involved in ditching the .NET work, in favor of Axis.
>
> Anyway, we have a few Mac clients, which send some data Base64  
> encoded. So, when the data gets serialized into the SOAP packet, the  
> parameter might look something like this:
>
> <myTag xsi:type="xsd:base64">AAAA</myTag>
>
> For some reason, Mac OS X, 10.3, claims the type is "base64", when it  
> really should be "base64Binary". Why it does this, I don't know. (For  
> those who are curious, 10.4, or "Tiger", does flag the parameter as a  
> base64Binary)
>
> What I'm trying to tell Axis, is that if you see a param flagged as a  
> "base64", then treat it as a "base64Binary".
>
> My guess is that I can accomplish this by adding a "typeMapping" tag  
> in my "deploy.wsdd" file:
>
> <typeMapping qname="xsd:base64"
>   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>   languageSpecificType="java:byte[]"
>   serializer="org.apache.axis.encoding.ser.Base64SerializerFactory"
>   deserializer="org.apache.axis.encoding.ser.Base64DeserializerFactory"
>   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> />
>
> But this seems to have no effect, as I still get a SOAP-fault message  
> sent back.
>
> If anyone has done something like this, I'd really like to know how,  
> as I'd like to continue to allow Mac OS X users to connect to my Web  
> Service.
>
> Thanks for any help in this regard,
> -Dan.
>
> P.S. - I'm using Eclipse 3.1M6, with the latest Web Tools, which  
> includes Axis 1.1.
>
>

Reply | Threaded
Open this post in threaded view
|

Re: trying to use the "typeMapping" tag, to fix a problem with SOAP sent from Mac OS X, 10.3

dmorrow
The fault string that I get back is this:

"org.xml.sax.SAXException: Deserializing parameter 'inPassword':  
could not find deserializer for type {http://www.w3.org/2001/ 
XMLSchema}base64"

Don't know if that will help. Thanks for your help so far.

-Dan.


On May 5, 2005, at 12:56 PM, Jeff Greif wrote:

> It's a little hard to tell without seeing the fault, but somewhere  
> there should be an accessible declaration of the type xsd:base64,  
> for example as a trivial restriction of xsd:base64Binary to prevent  
> failure based on no type definition being available.  You may not  
> be allowed to define new types in the XML Schema namespace, so this  
> may be a trickier problem than it looks.
>
> Jeff
>
> Daniel Morrow wrote:
>
>
>> Dear list,
>>
>> I'm new to Axis, but not to web-services development. I've  
>> developed  web services clients for the Mac, which communicate  
>> to .NET based  services. Now, I'm involved in ditching the .NET  
>> work, in favor of Axis.
>>
>> Anyway, we have a few Mac clients, which send some data Base64  
>> encoded. So, when the data gets serialized into the SOAP packet,  
>> the  parameter might look something like this:
>>
>> <myTag xsi:type="xsd:base64">AAAA</myTag>
>>
>> For some reason, Mac OS X, 10.3, claims the type is "base64", when  
>> it  really should be "base64Binary". Why it does this, I don't  
>> know. (For  those who are curious, 10.4, or "Tiger", does flag the  
>> parameter as a  base64Binary)
>>
>> What I'm trying to tell Axis, is that if you see a param flagged  
>> as a  "base64", then treat it as a "base64Binary".
>>
>> My guess is that I can accomplish this by adding a "typeMapping"  
>> tag  in my "deploy.wsdd" file:
>>
>> <typeMapping qname="xsd:base64"
>>   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>   languageSpecificType="java:byte[]"
>>   serializer="org.apache.axis.encoding.ser.Base64SerializerFactory"
>>    
>> deserializer="org.apache.axis.encoding.ser.Base64DeserializerFactory"
>>   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> />
>>
>> But this seems to have no effect, as I still get a SOAP-fault  
>> message  sent back.
>>
>> If anyone has done something like this, I'd really like to know  
>> how,  as I'd like to continue to allow Mac OS X users to connect  
>> to my Web  Service.
>>
>> Thanks for any help in this regard,
>> -Dan.
>>
>> P.S. - I'm using Eclipse 3.1M6, with the latest Web Tools, which  
>> includes Axis 1.1.
>>
>>
>>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: trying to use the "typeMapping" tag, to fix a problem with SOAP sent from Mac OS X, 10.3

Jeff Greif
You seem to be on the right track with your type mapping.  Since your
service was formerly on .Net and thus might have used literal encoding,
could perhaps the type mapping's encodingStyle be wrong?

Jeff

Daniel Morrow wrote:

> The fault string that I get back is this:
>
> "org.xml.sax.SAXException: Deserializing parameter 'inPassword':  
> could not find deserializer for type {http://www.w3.org/2001/ 
> XMLSchema}base64"
>
> Don't know if that will help. Thanks for your help so far.
>
> -Dan.
>
>
> On May 5, 2005, at 12:56 PM, Jeff Greif wrote:
>
>> It's a little hard to tell without seeing the fault, but somewhere  
>> there should be an accessible declaration of the type xsd:base64,  
>> for example as a trivial restriction of xsd:base64Binary to prevent  
>> failure based on no type definition being available.  You may not  be
>> allowed to define new types in the XML Schema namespace, so this  may
>> be a trickier problem than it looks.
>>
>> Jeff
>>
>> Daniel Morrow wrote:
>>
>>
>>> Dear list,
>>>
>>> I'm new to Axis, but not to web-services development. I've  
>>> developed  web services clients for the Mac, which communicate  to
>>> .NET based  services. Now, I'm involved in ditching the .NET  work,
>>> in favor of Axis.
>>>
>>> Anyway, we have a few Mac clients, which send some data Base64  
>>> encoded. So, when the data gets serialized into the SOAP packet,  
>>> the  parameter might look something like this:
>>>
>>> <myTag xsi:type="xsd:base64">AAAA</myTag>
>>>
>>> For some reason, Mac OS X, 10.3, claims the type is "base64", when  
>>> it  really should be "base64Binary". Why it does this, I don't  
>>> know. (For  those who are curious, 10.4, or "Tiger", does flag the  
>>> parameter as a  base64Binary)
>>>
>>> What I'm trying to tell Axis, is that if you see a param flagged  as
>>> a  "base64", then treat it as a "base64Binary".
>>>
>>> My guess is that I can accomplish this by adding a "typeMapping"  
>>> tag  in my "deploy.wsdd" file:
>>>
>>> <typeMapping qname="xsd:base64"
>>>   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>>   languageSpecificType="java:byte[]"
>>>   serializer="org.apache.axis.encoding.ser.Base64SerializerFactory"
>>>    
>>> deserializer="org.apache.axis.encoding.ser.Base64DeserializerFactory"
>>>   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>>> />
>>>
>>> But this seems to have no effect, as I still get a SOAP-fault  
>>> message  sent back.
>>>
>>> If anyone has done something like this, I'd really like to know  
>>> how,  as I'd like to continue to allow Mac OS X users to connect  to
>>> my Web  Service.
>>>
>>> Thanks for any help in this regard,
>>> -Dan.
>>>
>>> P.S. - I'm using Eclipse 3.1M6, with the latest Web Tools, which  
>>> includes Axis 1.1.
>>>
>>>
>>>
>>
>>
>
>
>