opensubscriber
   Find in this group all groups
 
Unknown more information…

a : axis-user@xml.apache.org 18 February 2005 • 2:50PM -0500

Re: Custom Deserializer/typeMapping problem
by Sebastien Mayemba Mbokoso

REPLY TO AUTHOR
 
REPLY TO GROUP




Mike, if you want to use your own serializer/deserializer try to adapt
this tutorial :

http://www-106.ibm.com/developerworks/webservices/library/ws-castor/

They do a data binding with castor. So they need to integrate in their
WSDD and the generate stubs Castor serializer/deserializer. Look at
what they do.

------------
Sebastien

On Fri, 18 Feb 2005 09:30:30 +0900, Bill Keese
<billk@tech...> wrote:
>  Since you are in wrapped/literal mode shouldn't the encoding style be ""?
> Or you could try using <beanMapping> rather than <typeMapping>.  Also, the
> <msgT> tag looks strange.  It seems unnecessary but if you do add then I
> think you need a deserializer for that structure too.
>  
>  Mike Cassisa wrote:
>  
>  
>
> I am having a problem getting my Deserializer to be used after registering
> it's Factory with the typeMapping element in the dd.  I have tried many
> different combinations but regardless of what I do the SimpleDeserializer is
> selected.  I believe this is happening because axis is interpreting the
> entire message as a String instead of my desired type.   I am somewhat new
> to axis so any help from those of you who really understand the framework
> would be much appreciated.
>
>  
>
> There have been several similar threads on this with this one being the
> closest to my problem, however the solution needs to be on the server not
> the client:
>
> List:       axis-user
>
> Subject:    (resolved) RE: deserializing nested complex types
>
> From:       Mitch Gitman <mgitman () usa ! net>
>
> Date:       2002-12-06 21:36:19
>
>  
>
> From my dd:
>
>     <typeMapping qname="baldue:BalanceDueMsg"
>
>         xmlns:baldue="http://balancedue.websvc.csp.leapwireless.com"
>
>        
> languageSpecificType="java:com.leapwireless.csp.websvc.balancedue.BalanceDueMsgType"
>
>        
> serializer="com.leapwireless.csp.websvc.balancedue.axis.BalanceDueSerializerFactory"
>
>        
> deserializer="com.leapwireless.csp.websvc.balancedue.axis.BalanceDueDeserializerFactory"
>                                                                
>
>         encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
>
>  
>
> My web service class' relevant method signature (this is a java rpc
> service):
>
> public BalanceDueMsgType getBalanceDue(BalanceDueMsgType msgT)
>
>  
>
> I am using JDK 1.4.2, JBoss 3.2.5/JBoss.Net/Axis 1.1
>
>  
>
> Basically my DeserializerFactory/Deserializer never gets a chance to deal
> with the incoming request message (java rpc web service).  The
> SimpleDeserializer always gets these and returns a this error when dealing
> with the nested type in the message:
>
> org.xml.sax.SAXException: SimpleDeserializer encountered a child element,
>
> which is NOT expected, in something it was trying to deserialize.
>
>  
>
> I set a breakpoint in the Eclipse debugger in the SimpleDeserializer
> onChildElement method (which throws the exception) and this is what the
> variables look like in that method:
>
> this= SimpleDeserializer  (id=212)
>
>             activeDeserializers= HashSet  (id=229)
>
>             attributeMap= null
>
>             cacheStringDSer= null
>
>             cacheXMLType= null
>
>             componentsReadyFlag= false
>
>             constructor= Constructor  (id=236)
>
>             defaultType= null
>
>             id= null
>
>             isEnded= false
>
>             isHref= false
>
>             isNil= false
>
>             javaType= Class (java.lang.String) (id=200)//Based on other
> problems like this one I believe the problem is here, i.e. axis thinks this
> is a string type.
>
>             myElement= null
>
>             myElements= null
>
>             myIndex= 0
>
>             propertyMap= null
>
>             targets= Vector  (id=241)
>
>             typeDesc= null
>
>             val= CharArrayWriter  (id=246)
>
>             value= null
>
>             xmlType= QName  (id=249)
>
>                         localPart= "string"
>
>                         namespaceURI= "http://www.w3.org/2001/XMLSchema"
>
> namespace= "http://balancedue.websvc.csp.leapwireless.com"
>
> localName= "BalanceDueMsg"
>
> prefix= ""
>
> attributes= NullAttributes  (id=205)
>
> context= DeserializationContextImpl  (id=213)
>
>  
>
>  
>
> Most interesting here are the values of the namespace and localName local
> variables (which are the ones I want) and the value of the
> SimpleDeserializer.javaType field  which is set to a String when it should
> be BalanceDueMsgType.
>
> Based on the debugger variables above, the value of the curElement field
> inside of the context variable has this data (which is what was intended):
>
> <BalanceDueMsg xmlns="http://balancedue.websvc.csp.leapwireless.com">
>
>                     <accountNum>ACCOUNTNUMBER</accountNum>
>
>                     <sessionId>STRING</sessionId>
>
>                     <balanceData/>
>
>                 </BalanceDueMsg>
>
>  
>
> The client I am using is a little gizmo in Oxygen XML that prepares the raw
> xml so you can edit it manually and then sends it… so I am not using any
> wsdl2java stubs or anything like that.  This tool bases everything off the
> wsdl/schema and is more rigorous than most in terms of validation.  Also the
> information is getting to the correct place in the correct way with the
> exception of the Deserializer that is chosen.
>
>  
>
> Here is the SOAP input and response:
>
> <SOAP-ENV:Envelope
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>
>     <SOAP-ENV:Header/>
>
>     <SOAP-ENV:Body>
>
>         <oxy:getBalanceDue
>
>             xmlns:oxy="http://balancedue.websvc.csp.leapwireless.com"
>
>            
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>
>             <msgT>
>
>                 <BalanceDueMsg
>
>                     xmlns="http://balancedue.websvc.csp.leapwireless.com">
>
>                     <accountNum>ACCOUNTNUMBER</accountNum>
>
>                     <sessionId>STRING</sessionId>
>
>                     <balanceData/>
>
>                 </BalanceDueMsg>
>
>             </msgT>
>
>         </oxy:getBalanceDue>
>
>     </SOAP-ENV:Body>
>
> </SOAP-ENV:Envelope>
>
>  
>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>
>     <soapenv:Body>
>
>         <soapenv:Fault>
>
>             <faultcode>soapenv:Server.userException</faultcode>
>
>             <faultstring>org.xml.sax.SAXException: SimpleDeserializer
>
>                 encountered a child element, which is NOT expected, in
> something
>
>                 it was trying to deserialize.</faultstring>
>
>             <detail/>
>
>         </soapenv:Fault>
>
>     </soapenv:Body>
>
> </soapenv:Envelope>
>
>  
>
> Mike Cassisa
>
> Software Engineer
>  
>
> Cricket Communications
>  
>
> 10307 Pacific Center Court
>  
>
> San Diego, CA 92121
>  
>
> 858-882-6096 Office
>  
>
>  
>  
>
> A good solution applied with vigor now is better
>  
>
> than a perfect solution applied ten minutes later.
>  
>
>                             - General George S. Patton Jr.
>
>

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.