Joe,
There is code to [de-]serialize ArrayList that was added after 2.3.1. You
can see it at
http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-soap/java/src/org/apache/so
ap/encoding/soapenc/CollectionSerializer.java?rev=HEAD&content-type=text/pla
in. Basically, it delegates to the VectorSerializer, but retains
information about the actual type that was serialized, so it can deserialize
correctly.
Scott Nichol
----- Original Message -----
From: "Joe Ryan" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, September 20, 1999 1:15 PM
Subject: Re: Serializer probs..
> I have just had this same problem of serializing/deserializing ArrayLists.
> Amazingly after searching all through the lists and surfing the web, it
> seemed like nobody had done it. I know that in Axis release it looks
> possible, but for the moment I am tied into SOAP 2.2 so this isn't an
> option.
>
> In the end I wrote the serializer/deserializer myself, - I'll paste java
> code in below. Note that my class ObjectList extends ArrayList, so for a
> pure serializer of ArrayList just replace all references of ObjectList
with
> ArrayList and it should work fine.
>
> cheers, Joe.
>
>
>
> public class ObjectListSerializer implements Serializer, Deserializer {
>
> public void marshall(String inScopeEncStyle, Class javaType, Object src,
> Object context, Writer sink, NSStack nsStack,
> XMLJavaMappingRegistry xjmr, SOAPContext ctx)
> throws IllegalArgumentException, IOException {
>
> nsStack.pushScope();
> if ((src != null) &&
> !(src instanceof ObjectList)) {
> throw new IllegalArgumentException("Tried to pass a '" +
> src.getClass().toString() + "' to
> ObjectListSerializer");
> }
> Iterator it;
> ObjectList objList = (ObjectList)src;
> it = objList.iterator();
> if (src == null) {
>
> SoapEncUtils.generateNullStructure(inScopeEncStyle,javaType,context,sink,
> nsStack,xjmr);
> }
> else {
>
> SoapEncUtils.generateStructureHeader(inScopeEncStyle,javaType,context,
> sink,nsStack,xjmr);
> sink.write(StringUtils.lineSeparator);
> for (Iterator i = it; i.hasNext(); ) {
> nsStack.pushScope();
> Object value = i.next();
> if (value == null) {
> SoapEncUtils.generateNullStructure(inScopeEncStyle,
> Object.class,
> "item", sink, nsStack,
xjmr);
> }
> else {
> Class actualComponentType = value.getClass();
> xjmr.marshall(inScopeEncStyle, actualComponentType, value,
> "item",
> sink, nsStack, ctx);
> }
> sink.write(StringUtils.lineSeparator);
> nsStack.popScope();
> }
> sink.write("</" + context + '>');
> }
> nsStack.popScope();
> }
>
> public Bean unmarshall(String inScopeEncStyle, QName elementType, Node
> src,
> XMLJavaMappingRegistry xjmr, SOAPContext ctx)
> throws IllegalArgumentException {
> Element root = (Element)src;
> if (SoapEncUtils.isNull(root)) {
> return new Bean(ObjectList.class, null);
> }
> ObjectList objList = new ObjectList();
> Element tempEl = DOMUtils.getFirstChildElement(root);
> while (tempEl != null) {
> String declEncStyle =
> DOMUtils.getAttributeNS(tempEl,Constants.NS_URI_SOAP_ENV,
>
> Constants.ATTR_ENCODING_STYLE);
> String actualEncStyle = declEncStyle != null
> ?
> declEncStyle
> :
> inScopeEncStyle;
> QName declItemType = SoapEncUtils.getTypeQName(tempEl);
> QName actualItemType = declItemType;
>
> Bean itemBean = xjmr.unmarshall(actualEncStyle,
> actualItemType, tempEl, ctx);
> objList.add(itemBean.value);
> tempEl = DOMUtils.getNextSiblingElement(tempEl);
> }
> return new Bean(ObjectList.class, objList);
> }
> }
> // end of class
>
> ----- Original Message -----
> From: Rose, Angus H <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, August 16, 2002 8:34 AM
> Subject: RE: Serializer probs..
>
>
> > I thought of that, but I'm just surprised that arraylists aren't
> supported.
> > Thanks for you help though
> >
> > Angus
> >
> > -----Original Message-----
> > From: Tudor, Liviu @Cimage [mailto:[EMAIL PROTECTED]]
> > Sent: 15 August 2002 16:28
> > To: '[EMAIL PROTECTED]'
> > Subject: RE: Serializer probs..
> >
> >
> > Serialize it as a normal array! (i.e. in your bean provide a property
that
> > has a get/set pair returning an array rather than an array list! )
> >
> > Liviu Tudor
> >
> > Cimage Novasoft Limited
> > : www.cimagenovasoft.com <http://www.cimagenovasoft.com/>
> > + [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> > (Fax: +44 (0)1344 767701
> > (Direct Line: +44 (0)1344 767759
> > *Centennial Court, Easthampstead Road, Bracknell, BERKS, RG12 1JZ
> >
> > Sun Java Certified Programmer
> > "C makes it easy to shoot yourself in the foot; C++ makes it harder, but
> > when you do, it blows away your whole leg." Bjarne Stroustrup
> >
> >
> >
> > -----Original Message-----
> > From: Rose, Angus H [mailto:[EMAIL PROTECTED]]
> > Sent: 15 August 2002 16:24
> > To: Soap-User (E-mail)
> > Subject: Serializer probs..
> >
> >
> > Hello All,
> > once again I need somebody's help - thank God for user
lists.
> >
> > Basically, I'm trying to pass an ArrayList back from a service, and get
> this
> > error message:
> > ' Ouch, the call failed:
> > Fault Code = SOAP-ENV:Server
> > Fault String = java.lang.IllegalArgumentException: No Serializer found
to
> > serialize a 'java.util.ArrayList' using encoding style
> > 'http://schemas.xmlsoap.org/soap/encoding/'.'
> >
> > Any suggestions?
> >
> > Thanks in advance
> >
> > Angus
> >
> > --
> > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> >
> > --
> > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> >
> > --
> > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>