axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rhimbo <rhi...@yahoo.com>
Subject [SPAM] Re: SAXException: could not find deserializer for type
Date Sat, 15 Apr 2006 00:43:35 GMT
Hi all,

Anne, no need to respond.  I got it to work.  Here is a summary
of my experience with this problem.  

The problem was my "beanMapping" statement in my WSDD file.

    <beanMapping qname="ns:Session" xmlns:ns="disney.dis.session"
       languageSpecificType="java:disney.dis.session.Session"/>


For some reason the deserializer didn't like the dots in the
"disney.dis.session".  I changed it to "dis" and everything 
worked.  

Well, almost.  The "ns:Session" was a second problem.  I was
getting the error:

org.xml.sax.SAXException: Unable to create JavaBean of type
disney.dis.session.Session.  Missing default constructor?  Error was:
java.lang.InstantiationException: disney.dis.session.Session.


"Session" is my interface.  I changed the WSDD to this:

   <beanMapping qname="ns:PlayerSession" xmlns:ns="dis"
       languageSpecificType="java:disney.dis.session.PlayerSession"/>
 

and changed my code accordingly to return an instance of the
"PlayerSession" class (that implements Session).  Then it worked 
fine.  

Am I correct in assuming that one can't specify a Java interface
as the return type?  


Vartan




--- Rhimbo <rhimbo@yahoo.com> wrote:

> Anne,
> 
> First, I appreciate the time you take to help.  Thank you.
> 
> Can you indulge me a bit more.  I think I followed your instructions
> accurately.  But I'm getting errors still.
> 
> I am looking at my WSDL and not sure it's correct based on your 
> last email.
> 
> My interface is "Session".  My implementing class is "PlayerSession".
> In both files I define this method:
>       public Session testSessionReturn()
> 
> 
> Here is my WSDD file:
> 
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
>   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
>   <service name="disSessionManagement" provider="java:RPC">
>     <parameter name="className" 
>                value="disney.dis.session.SessionManager"/>
>     <parameter name="allowedMethods" value="*"/>
>     <parameter name="scope" value="application"/>
> 
>     <beanMapping qname="ns:Session" xmlns:ns="disney.dis.session"
>        languageSpecificType="java:disney.dis.session.Session"/>
>   </service>
> </deployment>
> 
> 
> I added the "beanMapping" construct.  I deployed this via:
> 
> $ java org.apache.axis.client.AdminClient disSessionDeploy.wsdd
> Processing file disSessionDeploy.wsdd
> <Admin>Done processing</Admin>
> $
> 
> 
> Here is the beginning of my wsdl when I go to 
>        http://localhost:8080/..../?wsdl 
> 
> <wsdl:types>
>    <schema targetNamespace="disney.dis.session">
>       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
>       <complexType abstract="true" name="Session">
> 	<sequence>
>           <element name="context" nillable="true" type="xsd:string"/>
>           <element name="creationTime" nillable="true" 
>                    type="xsd:dateTime"/>
>           <element name="expirationTime" nillable="true" 
>                    type="xsd:dateTime"/>
>           <element name="productId" nillable="true" type="xsd:string"/>
>           <element name="sessionId" type="xsd:int"/>
>           <element name="uid" type="xsd:int"/>
>         </sequence>
>       </complexType>
>    </schema>
> </wsdl:types>
> 
> 
> The return message is:
> 
> <wsdl:message name="testSessionReturnResponse">
>    <wsdl:part name="testSessionReturnReturn" type="tns1:Session"/>
> </wsdl:message>
> 
> 
> Under <wsdl:portType name="SessionManager"> I have this:
> 
> <wsdl:operation name="testSessionReturn">
>    <wsdl:input message="impl:testSessionReturnRequest"    
>                name="testSessionReturnRequest"/>
>    <wsdl:output message="impl:testSessionReturnResponse" 
>                 name="testSessionReturnResponse"/>
> </wsdl:operation>
> 
> 
> 
> 
> Is it correct that the targetNamespace is "disney.dis.session"?
> Should it be reversed as you wrote in your email 
> (http://session.dis.disney)?   Or, do _I_ need to specify it in
> reverse order in my WSDD file?  
> 
> Does it matter as long as it matches whatever is I specify as 
> the URI in my QName?  
> 
> Must the namespace name reflect any actual package name? 
> 
> Here is my client code:
> 
>  void testSessionReturn()
>   {
>     try
>       {
> 	String namespaceURI = "http://disney.dis.session";
> 	String localPart = "testSessionReturn";
> 
> 	ServiceFactory serviceFactory = ServiceFactory.newInstance();
> 
> 	QName serviceQName = new QName(namespaceURI, localPart);
> 	Service service = serviceFactory.createService(serviceQName);
> 
> 	QName portName = new QName(sessionEndpoint);
> 	Call call = (org.apache.axis.client.Call) 
> 	  service.createCall(portName, localPart);
> 
> 	URL endpointURL = new URL(sessionEndpoint);
> 
> 	call.setOperationName("testSessionReturn");
> 	call.setTargetEndpointAddress(endpointURL);
> 
> 	Class cl = Class.forName("disney.dis.session.Session");
> 	QName className = new QName("disney.dis.session.Session");
> 
> 	BeanSerializerFactory bsf = 
> 	  new BeanSerializerFactory(cl, className);
> 	BeanDeserializerFactory bdf = 
> 	  new BeanDeserializerFactory(cl, className);
> 	call.registerTypeMapping(cl, className, bsf, bdf);
> 
> 	System.out.println("testSessionReturn5");
> 
> 	call.invoke();
> 
> 	System.out.println("testSessionReturn6");
>       }
>     catch (Exception ex)
>       {
> 	System.out.println(ex.getMessage());
>       }
>   }
> 
> 
> 
> I get the following error:
> 
> ; nested exception is:
>         java.lang.NullPointerException
> $
> 
> 
> 
> I need to get log4j working on my client so I can see errors from 
> the AXIS libs.  
> 
> But I'm wondering what is basically wrong with the way I set up
> my call, specify my QName's and so forth.
> 
> Many thanks to anyone who has ideas.
> 
> Vartan
> 
> 
> 
> 
> 
> 
> 
> --- Anne Thomas Manes <atmanes@gmail.com> wrote:
> 
> > Vartan,
> > 
> > The QName is not the name of the class. As I replied to you
> yesterday,
> > a
> > QName is a qualified name (in XML) that has two parts. The first part
> > is a
> > namespace (a URI), the second part is the local name ("Session"). In
> > your
> > particular case, the QName refers to the XML type of your return
> value.
> > The
> > XML type information is specified in the WSDL (and the WSDD if the
> > service
> > is built with Axis). For example, (assuming that you are using
> > RPC/encoded,
> > which is the default in Axis) the WSDL would define your return
> message
> > as:
> > 
> > <wsdl:message name="SessionResponse>
> >     <wsdl:part name="session" type="impl:Session"/>
> > </wsdl:message>
> > 
> > In this case, the type QName is "impl"Session". (The structure of the
> > "impl:Session" type should be defined in the <wsdl:types> section
> using
> > XML
> > Schema.) The "impl" prefix refers to your WSDL targetNamespace. Given
> > your
> > package name, I would guess that the namespace URI is "
> > http://session.dis.disney", but I suggest you verify that.
> > 
> > If you are using RPC/encoded (the default) then the XML type
> > information is
> > also specified on the wire. For example, your return message will
> > include
> > something like this:
> > <ns1:Return xmlns:ns1="http://session.dis.disney">
> 
=== message truncated ===


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Mime
View raw message