J'essaye de convertir le contenu XML en un objet Java en utilisant JAXB sans utiliser d'annotation. Structure Mon fichier XML (CustomerDtl.xml) est mentionné ci-dessousImpossible de Unmarshall un xml en Java en utilisant JAXB sans utiliser d'annotation- Pas d'erreur mais Unmarshalling est incorrect
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<basePojo>
<customerId>C001</customerId>
<customerList>
<Customer>
<name>Ram</name>
<phoneNo>123445</phoneNo>
</Customer>
<Customer>
<name>Tom</name>
<phoneNo>2332322</phoneNo>
</Customer>
</customerList>
</basePojo>
et mes POJO sont
BasePojo.java
package pojo;
import java.util.List;
import pojo.Customer;
public class BasePojo {
List<Customer> customerList;
String customerId;
public List<Customer> getCustomerList() {
return customerList;
}
public void setCustomerList(List<Customer> customerList) {
this.customerList = customerList;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
}
Customer.java
package pojo;
public class Customer {
private String name;
private String phoneNo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
}
Ci-dessous pièce mentionnée de code que j'ai écrit pour convertir le contenu XML dans Java Object
try {
JAXBContext jc = JAXBContext.newInstance(BasePojo.class);
StreamSource xml = new StreamSource("CustomerDtl.xml");
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<BasePojo> jaxbElementObject = unmarshaller.unmarshal(
xml, BasePojo.class);
BasePojo bPojo = jaxbElementObject.getValue();
System.out.println("id="+bPojo.getCustomerId());
System.out.println("list size="+bPojo.getCustomerList().size());
Iterator iterator = bPojo.getCustomerList().iterator();
while (iterator.hasNext()) {
Customer studentDetails = (Customer) iterator.next();
System.out.println("Print Name:" + studentDetails.getName());
}
} catch (JAXBException e) {
System.out.println("Exception:" + e);
}
Et à mettre ce code est
id=C001
list size=1
list size=[[email protected]]
Print Customer Name:null
Après l'exécution de ce programme, il est imprime le bon customerId, mais il imprime la mauvaise taille de la liste des clients . Bien que la taille de la liste soit 1, et que la liste contienne un objet Client, mais lorsque je parcourt la liste et que j'essaie d'obtenir une valeur de propriété différente de Client, je reçois la valeur null. Est-ce que quelqu'un peut m'expliquer ce que j'ai besoin de corriger?
En utilisant l'annotation, j'ai essayé et cela fonctionne comme prévu. Est-ce impossible sans annotation?
Vous pouvez essayer d'utiliser pour (dernier client du client: pBojo.getCustomerList()) {... au lieu de votre en boucle. Je me demande si votre Iterator générique est à l'origine du problème. Si vous allez utiliser un itérateur, il devrait au moins être Iterator iterator = ... (Un IDE comme Eclipse vous donnerait un avertissement dans votre code actuel) –
passons la partie itération. Pourquoi la taille de la liste est 1, une idée? – Bikku
Bonne question. Quelle (s) annotation (s) exactement utilisiez-vous pour la faire fonctionner? –