2016-05-01 5 views
1

Ich versuche, die Multi-Casting-Enterprise-Integration-Muster (EIP) mit Apache Camel zu verwenden, aber in viele Runtime-Ausnahmen zu laufen. Ich denke der Hauptfehler ist unten. Wenn jemand mir helfen könnte, das herauszufinden, könnte ich wahrscheinlich dieses kleine Programm zum Laufen bringen. Bitte beachten Sie den Fehler und das Programm unten.Apache Camel MultiCasting - InvalidPayloadException

Fehler: Caused by: org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: 100 of type: java.lang.Integer on: Message: 100. Caused by: No type converter available to convert from type: java.lang.Integer to the required type: java.io.InputStream with value 100. Exchange[Message: 100]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: java.lang.Integer to the required type: java.io.InputStream with value 100]

Programm:

Die Java-Klasse mit dem Hauptverfahren, das Programm zu initiieren:

import org.apache.camel.CamelContext; 
import org.apache.camel.impl.DefaultCamelContext; 
import org.apache.camel.ProducerTemplate; 

public class MainMulti { 

    public static void main(String[] args) { 
     CamelContext c = new DefaultCamelContext(); 

     try { 
     c.addRoutes(new MultiRoute()); 
     c.start(); 
     ProducerTemplate pro = c.createProducerTemplate(); 

     pro.sendBody("direct:start", 100); 
     pro.sendBody("direct:start", 500); 

     Thread.sleep(5000); 

     c.stop(); 

     } catch(Exception ex) { 
      System.out.println(ex); 
      ex.printStackTrace(); 
     } 


    } 

} 

Die Java DSL Route:

import org.apache.camel.builder.RouteBuilder; 

public class MultiRoute extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 

     from("direct:start") 
       .multicast(new HighestAggregator()) 
        .parallelProcessing() 
        .to("file:target/a", "file:target/b", "file:target/c") 
       .end() 
       .to("file:target/result"); 
    } 

} 

die Aggregation Java-Bean:

Antwort

2

Sie schreiben in Dateien im Multicast, und der eingehende Nachrichtentext hat keinen unterstützten Typ. Sie senden die Eingabe als Ganzzahl. Und das Schreiben einer einzelnen Ganzzahl in eine Datei wird nicht standardmäßig unterstützt. stattdessen zB

pro.sendBody("direct:start", "100"); 
pro.sendBody("direct:start", "500"); 
+0

Hallo Claus, Dankes- für die Annahme der Herausforderung und der Beantwortung dieser Frage

Also den Beispielcode ändern in den Daten als String zu senden. Wenn Sie die Ganzzahlen in Zeichenfolgen ändern, kann das Programm ausgeführt werden. Ich dachte, es würde etwas anderes machen, aber es läuft. Ich änderte auch den Algorithmus in der "aggregate" -Methode der Java-Bean, um Integer aus den Strings zu erstellen, indem die Strings an den Integer-Konstruktor übergeben wurden. Natürlich musste ich zuerst den "Aggregat" -Algorithmus ändern, um die 'String.class' aus dem Körper der Börse anstelle von' Integer.class' zu akzeptieren. Wenn nun nur das Programm das gemacht hat was ich wollte ...: D :) –