I am trying with Camel 3.14.0.
While debugging I noticed that
call gets to ProcessReifier.java
public Processor createProcessor() {
Processor answer =
((ProcessDefinition)this.definition).getProcessor();
if (answer == null) {
ObjectHelper.notNull(((ProcessDefinition)this.definition).getRef(),
"ref", this.definition);
answer =
(Processor)this.mandatoryLookup(((ProcessDefinition)this.definition).getRef(),
Processor.class);
}
at that point - variables are as below:
definition = {ProcessDefinition@3684}
"process[ref:#class:org.myorg.camel.MyProcessor]"
ref = "#class:org.myorg.camel.MyProcessor"
processor = null
log = {Logger@3741} "Logger[org.apache.camel.model.ProcessDefinition]"
inheritErrorHandler = null
blocks = {LinkedList@3742} size = 0
parent = {RouteDefinition@3358}
"Route(route1)[From[timer://foo?fixedRate=true&period=60000] ->
[SetBody[simple{Hello}],
process[ref:#class:org.myorg.camel.MyProcessor], To[log:hello]]]"
interceptStrategies = {ArrayList@3743} size = 0
index = 2
id = "process1"
customId = null
description = null
((ProcessDefinition)this.definition).getProcessor() , returns null and
then it performs a lookup on registry.
It never seemed to get to
public Object lookupByName(String name) {
if (name != null && name.startsWith("#class:")) {
return this.createBean(name, Object.class);
} else {
return name != null && name.startsWith("#type:") ?
this.lookupBean(name, Object.class) :
this.getRegistry().lookupByName(name);
}
}
if it may have - it may have identified that the class starts with
#class: and needs to be bypassing registry.
------ Original Message ------
From: "Claus Ibsen" <claus.ib...@gmail.com>
To: users@camel.apache.org
Sent: 1/17/2022 4:38:12 AM
Subject: Re: Using camel-main, xml route, referencing a java class as
processor
What camel version do you use
On Mon, Jan 17, 2022 at 9:27 AM Chirag <chirag.sangh...@gmail.com> wrote:
Hello,
I have a scenario where I am using camel-main with XML Route and a Java
Class as a Processor.
It gives me following error:
Exception in thread "main" org.apache.camel.FailedToCreateRouteException:
Failed to create route route1 at: >>>
process[ref:#class:org.myorg.camel.MyProcessor] <<< in route:
Route(route1)[From[timer://foo?fixedRate=true&period=60000] ... because of
No bean could be found in the registry for:
#class:org.myorg.camel.MyProcessor of type: org.apache.camel.Processor
at
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:240)
at
org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:74)
at
org.apache.camel.impl.DefaultModelReifierFactory.createRoute(DefaultModelReifierFactory.java:49)
at
org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:868)
at
org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:758)
at
org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2861)
at
org.apache.camel.support.service.BaseService.init(BaseService.java:83)
at
org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2567)
at
org.apache.camel.support.service.BaseService.start(BaseService.java:111)
at
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2586)
at
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:247)
at org.apache.camel.main.Main.doStart(Main.java:116)
at
org.apache.camel.support.service.BaseService.start(BaseService.java:119)
at org.apache.camel.main.MainSupport.run(MainSupport.java:69)
at
org.apache.camel.main.MainCommandLineSupport.run(MainCommandLineSupport.java:174)
at org.myorg.camel.MyMainApp.main(MyMainApp.java:21)
Caused by: org.apache.camel.NoSuchBeanException: No bean could be found in
the registry for: #class:org.myorg.camel.MyProcessor of type:
org.apache.camel.Processor
at
org.apache.camel.support.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:241)
at
org.apache.camel.reifier.AbstractReifier.mandatoryLookup(AbstractReifier.java:145)
at
org.apache.camel.reifier.ProcessReifier.createProcessor(ProcessReifier.java:40)
at
org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:838)
at
org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:579)
at
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:236)
... 15 more
Example Code is described:
https://github.com/chiragsanghavi/camel-experiments/tree/main/processor
Basically referring to processor using <process
ref="#class:org.myorg.camel.MyProcessor"/> in route directly as described
in
https://camel.apache.org/manual/processor.html#_referring_to_beans_using_class_syntax
.
But it doesn't seem to work.
Are there any other conditions to using #class ?
ચિરાગ/चिराग/Chirag
------------------------------------------
Sent from My Gmail Account
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2