All good, just so long as you don't go out on a limb. ;-) - 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: > Thanks Dennis. > > I was barking up the wrong tree. Well, I was barking at the tree when I > should have > been looking at a branch. It was a collection of Enums inside the > StationInfo that I > was doing wrong somehow. Cleaning that all up made it happy. > > thanks, > Linus > > > Dennis Sosnoski wrote: > >> 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 >> > > ------------------------------------------------------------------------- > 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