Hey, thanks so much for your help.  I think I just needed someone to lay it
out for me.  I have, however come across some questions:

What is the deal with WSDL?  I noticed that the AddressBook2 sample has a
.wsdl file in the sample directory, but nothing seems to really reference
it.  How do you lock an object or service to a WSDL file?  Does apache soap
not really support .wsdl (and axis does?)

Again, thank you so much

Todd

-----Original Message-----
From: Scott Nichol [mailto:[EMAIL PROTECTED]]
Sent: Monday, June 10, 2002 4:53 PM
To: [EMAIL PROTECTED]
Subject: Re: Problems with (De)Serializers w/ Code


Todd,

You basically figured this out yourself:

>>>>
Another question: the only reference to the class GuideSerializer that is
made is at the client while building the call.  Is this correct?  Do I need
to somehow map GuideSerializer to the type Guide in the
DeploymentDescriptor???
<<<<

If, as your original message claims, Guide implements the Serializer and
Deserializer interfaces, it must be listed as the [de-]serializing class in
your
deployement descriptor, as in

          <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
                   xmlns:x="urn:tickler-guide" qname="x:guide"
                   javaType="com.salarinc.tickler.foundation.Guide"
                   java2XMLClassName="com.salarinc.tickler.foundation.Guide"

xml2JavaClassName="com.salarinc.tickler.foundation.Guide"/>

It looks, however, like you have a separate class for [de-]serialization,
GuideSerializer.  In that case, use

          <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
                   xmlns:x="urn:tickler-guide" qname="x:guide"
                   javaType="com.salarinc.tickler.foundation.Guide"

java2XMLClassName="com.salarinc.tickler.foundation.GuideSerializer"

xml2JavaClassName="com.salarinc.tickler.foundation.GuideSerializer"/>

Scott Nichol

----- Original Message -----
From: "Todd D. Johnson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, June 10, 2002 1:30 PM
Subject: Problems with (De)Serializers w/ Code


