2017-10-06 10 views
0

imaginer que nous avons une classe POJO comme ceci:Injecter résultat de haricots en objet POJO

@Data 
@AllArgsConstructor 
@NoArgsConstructor 
public class MyPojo 
{  
    private Map<String, Object> myMap; 
    private List<AnOtherPojoClass> myOtherPojos; 
    private int myInteger; 
} 

Ce type est utilisé dans une route de chameau déclenchée par REST DSL:

<post uri="/runpojo" consumes="application/json" produces="application/json" bindingMode="json" type="com.test.MyPojo"> 
      <route> 
       <!-- pojo's myInteger is already filled from REST caller --> 
       <setBody> 
        <simple>${body.setMyMap(${bean:service2?method=calculateMap(${body.myInteger})})}</simple> 
       </setBody> 
       <setBody> 
        <simple>${body.setMyOtherPojos(${bean:service3?method=calculateOtherPojo})}</simple> 
       </setBody> 
       <marshal ref="json" /> 
      </route> 
     </post> 

Mais voici mon problème : Après l'appel de mon POST je veux définir une propriété POJO dans mon corps. Mais <simple/> ne fonctionne pas, car il essaie de convertir calculateMap(${body.myInteger})}) le paramètre de méthode en une chaîne. Tant que le paramètre est un type simple cela peut fonctionner, mais dans mon code de production myInteger est un byte[]. Un autre problème est, même si je parviens à faire fonctionner le haricot, la valeur de retour Map<String, Object> est (interne camel) analysé à String, mais mon setter s'attendre à un Map.

Version actuelle:

<camel.version>2.17.1</camel.version> 

Que puis-je faire, pour définir les propriétés POJO à un résultat d'une autre méthode haricots appel?

Merci, Jan

+0

Quelle version de Camel utilisez-vous? –

+0

La version actuelle de camel @ClausIbsen est \t \t ' 2.17.1' – Kooki

Répondre

0

Je suis assez sûr que nous avons fixé cela dans une version plus récente, donc mettre à jour votre Camel.

+0

va le tester avec une version plus récente '2.19.3' – Kooki

+0

J'ai mis à jour camel, et actuellement obtenir cette exception : 'RuntimeBeanExpressionException: Impossible d'invoquer la méthode: setMyMap ($ {bean: service2? Method = calculateMap ($ {body.myInteger})}) sur null en raison de: org.apache.camel.RuntimeCamelException: java.io.IOException: Stream fermé \t à org.apache.camel.language.bean.BeanExpression $ InvokeProcessor.process (BeanExpression.java:228) ... \t à org.apache.camel.http.common.HttpMessage.createBody (HttpMessage.java : 74) ... 'Cela ressemble un peu à' https://issues.apache.org/jira/browse/CAMEL-10425 ' – Kooki

+0

aviez-vous d'autres informations à ce sujet? – Kooki