2013-01-24 14 views
6

Apache Camel oferuje kilka sposobów wykonywania transformacji danych: swoją koncepcję Transform EIP, niestandardowe formaty danych, a także tolerancję dla niestandardowych konwerterów typów.Która konstrukcja wielbłąda nadaje się do transformacji?

Mam sytuacji, gdy trzeba wykonać bardzo skomplikowane przekształcać od wewnątrz trasy Camel. Byłbym wdrażaniu własny typ konwertera własną dataFormat lub powinny wdrożyć org.apache.camel.Expression i umieścić wszystkie przekształcenia rzeczy tam:

public class MyTransformer implements Expression { 
    @Override 
    public <T> T evaluate(Exchange arg0, Class<T> arg1) { 
     // ... 
    } 
} 

Chyba jestem zagubiony gdzie/kiedy jest to właściwe wykorzystanie własnych Konwerter typów, kiedy używać procesora .transform(myTransformer) lub kiedy używać niestandardowego DataFormat. Z góry dziękuję!

Odpowiedz

9

Różnice są subtelne, choć wszystkie są używane do różnych rzeczy. Powinieneś użyć:

  • a transformer, gdy konwertujesz "ładunek biznesowy" z jednego kształtu na inny. Na przykład podczas konwertowania obiektów wartości, które zostały wyciągnięte z obiektu DAO do obiektu JAXB, z adnotacjami, których zamierzasz użyć do wywołania usługi internetowej.
  • a data format, gdy chcesz przekazać reprezentację wysokiego poziomu, na przykład jakiś obiekt, w reprezentację na niższym poziomie - coś, co możesz wysłać za pomocą kabla. formaty danych obejmują serializacji, bufory protokołem Google, JSON, JAXB itp
  • type converter kiedy zmieniają sposób uzyskać dostęp do reprezentację wiadomości. Na przykład. Ciąg i tablica bajtów lub obiekt InputStream wciąż czytają te same znaki, więc możesz napisać (choć rzeczywiście są wbudowane) konwertery, które konwertują między dowolnymi dwoma z nich.
2

Wystarczy dodać co powiedział Jake powyżej. To wszystko zależy.

Do tego celu nie trzeba używać żadnych interfejsów API Camel. Mogą zaistnieć sytuacje, w których trzeba przekształcić treść komunikatu tylko raz lub kilka razy. A do tego można użyć zwykłego POJO i wywołać go z wielbłąda trasie itp

Na przykład sposobu w POJO który konwertuje ciąg znaków na instancji MyOrder.

public MyOrder doSomething(String data) { 
    ... 
    return ... 
} 

a następnie użyć wywołanie metody w transformatorze wiadomości w trasie

.transform().method(MyBusinessClass.class, "doSomething") 

Choć stosując dowolny sposób Camel transformacji komunikatów jako odpowiedzieli Jake, pozwala na integrację tego szwu do wielbłąda używaj go jako pierwszorzędnego obywatela, ponieważ dostarczono go z pudełka od samego Camela. I pozwala ponownie wykorzystać to na innych trasach i aplikacjach Camel.

Wdrożenie org.apache.camel.Expression przekształcić ładunek wiadomość jest jednak nie tak często używane. Są lepsze sposoby, jak mówi Jake. Lub użyj POJO, jak pokazano powyżej. Chociaż powyższe POJO zostanie ostatecznie ocenione jako org.apache.camel.Expression, a więc dlaczego można je zaimplementować raz i użyć go również.

Jeśli masz kopię Wielbłąd w książce działania, a następnie rozdział 3 ma wszystkie transformujące dane z Camel.

Powiązane problemy