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">
    <session xsi:type="ns1:Session">[session-data]</Session>
</ns1:Return>

In this example, the XML type is "http://session.dis.disney}Session" (you must map the "ns1" prefix to the actual namespace URI), and your Java QName would be defined like this:

new QName ("http://session.dis.disney", "Session")

See http://java.sun.com/webservices/docs/1.6/api/javax/xml/namespace/QName.html)
for more information about the Java QName class.

Note -- you cannot use the JWS deployment method if you are returning a ValueType rather than a primitive type. You must use the WSDD method.

Anne

On 4/13/06, Rhimbo <[EMAIL PROTECTED]> wrote:
Could someone tell me what are the QName arguments to the
BeanSerializerFactory and BeanDeserializerFactory constructors?

Do I instantiate QName with the name of my class:
    "disney.dis.session.PlayerSession "



I tried doing this

        QName qName = new QName("disney.dis.session.PlayerSession");
        BeanSerializerFactory bsf =
             new BeanSerializerFactory(cl, qName);
        BeanDeserializerFactory bdf =
             new BeanDeserializerFactory(cl, qName);

        call.registerTypeMapping(cl, qName, bsf, bdf);


before my "invoke" call.  I'm getting the same error.

- Exception:
org.xml.sax.SAXException: Deserializing parameter 'getSessionReturn':
could not find deserializer for type {disney.dis}PlayerSession
        at
org.apache.axis.message.RPCHandler.onStartChild (RPCHandler.java:277)
        at
org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)



I don't know if I'm on the right track or not.  Any ideas anyone?

Many thanks.

Vartan




--- Rhimbo <[EMAIL PROTECTED]> wrote:

> Hi Alick,
>
> Thanks for the reply.  Below is the code I'm running.
>
> I am returning an instance of a class called PlayerSession from my
> web service.  How do I specify the return type?  Is this call
> correct?
>       call.setReturnType(new QName("PlayerSession"));
>
> I'm getting the error when I run my DII client:
>
> org.xml.sax.SAXException: Deserializing parameter 'getSessionReturn':
> could not find deserializer for type {disney.dis}PlayerSession
>         at
> org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
>         at
>
org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
>
>
>
> Here is the "whole" code:
>
>       ServiceFactory serviceFactory = ServiceFactory.newInstance();
>       Service service = new org.apache.axis.client.Service();
>
>       Call call = (Call) service.createCall();
>       call.setTargetEndpointAddress(new java.net.URL(sessionEndpoint));
>
>       call.addParameter(new QName("uid"),
>                         new QName("int"),
>                         ParameterMode.IN);
>       call.addParameter(new QName("productId"),
>                         new QName("string"),
>                         ParameterMode.IN );
>       call.addParameter(new QName("sessionId"),
>                         new QName("int"),
>                         ParameterMode.IN);
>       call.addParameter(new QName("context"),
>                         new QName("string"),
>                         ParameterMode.IN);
>       call.setReturnType(new QName("PlayerSession"));
>
>       Integer userID = new Integer(100);
>       String productID = new String("PP_TTO");
>       Integer sessionID = new Integer(98765);
>       String context = new String("Some string with text! ");
>       Object [] args =
>         new Object [] {userID, productID, sessionID, context};
>
>       QName opName = new QName("getSession");
>       call.invoke(opName, args);
>
>
> Many thanks,
>
> Vartan
>
>
>
>
>
> --- Alick Buckley <[EMAIL PROTECTED]> wrote:
>
> >
> > Hi Rhimbo,
> >
> > I have been setting the return type on the OperationDesc using the
> > following
> > QNames.
> >
> > In this example the "com.acme.service.soap.Employee" bean is being
> > returned.
> >
> > new javax.xml.namespace.QName ( "http://soap.service.acme.com",
> > "Employee" )
> > ) ;
> >
> > For primitive types
> >
> > new javax.xml.namespace.QName ( "http://www.w3.org/2001/XMLSchema",
> > "int" )
> > ) ;
> > new javax.xml.namespace.QName ( "http://www.w3.org/2001/XMLSchema",
> > "long" )
> > ) ;
> > new javax.xml.namespace.QName ( "http://www.w3.org/2001/XMLSchema",
> > "float"
> > ) ) ;
> > new javax.xml.namespace.QName ( " http://www.w3.org/2001/XMLSchema",
> > "double"
> > ) ) ;
> > new javax.xml.namespace.QName ( " http://www.w3.org/2001/XMLSchema",
> > "boolean" ) ) ;
> >
> > new javax.xml.namespace.QName ( "http://www.w3.org/2001/XMLSchema ",
> > "base64Binary" ) ) ;
> > new javax.xml.namespace.QName ( "http://www.w3.org/2001/XMLSchema",
> > "string"
> > ) ) ;
> >
> >
> > -----Original Message-----
> > From: Rhimbo [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, 14 April 2006 3:18 AM
> > To: Axis users
> > Subject: How to set return type with QName in DII client?
> >
> >
> > Can anyone point me to a _good_ explanation of QName?  Specifically,
> > I'm having trouble setting the return type for a call to a web
> > service client that returns a Java Bean.
> >
> > A web service end point returns an instance of "Session", which is
> > an interface I defined.  Actually it returns an instance of
> > "PlayerSession", which is a Java Bean that implements the "Session"
> > interface.
> >
> > I'm trying this:
> >
> >     String myEndpoint = " http://localhost:8080/axis/services/....."
> >
> >     Service service = new Service();
> >     Call call = (Call) service.createCall();
> >     call.setTargetEndpointAddress(new java.net.URL(myEndpoint));
> >     call.setOperationName("getSession");
> >
> >     call.addParameter(new QName("uid"),
> >                   new QName("int"),
> >                       ParameterMode.IN);
> >     Integer i1 = new Integer(100);
> >     call.setReturnType(new QName("Session"));         <--------
> >
> >     call.invoke(new QName("getSession"), new Object [] {i1});
> >
> > The line at "<---" is giving me trouble.  What do I enter here?
> >
> > The org.apache.axis.client.Call Javadoc for
> >     setReturnType(QName type)
> > says
> >     type - QName of the return value type.
> >
> > (not terribly useful).
> >
> > The Javadoc for
> >     setReturnType(QName xmlType,
> >                   java.lang.Class javaType)
> > says
> >     xmlType - - QName of the data type of the return value
> >     javaType - - Java class of the return value
> >
> > Hmm.  What is the QName?  What is the "local part" and what is
> > the namespace URI?
> >
> > When I execute my client, I get the following exception:
> >
> > ; nested exception is:
> >         org.xml.sax.SAXParseException: Premature end of file.
> >
> >
> > Can anyone point me to some good documentation, something other
> > than the W3C "Namespaces in XML" document?
> >
> >
> > Thanks,
> >
> > V
> >
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam?  Yahoo! Mail has the best spam protection around
> > http://mail.yahoo.com
> >
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>


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

Reply via email to