Bonjour

avant de commencer encore une fois je ne sais pas où poser ma question.
java c'est vaste.
J2EE n'est pas l'endroit je fais du Camel hors J2ee
SOA n'est pas n'on plus le bon endroit il ne s'agit pas d'un pb de service SOA (il n'y en a pas dans mon pb)

il s'agit d'un pb d'EIP qui entre dans le cadres des EAI/ETL/ESB et nous n'avons pas ce genre de catégorie.
Donc si un modérateur trouve opportun de déplacer cette question
Pas de pb pour moi.

Voici le coeur du pb.
Je fais du camel entièrement en java (pas de spring pas d'osgi juste camel)

je défini mes route en java et non pas par un fichier XML la raison est qui est bien plus simple pendant que le code tourne d'appeler des méthodes java que de produire des fichiers de conf temporaire pour changer un contexte camel. bref je trace mes routes à l’exécution car je ne les connais pas lors de la phase de programmation.

du coup j'ai un peu de mal avec certaine partis de la doc.
dans le cas présent pour l'illustre je suis partis de l'exemple "PurchaseOrder" de camel in action.

j'ai donc une classe PurchaseOrder elle va servir à décoder des csv et coder du xml cas très simple s'il en est.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@CsvRecord(separator = ",", crlf = "UNIX", skipFirstLine=true)
@XmlRootElement
public class PurchaseOrder {
 
    @DataField(pos = 1)
    @XmlElement(name="Produit")
    private String name;
 
    @DataField(pos = 2, precision = 2)
    @XmlElement
    private String price;
 
    @DataField(pos = 3)
    @XmlElement
    private String amount;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPrice() {
        return price;
    }
 
    public void setPrice(String price) {
        this.price = price;
    }
 
    public String getAmount() {
        return amount;
    }
 
    public void setAmount(String amount) {
        this.amount = amount;
    }
}
ma route est des plus simple
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
context.addRoutes(new myRouteBuilder() {
    public void configure() {
      String outUrl = "jms://queue:" + jmsPartner;
 
       setProperty("action", "RECEPTION");
       setProperty("routeDestination", jmsPartner);
       setProperty("outUrl", outUrl);
       String[] incomings = getIncomings();
       super.configure();
       //JsonDataFormat json = new JsonDataFormat(JsonLibrary.Jackson);
       JaxbDataFormat jaxb = new JaxbDataFormat(true);
       jaxb.setContextPath("org.mydomain.sudomain");
       jaxb.setDataFormatName("jaxb");
 
       ProcessorDefinition<?> route =
            from(incomings)
              .tracing()
              .routeId(myModuleName)
              .unmarshal(new BindyCsvDataFormat("org.mydomain.sudomain"))
              .marshal(jaxb)
           .to(outUrl)
           ;
       log.info(route.toString());
    }
}
Comme tous les exemples que je trouve passe par de la conf spring et non par du java je ne dois pa sbien définir mon JaxbDataFormat. j'ai essayé avec json (en commentaire dans le code) et ça marche sans pb.
avec jaxb il semble qu'il me manque quelque chose.
Code error : Sélectionner tout - Visualiser dans une fenêtre à part
Data format 'jaxb' could not be created. Ensure that the dataformat is valid and the associated Camel component is present on the classpath
Je n'ai pas trouvé de doc me permettant de m'assurer que mon dataformat est valide je ne sais pas comment faire. quand au composant camel tout est dans le même package dans le même projet.

j'ai trouvé des exemples qui font appel à
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
.marshal(new JaxbDataFormat("org.mydomain.sudomain"));
mais cette syntaxe est invalide.

merci à tous
A+JYT