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 <[EMAIL PROTECTED]> 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";>
>     <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";,
> 
=== message truncated ===



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

Reply via email to