> I have attached code samples to the bottom.  I am resending bc I did not
see
> my earlier message show up on the archives.  I am using the following
> environment
> java 1.4
> Tomcat 4.0.3
> Soap 2.3
> Xerces 1.4.4
>
> I have written a simple class that implements not only the class
functions,
> but the serialization and deserialization as well.  I am having problems
> calling a simple function on the class that returns itself.  Right now the
> class has only one member (a string) and thus the marshall and unmarshall
> functions are responsible for handling just that member.  When a client
> calls the function, apache tomcat loads the constructor, calls the
function,
> but never calls the marshall function (as reported through the apache
> console).  The only thing returned to the client is
>
> Fault Code = SOAP-ENV:Server
> Fault String = java.lang.NullPointerException
>
> Does anyone have any ideas?  I've gotten the simple soap examples to run
> just fine.  (And subsequently my code and descriptor are pretty identical)
>
> It's pretty weird because I know that the marshall/unmarshall methods are
> never being accessed by the server.  The exception is being thrown at
> (RPCJavaProvider.java:138) which seems to me that it can't find a
reference
> to my (de)serializer.
>
> Another question: the only reference to the class GuideSerializer that is
> made is at the client while building the call.  Is this correct?  Do I
need
> to somehow map GuideSerializer to the type Guide in the
> DeploymentDescriptor???
>
> Thanks,
>
> Todd D. Johnson
>
> Implementing server class:
>
>     public Guide getSampleGuide(int guideSeq){
> System.out.println("Guide.getSampleGuide called");
>         setGuideName("Sample Tickler Guide");
>         //g.setGuideType("DefaultGuidePublishingAgentImpl");
>         System.out.println("Guide.getSampleGuide exiting");
>         return this;
>     }
>
> DeploymentDescriptor:
>
> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment";
> id="urn:tickler">
>      <isd:provider type="java" scope="Request" methods="getSampleGuide">
>         <isd:java class="com.salarinc.tickler.foundation.Guide"
> static="false"/>
>      </isd:provider>
>
>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListene
> r>
>      <isd:mappings>
>          <isd:map
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
>                   xmlns:x="urn:tickler-guide" qname="x:guide"
>                   javaType="com.salarinc.tickler.foundation.Guide"
>
> java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer"
>
> xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/>
>   </isd:mappings>
> </isd:service>
>
> Client code:
>
> Integer x=new Integer(7);
>         Integer y=new Integer(8);
>         final String urn= "urn:tickler";
>
>         Vector params = new Vector();
>
>         URL url = null;
>         try{
>             url = new URL("http://"; + serverhost + ":" + serverport+
> soapservlet);
>         }catch(java.net.MalformedURLException e){
>             System.out.println("Error creating a url: "+e.getMessage());
>         }
>
>         ServiceManagerClient client = new ServiceManagerClient(url);
>         try{
>             String[] apps = client.list();
>             System.out.println("Deployed Services at "+url.toString()+"
> are:");
>             for(int i = 0; i < apps.length; i++){
>                 System.out.println("\t"+apps[i]);
>                 DeploymentDescriptor desc = client.query(apps[i]);
>                 System.out.println("\t\tMethods for
> "+desc.getScriptFilenameOrString()+" are:");
>                 String[] methods = desc.getMethods();
>                 for(int j = 0; j < methods.length; j++){
>                     System.out.println("\t\t\t"+methods[j]);
>                 }
>             }
>         }catch(SOAPException e){
>             System.out.println("Could not connect to ServiceManager at
> "+url.toString()+": "+e.getMessage());
>         }
>
>         // Build the call.
> Call call = new Call();
> SOAPHTTPConnection shc = new SOAPHTTPConnection ();
>     shc.setMaintainSession (true);
>     call.setSOAPTransport(shc);
>         call.setTargetObjectURI(urn);
>
> call.setEncodingStyleURI("http://schemas.xmlsoap.org/soap/encoding/";);
>
>         call.setMethodName("getSampleGuide");
>
>         params.addElement(new Parameter("guideSeq" , Integer.class,  new
> Integer(7), null));
>
>         call.setParams(params);
>         GuideSerializer ser_0 = new GuideSerializer();
>         SOAPMappingRegistry smr = call.getSOAPMappingRegistry();
> smr.mapTypes("http://schemas.xmlsoap.org/soap/encoding/";, new QName(
>       "urn:tickler-guide", "guide"), Guide.class, ser_0, ser_0);
>   call.setSOAPMappingRegistry(smr);
>         Response resp = null;
>         try{
>             resp = call.invoke(url,"");
>         }catch(org.apache.soap.SOAPException e){
>             System.out.println("Got a soap exception while invoking
> "+e.getMessage());
>             System.exit(1);
>         }
>
>         if (resp.generatedFault()) {
>             Fault fault = resp.getFault();
>             System.out.println("Ouch, the call failed: ");
>             System.out.println("  Fault Code   = " +
fault.getFaultCode());
>             System.out.println("  Fault String = " +
> fault.getFaultString());
>         } else {
>             Parameter result = resp.getReturnValue();
>             if(result.getType() == Guide.class){
>                 Guide g = (Guide)result.getValue();
>                 System.out.println("The guide name is " +
g.getGuideName());
>             }else{
>                 System.out.println("ERROR server returned a
> :"+result.getType().toString());
>                 System.exit(1);
>             }
>
>         }
>
> Serializer/Deserializer
>
> public Bean unmarshall(String inScopeEncStyle, QName elementType,
>      Node src, XMLJavaMappingRegistry xjmr, SOAPContext ctx)
>      throws IllegalArgumentException
>      {
>        Element root = (Element)src;
>        Element tempEl = DOMUtils.getFirstChildElement(root);
>        Guide target;
>
>        try
>        {
>          target =
>            (Guide)Guide.class.newInstance
>            ();
>        }
>        catch (Exception e)
>        {
>          throw new IllegalArgumentException("Problem instantiating bean: "
>            + e.getMessage());
>        }
>
>        while (tempEl != null)
>        {
>          Bean paramBean = xjmr.unmarshall(inScopeEncStyle,
>          RPCConstants.Q_ELEM_PARAMETER,
>          tempEl, ctx);
>          Parameter param = (Parameter)paramBean.value;
>          String tagName = tempEl.getTagName();
>
>
>          if (tagName.equals("name"))
>          {
>            target.setGuideName((java.lang.String)param.getValue());
>          }
>
>          tempEl = DOMUtils.getNextSiblingElement(tempEl);
>        }
>
>        return new Bean(Guide.class, target);
>      }
>
>        public void marshall(String inScopeEncStyle, Class javaType,
>      Object src, Object context, Writer sink,
>      NSStack nsStack, XMLJavaMappingRegistry xjmr, SOAPContext ctx)
>      throws IllegalArgumentException, IOException
>      {
>
>    nsStack.pushScope();
>
>    SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType,
> context,
>      sink, nsStack, xjmr);
>
>    sink.write(StringUtils.lineSeparator);
>
>    Guide src2 = (Guide)src;
>    Parameter param;
>
>    param = new Parameter("namme", String.class, new String
>      ("Test"), null);
>    xjmr.marshall(inScopeEncStyle, Parameter.class, param, null,
>    sink, nsStack, ctx);
>    sink.write(StringUtils.lineSeparator);
>
>    sink.write("</" + context + '>');
>
>        nsStack.popScope();
>     }
>
>
>
>
> server gunk:
> </SHTTP/1.1 500 Internal Server Error Content-Type: text/xml;
charset=utf-8
> Content-Length: 3369 Date: Mon, 10 Jun 2002 14:24:09 GMT Server: Apache
> Tomcat/4.0.2 (HTTP/1.1 Connector) Set-Cookie:
> JSESSIONID=4F9E94EB66517ADC4DEAD0E2AE6E5966;Pa<?xml version='1.0'
> encoding='UTF-8'?> <SOAP-ENV:Envelope
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";> <SOAP-ENV:Body>
> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode>
> <faultstring>java.lang.NullPointerException</faultstring>
> <faultactor>/soap/servlet/rpcrouter</faultactor> <detail>
> <stackTrace>[SOAPException: faultCode=SOAP-ENV:Server;
> msg=java.lang.NullPointerException] at
> org.apache.soap.providers.RPCJavaProvider.invoke(RPCJavaProvider.java:138)
> at
>
org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:35
> 4) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:247) at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applicat
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
> va:243) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 66) at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
> va:190) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 66) at
>
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:2
> 46) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 64) at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
> at
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
> ) at org.ndardPipeline.invokeNext(StandardPipeline.java:566) at
>
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
> java:170) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 64) at
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170
> ) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 64) at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
> at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 64) at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
> :174) at
>
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
> 66) at
>
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
> at org.apache.catalina.core.CainerBase.java:943) at
>
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
> 1012) at
>
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107
> ) at java.lang.Thread.run(Thread.java:536) </stackTrace> </detail>
> </SOAP-ENV:Fault>
>
>
>


Reply via email to