J'essaie d'utiliser Apache Camel pour analyser XML à POJO et avoir un problème avec l'impression de la POJO réelle. Au lieu de cela, je reçois du code XML comme si aucune conversion ne se produisait. Quand je passe par exemple, le client instaure des clients qui fonctionnent correctement. Également l'impression des clients classe à sout dans les fèves de haricots parfaitement.Camel ne veut pas imprimer POJO dans java DSL route
MyRoute
@Autowired
private MyBean mb;
@Override
public void configure() throws Exception {
from("file:{{customer.path}}?noop=true")
.bean(mb)
.to("stream:out");
}
MyBean
@Handler
public Customers whatIsInBody(Customers body) {
return body;
}
classes POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"customer"
})
@XmlRootElement(name = "customers")
public @Data
class Customers {
@XmlElement(required = true, nillable = true)
protected List<Customer> customer;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
"id",
"name",
"adress",
"countryCode",
"products"
})
public @Data
class Customer {
protected long id;
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected String adress;
@XmlElement(required = true)
protected String countryCode;
@XmlElement(required = true, nillable = true)
protected List<Product> products;
}
Exemple de sortie:
<customers>
<customer>
<id>12345</id>
<name>str1234</name>
<adress>str1234</adress>
<countryCode>str1234</countryCode>
<products>
<id>12345</id>
<name>str1234</name>
</products>
</customer>
sortie souhaitée:
Customers(customer=[Customer(id=12345, name=str1234, adress=str1234, countryCode=str1234, products=[Product(id=12345, name=str1234)]),
Avez-vous regardé des formats de données Camel? Il y a des formats de données intégrés pour Jackson XML et d'autres qui peuvent faire l'unmarshalling automatique pour vous. http://camel.apache.org/jackson-xml.html –
@SoucianceEqdamRashti Je l'ai essayé avec jaxb sur une page principale - ça marche bien, quand j'essaie d'ajouter .unmarshal (jaxb) où jaxb est JAXBContext jc = JAXBContext .newInstance (Customers.class); DataFormat jaxb = new JaxbDataFormat (jc); mais quand je l'ajoute à la route - rien ne se passe ... – Eugene
Avez-vous fait comme décrit ici? https://stackoverflow.com/questions/26800182/jaxb-marshalling-in-apache-camel –