Я пытаюсь развернуть очень простое приложение ESB в Apache ServiceMix (Fuse ESB), и все работает отлично, вплоть до того момента, когда я пытаюсь использовать интерфейс AggregationStrategy.Я создаю подтверждение концепции, используя EIP и шаблон агрегатора, в частности, и не могу развернуть мой артефакт из-за ошибки NoClassDefFound.Выглядит как типичная проблема с загрузкой классов, но у меня нет идей, как ее решить.Я пробовал и то, и другое: добавление и удаление зависимости от верблюжьего ядра к моему сервисному подразделению (тип servicemix-camel).
Основу приложения можно найти здесь .Я изменил свое определение маршрутов следующим образом:
public void configure() {
from("activemq:test2").split(xpath("/notes/note")).parallelProcessing().process(new NoteProcessor()).to("activemq:test3");
from("activemq:test3").aggregate(header("id"), new MyAggregationStrategy()).completionTimeout(3000).to("activemq:test");
}
, и моя пользовательская AggregationStrategy выглядит следующим образом:
package com.softwarepassion.tutorial.camel;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.processor.aggregate.AggregationStrategy;
public class MyAggregationStrategy implements AggregationStrategy {
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
Message newIn = newExchange.getIn();
String oldBody = oldExchange.getIn().getBody(String.class);
String newBody = newIn.getBody(String.class);
newIn.setBody(oldBody + newBody);
return newExchange;
}
}
Я получил следующую ошибку на обычном ServiceMix, а также на FuseESB:
07: 50: 49,625 |ОШИБКА |use-01-11 / deploy |DefaultComponent
|??|151 - servicemix-common - 2011.02.1.fuse-02-11 |Ошибка создания бина с именем 'template': не удалось инициализировать бин;вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'верблюд': сбой вызова метода init;вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'com.softwarepassion.tutorial.camel.MyRouteBuilder': разрешение объявленных конструкторов в классе объектов [com.softwarepassion.tutorial.camel.MyRouteBo[[org.apache.xbean.classloader.JarFileClassLoader: name=org.apache.xbean.spring.context.FileSystemXmlApplicationContext@1c4d3b6 urls = [файл: /home/kris/apache-servicemix-4.4.1-fuse-01-11/ data / jbi / tutorial-camel-sa / sus / tutorial-camel-su /] parent = [[org.apache.xbean.classloader.JarFileClassLoader: name = SU загрузчик родительского класса urls = [] parent = [231.0, BundleDelegatingClassLoaderдля [camel-spring (org.apache.camel.camel-spring)], BundleDelegatingClassLoader для [camel-cxf (org.apache.camel.camel-cxf)], BundleDelegatingClassLoader для [camel-cxf-transport (org.apache).camel.camel-cxf-transport)]]]]]] не удалось;вложенное исключение: java.lang.NoClassDefFoundError: org / apache / camel / процессор / агрегат / AggregationStrategy 07: 50: 49,627 |ОШИБКА |use-01-11 / deploy |ServiceAssemblyInstaller |?
?|147 - org.apache.servicemix.jbi.deployer - 1.5.1.fuse-01-11 |Ошибка развертывания SU tutorial-camel-su