Hi all, I have just joined this list and have searched the archives for my answer, but I still need some help.
What I want: Someone to explain the deployment descriptor settings to me, specifically the ones dealing with mappings for Serialisers/Deserialisers. I have used a test service (details below) to send a hashtable from the Apache 2.2 SOAP Server to a perl SOAP::Lite client. This works OK. I then added my custom Object (Test.java) to the returned hashtable, and tried to register a mapping for Apache Soap to serialise this Object. This is where I think I have made a mistake. I don't understand the xmlns and the qname attributes - what they do or what to set them to. When I run my client I get an error java.lang.IllegalArgumentException: No Serializer found to serialize a 'onjava.Test' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/' It looks like the error is on the java server side when it is trying to flatten the Object to XML. I would really appreciate any help on this one, Thanks in advance. Robin Keech Software Engineer Dialogue Communications Ltd What I have got so far: A DeploymentDescriptor.xml: <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:onjavaserver"> <isd:provider type="java" scope="Application" methods="getObj"> <isd:java class="onjava.TestService"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:mappings> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding" xmlns:x="Test" qname="x:TestElem" javatype="onjava.Test" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> </isd:mappings> </isd:service> A Test object ( a bean): package onjava; import java.beans.*; public class Test extends Object implements java.io.Serializable { private String name; private String address; /** Creates new Test */ public Test() { } public String getName () { return name; } public void setName (String value) { name = value; } public String getAddress () { return address; } public void setAddress (String value) { address = value; } } The Soap Service: package onjava; import java.util.*; public class TestService { public Hashtable getObj() { Hashtable hashInner = new Hashtable(); Test t = new Test(); t.setName("Robin"); t.setAddress("blah"); hashInner.put("obj", t); hashInner.put("one", new Integer(1)); hashInner.put("world", new String("World")); Hashtable hashTop = new Hashtable(); hashTop.put("h1", hashInner); hashTop.put("h2", hashInner); return hashTop; } } The error from the client in full (using trace in SOAP::Lite to get full debug of all SOAP/XML envelopes): [robin@aladin API]$ ./soap_test.pl Initialising SOAP service at URI: urn:onjavaserver PROXY: http://trilo.dialogue.net:8080/soap/servlet/rpcrouter SOAP::Transport::new: () SOAP::Serializer::new: () SOAP::Deserializer::new: () SOAP::Parser::new: () SOAP::Lite::new: () SOAP::Transport::HTTP::Client::new: () SOAP::Lite::call: () SOAP::Serializer::envelope: () SOAP::Serializer::envelope: subtract SOAP::Data::new: () SOAP::Data::new: () SOAP::Data::new: () SOAP::Data::new: () SOAP::Transport::HTTP::Client::send_receive: HTTP::Request=HASH(0x83959d0) SOAP::Transport::HTTP::Client::send_receive: POST http://trilo.dialogue.net:8080/soap/servlet/rpcrouter Accept: text/xml Accept: multipart/* Content-Length: 444 Content-Type: text/xml; charset=utf-8 SOAPAction: "urn:onjavaserver#subtract" <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP- ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"><SOAP- ENV:Body><namesp1:subtract xmlns:namesp1="urn:onjavaserver"/></SOAP- ENV:Body></SOAP-ENV:Envelope> SOAP::Transport::HTTP::Client::send_receive: HTTP::Response=HASH(0x84bbd54) SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Server Error Date: Tue, 14 May 2002 12:22:09 GMT Server: Apache Tomcat/4.0.3 (HTTP/1.1 Connector) Content-Length: 3561 Content-Type: text/xml; charset=utf-8 Client-Date: Tue, 14 May 2002 12:27:51 GMT Client-Peer: 192.168.2.9:8080 Set-Cookie: JSESSIONID=820FDDD9547C3ED3B76F172216E01926;Path=/soap <?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/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>java.lang.IllegalArgumentException: No Serializer found to serialize a 'onjava.Test' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.</faultstring> <faultactor>/soap/servlet/rpcrouter</faultactor> <detail> <stackTrace>[SOAPException: faultCode=SOAP-ENV:Server; msg=java.lang.IllegalArgumentException: No Serializer found to serialize a 'onjava.Test' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.] at org.apache.soap.providers.RPCJavaProvider.invoke(RPCJavaProvider.java:138) at org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java: 287) 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 (ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 566) 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.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java: 246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 564) 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.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke (ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 564) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java: 564) 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: 566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.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:496) </stackTrace> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP::Deserializer::deserialize: () SOAP::Parser::decode: () SOAP::SOM::new: () SOAP::Lite::DESTROY: () SOAP::Serializer::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () SOAP::Data::DESTROY: () SOAP::Transport::DESTROY: () SOAP::Transport::HTTP::Client::DESTROY: () SOAP::SOM::DESTROY: () SOAP::Deserializer::DESTROY: () SOAP::Parser::DESTROY: () SOAP-ENV:Server, java.lang.IllegalArgumentException: No Serializer found to serialize a 'onjava.Test' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'., HASH(0x855d2c8)
