Have you tried send the URL as a java.lang.String? You could reconstruct the URL on the otherside.
--- David Turner <[EMAIL PROTECTED]> wrote: > Has anyone developed their own serializers & > deserializers for their > classes instead of using the BeanSerializer? > > I've attempted to write my own > serializer/deserializer for the > java.net.URL class in order to pass URL's to my > 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 the > BeanSerializer and I > still get the above exception. > > Anybody know what's going wroing? How do you set > this up on both the > client and server (deployment descr)? > > 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:faultListener> > > <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); > } > } > __________________________________________________ Do You Yahoo!? Make a great connection at Yahoo! Personals. http://personals.yahoo.com
