I apologize for teh duplicate post (typing error)... Xerces tends to be a growing problem on my system. It seems every piece of software I install these days installs a newer version of xerces. I am, however, pointing to xerces 1.4.4 in the classpath in the tomcat script (and have verified that xerces is not in my jre ext dir). I attached the code to the bottom of this email.
todd -----Original Message----- From: Henk Schipper [mailto:[EMAIL PROTECTED]] Sent: Monday, June 10, 2002 10:18 AM To: [EMAIL PROTECTED] Subject: RE: Problems with Serializers/Deserializers Todd, Place than also the definition for the deploiment. We all can have a look. Question: Are you using xerces? if so, which version? Greetz, Henk Schipper. -----Original Message----- From: Scott Nichol [mailto:[EMAIL PROTECTED]] Sent: Monday, 10 June, 2002 4:05 PM To: [EMAIL PROTECTED] Subject: Re: Problems with Serializers/Deserializers Todd, If you can post the code to this list, someone may be able to track down the problem. Scott Nichol ----- Original Message ----- From: "Todd D. Johnson" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Sunday, June 09, 2002 8:06 PM Subject: Problems with Serializers/Deserializers > I am using the following environment > java 1.4 > Tomcat 4.0.3 > Soap 2.3 > > 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) > Could this be problem with implementing the serializer and deserializer in > my class?? > > Thanks, > > Todd D. Johnson > > President > Salar, Inc. > 2400 Boston St. > Suite 350 > Baltimore, MD 21224 > > 410.327.9153 x 3 PH > 410.327.4086 FAX > > [EMAIL PROTECTED] > www.salarinc.com > > 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(); }