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)


Reply via email to