Hi Linus, First off, let me point out that you don't need the List factory methods in these classes. You can instead use create-type="java.util.ArrayList" on the <collection> element of the binding. Note that you don't need to worry about generics for this - Java 5 generics are essentially only a source code artifact, and you can just use the base ArrayList type for JiBX.
That said, I don't see why you'd be getting the exception here. But from the stack trace, the exception is occurring *inside* the unmarshalling of a StationInfo (since StationInfo.JiBX_binding_unmarshal_1_0 is one of the methods in the trace), so I think the problem is actually with a List inside the StationInfo class. Hope that helps, - Dennis Dennis M. Sosnoski SOA and Web Services in Java Training and Consulting http://www.sosnoski.com - http://www.sosnoski.co.nz Seattle, WA +1-425-939-0576 - Wellington, NZ +64-4-298-6117 Linus Kamb wrote: > I wanted to switch over all my uses of [] arrays to collections. > > I'm doing what I think is the exact same thing in two different places, and > in one > case it's throwing an UnsupportedOperationException from AbstractList.add. > Maybe > someone can see where I'm messing up. > > This is using JiBX as databinding for an Axis2 web service client and server. > > The situation that works: > > class: > public class DataDiscoveryResponse > { > public List<DataItem> dataItems = new ArrayList<DataItem>(); > > // The following is required for JiBX because we're using the List > interface. > private static List<DataItem> buildDataItems() { > return new ArrayList<DataItem>(); > } > } > mapping: > <mapping type-name="esdp:DataDiscoveryResponseType" abstract="true" > class="edu.iris.ws.esdp.DataDiscoveryResponse"> > <collection field="dataItems" usage="optional" > factory="edu.iris.ws.esdp.DataDiscoveryResponse.buildDataItems"> > </collection> > </mapping> > msg: > <?xml version='1.0' encoding='UTF-8'?> > <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> > <soapenv:Body> > <esdp:listDataResponse xmlns:gml="http://www.opengis.net/gml" > xmlns:esdp="http://portal.earthscope.org"> > <esdp:DataItem xmlns:ogc="http://www.opengis.net/ogc"> > [snip] > </esdp:DataItem> > </esdp:listDataResponse> > etc. > > The situation that doesn't work: > > class: > public class StationDiscoveryResponse > { > public List<StationInfo> stations = new ArrayList<StationInfo>(); > > // required by JiBX > private static List<StationInfo>buildStations() > { > System.out.println("new station list."); > return new ArrayList<StationInfo>(); > } > } > mapping: > <mapping type-name="esdp:StationDiscoveryResponseType" abstract="true" > class="edu.iris.ws.esdp.StationDiscoveryResponse"> > <structure name="Stations"> > <collection field="stations" usage="optional" > factory="edu.iris.ws.esdp.StationDiscoveryResponse.buildStations"> > <structure name="Station" map-as="esdp:StationInfoType"/> > </collection> > </structure> > </mapping> > msg: > <?xml version='1.0' encoding='UTF-8'?> > <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> > <soapenv:Body> > <esdp:getStationsResponse xmlns:gml="http://www.opengis.net/gml" > xmlns:esdp="http://portal.earthscope.org"> > <esdp:Stations> > <esdp:Station> > [snip] > </esdp:Station> > </esdp:Stations> > etc. > > The exception trace is: > [java] java.lang.UnsupportedOperationException > [java] at java.util.AbstractList.add(AbstractList.java:151) > [java] at java.util.AbstractList.add(AbstractList.java:89) > [java] at > edu.iris.ws.esdp.JiBX_MungeAdapter.JiBX_binding_unmarshal_1_0() > [java] at > edu.iris.ws.esdp.StationInfo.JiBX_binding_unmarshal_1_0(Unknown Source) > [java] at > edu.iris.ws.esdp.JiBX_MungeAdapter.JiBX_binding_unmarshal_1_3() > [java] at > edu.iris.ws.esdp.StationDiscoveryResponse.JiBX_binding_unmarshal_1_0(Unknown > Source) > [java] at > edu.iris.ws.esdp.StationDiscoveryResponse.JiBX_binding_unmarshal_1_1(Unknown > Source) > [java] at > edu.iris.ws.esdp.JiBX_bindingStationDiscoveryResponse_access.unmarshal() > [java] at > org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2512) > [java] at > edu.iris.ws.esdp.ESPortalCDIStub.fromOM(ESPortalCDIStub.java:1222) > [java] at > edu.iris.ws.esdp.ESPortalCDIStub.getStations(ESPortalCDIStub.java:231) > [java] at > edu.iris.ws.esdp.WebServiceClient.performStationQuery(WebServiceClient.java:306) > [java] at > edu.iris.ws.esdp.WebServiceClient.performStationQuery(WebServiceClient.java:341) > [java] at > edu.iris.ws.esdp.WebServiceClient.main(WebServiceClient.java:421) > [java] org.apache.axis2.AxisFault > [java] at > edu.iris.ws.esdp.ESPortalCDIStub.fromOM(ESPortalCDIStub.java:1225) > [java] at > edu.iris.ws.esdp.ESPortalCDIStub.getStations(ESPortalCDIStub.java:231) > [java] at > edu.iris.ws.esdp.WebServiceClient.performStationQuery(WebServiceClient.java:306) > [java] at > edu.iris.ws.esdp.WebServiceClient.performStationQuery(WebServiceClient.java:341) > [java] at > edu.iris.ws.esdp.WebServiceClient.main(WebServiceClient.java:421) > > The factory method is getting called, I can see. So where is the > AbstractList coming > from? > > So the only difference that I can see is that the failing case is wrapped in > another > element. I've tried both with the collection originally null and setting it > explicitly to an ArrayList. I've tried using the create-type instead of > factory method. > > > I'm using JiBX 1.1.5 > > thanks a lot, > Linus > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > jibx-users mailing list > jibx-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jibx-users > > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ jibx-users mailing list jibx-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jibx-users