2010-12-08 20 views
3

Ich versuche, eine Menge von Datenobjekten mit JAXB Bindung Anmerkungen zu annotieren, so dass dieser Satz von Datenobjekten kann richtig als JSON mit CXF gemarshallt werden. Ich bin mit einer Klasse in ein Problem laufen, die im Grunde um Arraylist nur ein Wrapper ist:Konvertieren Liste Wrapper zur Liste JAXB mit

class IntegerListWrapper { 
    private ArrayList<Integer> integerList; 
    ... 
} 

Einige meiner Datenobjekte dieser Klasse verweisen:

class DataObjectFoo { 
    ... 
    public IntegerListWrapper getDataIDs() { 
     ... 
    } 
    ... 
} 

Ich bin für die Ausgabe der Suche zu sein:

"DataObjectFoo" : { 
    "dataIDs" : [1, 2, ..., n] // Array of Data IDs 
} 

ich versuchte, die idlist Klasse selbst mit Anmerkungen versehen, aber es hat mich mit diesem:

Ich habe versucht, eine XMLAdapter schreiben, aber gemischte Ergebnisse erhielt:

// Throws an error... "Can't bind to interface" 
public final class IDListAdapter extends XmlAdapter<List<Integer>, IDList> { 
// Does not produce any output 
public final class IDListAdapter extends XmlAdapter<ArrayList<Integer>, IDList> { 
// Produces output with extra nesting like above 
public final class IDListAdapter extends XmlAdapter<Integer[]>, IDList> 

So habe ich zwei Fragen:

  1. Wie bekomme ich die gewünschte Ausgabe (ohne idlist auf etwas anderes in meinem Datenumwandlungs Objekte)?
  2. Warum hat der zweite XmlAdapter (mit ArrayList) keine Ausgabe erzeugt?

Antwort

0

Ich bin nicht sicher, Sie können mit der zusätzlichen Wrapper-Klasse um ihn herum. Können Sie nicht einfach die "getDataIds()" Call Return List machen?

+0

Die Integer-Wrapper-Klasse wird von vielen externen Quellen verwendet, so dass ich hoffte, dies zu vermeiden. Ich habe versucht, einen XmlAdapter (erweitert XmlAdapter ). Dies gab mir das Format, nach dem ich suchte, aber es war ein String und kein Integer-Array. Ich hoffe immer noch (für etwas länger), dass es einen Weg gibt, dies zu tun. – Laurent