Como posso usar o código abaixo para cancelar a distribuição de uma string XML e mapeá-la para o objeto JAXB abaixo?
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal("xml string here");
@XmlRootElement(name = "Person")
public class Person {
@XmlElement(name = "First-Name")
String firstName;
@XmlElement(name = "Last-Name")
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Reader
em combinação com uma classe de bean específica? Como não háunmarshall(Reader, Class)
método. Por exemplo, existe uma maneira de converter oReader
para umjavax.xml.transform.Source
?JAXBElement<MyObject> elemento = (JAXBElement<MyObject>)unmarshaller.unmarshal(reader); MyObject object = elemento.getValue();
javax.xml.transform.stream.StreamSource
que tem construtores que levamReader
,File
ouInputStream
.Ou se você quiser uma única linha:
fonte
Não existe
unmarshal(String)
método. Você deve usar umReader
:Mas geralmente você está obtendo essa string de algum lugar, por exemplo, um arquivo. Se for esse o caso, é melhor passar por
FileReader
si.fonte
Se você já possui o xml e vem com mais de um atributo, é possível lidar com ele da seguinte maneira:
o método getCharacterDataFromElement é
fonte