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

Reply via email to