jaxb umarshalling

ben89

Grünschnabel
hallo zusammen,

ich habe folgende xml und möchte das Attribut Id daraus auslesen:

Code:
<?xml version="1.0" encoding="UTF-8"?>

<xml xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:z="#RowsetSchema">

<s:Schema id='RowsetSchema'>
	<s:ElementType name='row' content='eltOnly'>
		<s:AttributeType name ='Id' rs:number= '1'>
			<s:datatype dt:type='uuid' dt:maxLength='16' rs:fixedlength='true' />
		</s:AttributeType>
		<s:extends type='rs:rowbase' />
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row Id="{58D4DEEE-DE96-4B98-99D5-E669A5DF1F23}"/>
	<z:row Id='{50BDD41B-43CC-4EB7-A963-F4296EDF4C58}' />
</rs:data>

</xml>

folgenden code habe ich:
Code:
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "data")
public class JAXBFolderIdDef {

	@XmlElement(name = "row")
	private List<JAXBFolderId> folderId;

	public List<JAXBFolderId> getFolderIDs() {
		return folderId;
	}
}


Code:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "row")
public class JAXBFolderId {

	@XmlAttribute(name = "Id")
	private String folderID;

	public String getFolderID() {
		return folderID;
	}

}


so rufe ich sie auf
Code:
JAXBFolderIdDef classdef = JAXB.unmarshal(xmlString, JAXBFolderIdDef.class);
		List<JAXBFolderId> folderIds = classdef.getFolderIDs();

wo liegt der fehler?
Danke schon im Voraus

Grüße Benny
 
Das frage ich dich, wo liegt der Fehler? Was für Fehlermeldungen hast du?

Ist die Klasse JAXBFolderIdDef generiert oder selbst geschrieben?
 
Zuletzt bearbeitet:
also ich bekomme null zurück. Ich habe die xml zum ausprobieren neu aufgebaut. Dadurch konnte ich schrittweise erkennen, wo der fehler liegen kann.

mit folgendem klappt es:


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "xml")
public class JAXBFolderIdDef {

@XmlElement(name = "data")
private List<JAXBFolderId> folderId;

public List<JAXBFolderId> getFolderIDs() {
return folderId;
}
}


das problem liegt an den präfixen in der xml. Wenn diese nicht da sind klappt das ganze, wenn ich sie einfüge wird wieder null geliefert. Was kann man da machen?
 
Wenn du die Klasse immer generierst, musst du das mit sog. JAXB-Binding steuern, dass das richtige rauskommt.

Wenn die Klasse manuell erstellt ist, würde ich sie so anpassen, dass die Klasse mit einem schemagetreuem XML umgehen kann.

Ich kenne JAXB eher so, dass man sich die Klassen dazu generieren lässt.
 
Zurück