Verwendung von Convertern aus dem xStream-Package

tria1312

Grünschnabel
Hallo Zusammen,

ich habe schon XML-Dateien mit dem xStream-Framework erstellt.

Nun will ich aber Daten aus einer TreeMap in eine XML-Datei pumpen. Nur das klappt nicht so einfach. Ich habe schon herausgefunden, das es einen TreeMapCOnverter gibt, aber wie dieser genutzt wird ist mir noch unklar.

Hier mein Codeschnipsel:
Code:
	        private TreeMap<String, TrackPiece> trackPieceMap = new TreeMap<String, TrackPiece>();

		XStream xStream = new XStream();
		xStream.setMode(XStream.NO_REFERENCES);

		Mapper mapper = xStream.getMapper();
		TreeMapConverter treeMapConverter = new TreeMapConverter(mapper); 
		xStream.registerConverter(treeMapConverter);

		System.out.println(xStream.toXML(trackPieceMap));

Ich bekommen beim Schreiben auf die Console (also letzte Zeile), diese Fehlermeldung.


Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: Could not call TrackPieceUI.writeObject()
---- Debugging information ----
message : Could not call TrackPieceUI.writeObject()
cause-exception : com.thoughtworks.xstream.converters.ConversionException
cause-message : Could not call java.beans.PropertyChangeSupport.writeObject()
-------------------------------
at com.thoughtworks.xstream.converters.reflection.SerializationMethodInvoker.callWriteObject(SerializationMethodInvoker.java:92)



Vielleicht hat einer eine Ahnung, wie es besser geht.


Gruß
tria1312
 
Du mußt den Converter nicht extra registrieren. Die Converter die in XStream drin sind, werden automatisch verwendet.

Folgendes funktioniert direkt:
Java:
private static class TrackPiece {
	private String strg = "hallo";
}

public static void main(String[] args) {
	TreeMap<String, TrackPiece> trackPieceMap = new TreeMap<String, TrackPiece>( );
	trackPieceMap.put("test", new TrackPiece( ));

	XStream xStream = new XStream( );
	xStream.setMode(XStream.NO_REFERENCES);
	
	xStream.alias("trackPiece", TrackPiece.class);

	System.out.println(xStream.toXML(trackPieceMap));
}

XML:
<tree-map>
  <no-comparator/>
  <entry>
    <string>test</string>
    <trackPiece>
      <strg>hallo</strg>
    </trackPiece>
  </entry>
</tree-map>

Wenn du schickeres XML willst, dann muss man sicher noch etwas anpassen.
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich habe jetzt herausgefunden, dass es an den Listenern liegt, die ich dem TrackPiece hinzufüge. Der Vector für die Listener ist zwar OK, aber wenn ich eigene ListenerTypen hinzugefügt habe (addTrackListener) dann funktionierts nicht, wenn diese Listener exportiert werden sollen.

Muss ich die jetzt noch in irgendeiner Art und Weise vorbereiten? z.B. Funktion toXML oder so?


Gruß
tria1312
 
Kannst du mal nen simples, ausführbares Code-Beispiel posten mit den Objekten und was daran nicht geht?
 
Hi,

hier ist es:

Java:
public class TrackPiece implements Serializable
{
	private int id;
	private int row;
	private int column;
	private TrackTypes type;
	private Orientation orientation;
	private Direction direction;
	private Vector<TrackListener> listeners = new Vector<TrackListener>();

	public TrackPiece(int _row, int _column)
	{
		this.id = lastId++;
		this.row = _row;
		this.column = _column;
	}

}


public interface TrackListener
{
	public void hasChanged(TrackEvent event);
}


public static void main ()
{
	TrackPiece tp = new TrackPiece(0,0);
	TrackPieceUi tpui = new TrackPieceUi();

	trackPieceUi.getTrackPiece().addTrackListener( this );

	private TreeMap<String, TrackPiece> trackPieceMap = new TreeMap<String, TrackPiece>();
	this.add( tp );

	XStream xStream = new XStream();
	Writer fileWriter = null;
	ObjectOutputStream outputStream = null;

	xStream.setMode( XStream.NO_REFERENCES );
	xStream.alias( "trackPiece", TrackPiece.class );

	fileWriter = new FileWriter( "test.xml" );
	outputStream = xStream.createObjectOutputStream( fileWriter );

	Mapper mapper = xStream.getMapper();
	TreeMapConverter treeMapConverter = new TreeMapConverter( mapper );
	xStream.registerConverter( treeMapConverter );

	outputStream.writeObject( this.trackPieceMap );
}

So, diesen Schnipsel habe ich aus mehreren Dateien zusammenkopiert. Und nun hoffe ich, dass ich nichts vergessen habe.


Gruß
tria1312
 
Zuletzt bearbeitet:
Zurück