There is class loader info at
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/class-loader-howto.html
although some of the info there for 4.0 already seems to be out of date for
4.0.1.

Scott

----- Original Message -----
From: "David Turner" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, October 25, 2001 10:25 AM
Subject: Serializers/Deserializers


> I've been trying to develop my own serializer & deserializer for some
> java classes such as the
> java.net.URL class in order to pass URL's to a service method, but the
> server sends back a fault:
>       Fault Code = SOAP-ENV:Server.Exception:
>       Fault String = org/apache/soap/util/xml/Deserializer
>
> I've attempted to write serializers/deserializers for a simple class
> also (class contains only Strings) instead of using the BeanSerializer
> and I
> still get the above exception.
>
> This is a critical issue...
>
> Below is the code:
>
> Deployment Descriptor
> --------------------------------------------------------------------------
------------------------------------
>
> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment";
>              id="urn:SimpleURLService">
>   <isd:provider type="java"
>                 scope="Session"
>                 methods="serviceMethod">
>     <isd:java
> class="examples.omnitide.SimpleURLService.SimpleURLService"
> 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:xsd="http://www.w3.org/1999/XMLSchema";
> qname="xsd:URL"
>              javaType="java.net.URL"
>
> xml2JavaClassName="examples.omnitide.SimpleURLService.URLDeserializer"/>
>
>   </isd:mappings>
>
> </isd:service>
>
>
>
> Client that calls soap service
> --------------------------------------------------------------------------
------------------------------------
>
>       // Map the types
>        SOAPMappingRegistry smr = new SOAPMappingRegistry();
>
>        URLSerializer ser = new URLSerializer();
>        URLDeserializer des = new URLDeserializer();
>
>        smr.mapTypes(Constants.NS_URI_SOAP_ENC, new
> QName("urn:SimpleURLService", "URL"),
>            URL.class, ser, des);
>
>        // Build the call
>        Call call = new Call();
>        call.setSOAPMappingRegistry(smr);
>        call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
>        call.setTargetObjectURI("urn:SimpleURLService");
>        call.setMethodName("serviceMethod");
>
>        Vector params = new Vector();
>        params.addElement(new Parameter("request", URL.class, url,
> null));
>        call.setParams(params);
>
>
>
> Serializer
> --------------------------------------------------------------------------
------------------------------------
>
> import java.net.URL;
>
> public class URLSerializer implements Serializer
> {
>
>   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);
>
>       URL src2 = (URL) src;
>
>       Parameter param;
>
>       param = new Parameter("URL", String.class, src2.toString(), null);
>
>       xjmr.marshall(inScopeEncStyle, Parameter.class, param, null,
>                     sink, nsStack, ctx);
>       sink.write(StringUtils.lineSeparator);
>
>       sink.write("</" + context + ">");
>
>       nsStack.popScope();
>   }
> }
>
>
>
> Deserializer
> --------------------------------------------------------------------------
------------------------------------
>
> public class URLDeserializer implements 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);
>
>     URL url = null;
>
>     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("URL"))
>         {
>             try
>             {
>                 url = new URL( (String)param.getValue() );
>             }
>             catch (Exception e)
>             {
>                 throw new IllegalArgumentException("Problem
> instantianting bean: " + e.getMessage());
>             }
>
>         }
>
>         tempEl = DOMUtils.getNextSiblingElement(tempEl);
>     }
>
>
>     return new Bean(URL.class, url);
>   }
> }

Reply via email to