Java wie mittels JAXB mehrere Variablen zu einem XML-Element zusammenfassen

apolyton

Lt. Junior Grade
Registriert
Nov. 2007
Beiträge
390
Ich erstelle hier einfach mal einen neuen Thread, da sich meine Fragen aus dem alten Thread doch etwas verschoben haben.

Hier die Frage per Copy&Paste:
Ich habe bspw. eine Klasse mit mehreren Variablen, die direkt mit den XML-Daten operieren kann (siehe JAXB). Gibt es da jetzt in JAXB die Möglichkeit bestimmte Variablen in Kategorien einzuteilen? Habe bis jetzt noch nichts dazu gefunden.

Ich gebe mal am besten Beispiel. Folgende Klasse:
Code:
public class ApplicationItem {

	private static final long serialVersionUID = 1L;

	@XmlAttribute(name = "id")
	private int id;
	private String companyName;
	private Boolean contactAvailable = false;
	private String contactTitle = "";
	private String contactFirstName = "";
	private String contactLastName = "";
	private String contactPhoneNumber = "";
	private String contactEmail = "";
	private String street;
	private String houseNumber;
	private String zipCode;
	private String city;
	private String state;
	private String senderFormat;
	private String jobTitle;
	private String jobProfession;
	private ArrayList<Status> statusList;

	public ApplicationItem() {
		statusList = new ArrayList<Status>();
	}

        ... entsprechende Getter- und Setter-Methoden sind vorhanden
}
Bspw. sollen alle "contact"-Variablen zu einem Contact-XML-Element zusammengefasst werden. Das selbe Prozedere auch bei jobTitle und jobProfession.
als XML sollten die dann in etwa so aussehen:
Code:
<applications>
	<application>
		<contact available="true">
			<title></title>
			<firstName></firstName>
			<lastName></lastName>
			<phoneNumber></phoneNumber>
			<eMail></eMail>
		</contact>
		<job>
			<title></title>
			<profession></profession>
		</job>
	</application>
</application>

Kennt da jemand ne Möglichkeit?
 
Das geht in dem du die Struktur deiner Klasse änderst. Mach doch aus

PHP:
private String contactTitle = "";
private String contactFirstName = "";
private String contactLastName = "";
private String contactPhoneNumber = "";
private String contactEmail = "";

eine Klasse Contact. Das gleiche gilt für deine anderen Klassenvariablen. Lieber viele kleine Klassen als ein Monster mit schlechter Übersicht. Das zieht sich doch dann auch noch durch die Klassenmethodenen. Ein Salat an Funktionen... das solltest du nochmal überdenken.

Wenn du aus den Contact-Variablen eine Unterklasse gemacht hast und entsprechende Annotation angebracht hast, wird die XML so aussehen, wie du das gern hättest. Gleiches gilt für Job.

Ich weiß nicht wie wichtig dir das Programmierhandwerk an sich ist, aber vielleicht bringt dir dieser Tipp was:
http://www.amazon.de/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
 
Lieber viele kleine Klassen als ein Monster mit schlechter Übersicht
zu dem Schluss bin ich mittlerweile auch gekommen. Statt komplizierte Konstrukte in einer Klasse zu verwenden, kann ich nun die benötigten Annotationen dort anwenden, wo ich sie auch wirklich brauche. Und wenn sich doch mal was in den Klassen oder der XML ändert, kann ich das ohne Probleme schnell und einfach umsetzen.

Manchmal braucht man echt nen Denkanstoß!
 
Als kleiner Tipp: Beschreib kurz in einem Satz, was eine Klasse macht. Wenn Konstrukte rauskommen wie: "ApplicationItem verwaltet Kontakte und Jobs" sollte man es sich nochmal genauer ansehen. Ein und ist ein Indiz dafür, dass diese Klasse mehr macht, als sie sollte und das man die Zuständigkeiten auf mehrere Klassen aufteilen sollte.
 
Ich denke, dass ich jetzt soweit alles gut aufgeteilt habe. Möchte jetzt zu diesem Modell noch eine XML-Schema erstellen. Da gibts ja in dem JDK-Ordner einen Schemagenerator, der mir eine passende XSD-Datei ausspuckt. Leider wirft der einen Fehler, siehe Bild.

Was bedeutet "cannot find symbol"? Habe ich irgendwas vergessen und die wichtigste Frage: Wie kann ich das Problem lösen?
 

Anhänge

  • screenshot.PNG
    screenshot.PNG
    27,3 KB · Aufrufe: 300
Das heißt, dass keine Klasse mit dem Identifier "Address" gefunden werden konnte.
Würde ich mal stark annehmen.
 
Ich hab mir nochmal die JAXB Referenz runtergeladen und dann mit Ant das XML Schema erstellen lassen. Jetzt funzt es endlich!

Edit: Hab ich da jetzt irgendwie die Möglichkeit, dass generierte XML Schema direkt über den Marshaller in die XML-Datei einzubinden? Denn falls mal die XML-Datei (aus welchen Gründen auch immer) nicht vorhanden ist, soll der Marshaller mir automatisch das Schema dort reinschreiben, anstatt das eben manuell zu machen. Geht da was?
 
Zuletzt bearbeitet:
Zurück
Oben