How can i get the route from blueprint xml file - java

I have some problem. I need to take the route or all CamelContext from blueprint file. How can i did it?
route.xml
I have tried to add route via RouteDefinitions but it throws exceptions because it expected spring namespace but i use blueprint namespace. I use cxf as implementation of JAX-RS. There is another way how to do it better.
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<bean id="weatherMailService" class="com.test.mail.MailSenderImpl"/>
<service ref="weatherMailService" interface="com.test.mail.MailSender"/>
<bean id="serviceProcessor" class="com.test.mail.MailSenderImpl"/>
<bean id="context" class="com.test.mail.MailSenderImpl"></bean>
<camelContext id="ctx" xmlns="http://camel.apache.org/schema/blueprint">
<route id="mail">
<from uri="direct:start"/>
<setBody>
<constant>Test</constant>
</setBody>
<setHeader headerName="subject">
<simple>Weather</simple>
</setHeader>
<process ref="serviceProcessor"/>
<to uri="smtps://smtp.gmail.com:465?username=RAW(*****#gmail.com)&password=******&to=******#gmail.com"/>
<to uri="log:start"/>
<process ref="context"></process>
</route>
</camelContext>
I would like to get CamelContext in java code. How can i did it? Thank you

Related

boss Fuse trasformation XML usinf XSLT

http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<camelContext id="cbr-example-context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="cbr-route">
<from id="_from1" uri="file:///d:/inxslt"/>
<transform.xslt from="_from1" to="_to3" xsltFile="src/main/java/com/xslt/converterXsl.xsl"/>
<to id="_to3" uri="file:///d:/outxslt"/>
</route>
</camelContext>
i want to use my converterXsl.xsl format class to transform xml which is in file:///d:/inxslt this path
i tried this further here not not working
try to use the following definition of the Camel route.
<camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint">
<route id="_route1">
<from id="_from1" uri="file:src/data?noop=true"/>
<to id="_to1" uri="xslt:file:src/xml2html.xsl"/>
<to id="_to2" uri="file:target/output"/>
</route>
</camelContext>
Please, adjust file paths to your needs. Especially, notice notation of XSLT component.
I hope it helps ;-)

camel loadbalancer failover custom error handler

With route defined in Spring DSL:
<route>
<from uri="direct:load1" />
<loadBalance>
<failover roundRobin="true" maximumFailoverAttempts="1"/>
<to uri="broker1:queue:queue"/>
<to uri="broker2:queue:queue"/>
</loadBalance>
</route>
How would implement a custom error handler or processor to handle the out body when the failover exhausted the maximumFailoverAttempts?
To make it simpler to understand, both broker1 and broker2 endpoints are unavailable, a processor should then be invoked to set the out body to "failed" as an example.
Currently I'm using <doTry>
<route>
<from uri="direct:load1" />
<doTry>
<loadBalance>
<failover roundRobin="true" maximumFailoverAttempts="1"/>
<to uri="broker1:queue:queue1"/>
<to uri="broker1:queue:queue2"/>
</loadBalance>
<doCatch>
<exception>java.lang.Exception</exception>
<process ref="loadbalanceExceptionProcessor" />
</doCatch>
</doTry>
</route>
Is there a better approach to this?

Accessing member of java pojo set as exchange property in the camel spring route

I have written my route using spring xml which looks like this
<camelContext xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="classpath:props.properties" />
<route>
<from
uri="activemq:queue:adapter.queue?mapJmsMessage=false&disableReplyTo=true" />
<log message="This is a status request"></log>
<process ref="psuedoRoute"></process>
</route>
</camelContext>
As I am getting a Java POJO through my activemq end point, and that is the exchange body. Is it possible to read the value of a string member within this route xml itself?
Yes, its possible. You may use SPEL, it allows to call a method of Java object, getter in your case.
It could be like:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="classpath:props.properties" />
<route>
<from
uri="activemq:queue:adapter.queue?mapJmsMessage=false&disableReplyTo=true" />
<log message="This is a status request"></log>
<process ref="psuedoRoute"></process>
<log message="This is a status request"></log>
<setBody>
<spel>#{body.getValue()}</spel>
</setBody>
</route>
</camelContext>

Apache Camel routing

A short question about Apache Camel.
I have the following scenario, where my server receives jms messages and then transform to csv file and then insert DB.
For this purpose i have 2 beans:
xml2csv
insertDB
I use routing like:
<route id="route1" errorHandlerRef="myErrorHandler">
<from uri="file://{someFolder1}}
?...
<to uri="bean:xml2csv" />
<log message="transformed to xml file" />
</route>
<route id="route2" errorHandlerRef="myErrorHandler">
<from uri="file://{{someFolder2}}
?...
<to uri="direct:csvOnboardingChannel" />
</route>
<route id="csvOnboarding" errorHandlerRef="myErrorHandler">
<from uri="direct:csvOnboardingChannel" />
<to uri="bean:insertDB" />
</route>
When "route" a file from-to, is it move like a message? or putting the question different, does Apache Camel take a file, wrap it as a message and route it to a bean or a component?
Do I understand it correct or am in a wrong directation.
Yes, your understanding is correct. Camel reads in the file's data and sends it as a message through the route to a bean. Might also be simpler as a single route, like so:
<route id="route1" errorHandlerRef="myErrorHandler">
<from uri="file://{someFolder1}}">
<to uri="bean:xml2csv" />
<to uri="bean:insertDB" />
</route>

override prepareOnStartup method in GenericFileProcessStrategy class

I'm using apache camel File in order to read a file from the file system into a bean method. I'm using it with spring xml . I need to override prepareOnStartup method in GenericFileProcessStrategy class on the route process .
Can you please tell me what is the Syntax to do it in the from uri route line in the spring xml file ?
the spring xml :
<bean id="adoFilter" class="calypsox.bllInterfaces.cashMgn.cashMgnAdo.AdoFileFilter"/>
<camelContext xmlns="http://camel.apache.org/schema/spring" id="cashMgn">
<propertyPlaceholder id="cashMgnProperty"
location="${bll.resources.env}/cashMgn.properties" />
<route id="cashMgnAdo">
<from uri="file:{{cashMgnAdoFileDir}}?filter=#adoFilter;move=.org/${date:now:yyyyMMdd}/${file:name}&readLock=changed&readLockCheckInterval=2000&readLockTimeout=10000&moveFailed=.failed" />
<convertBodyTo type="java.lang.String" />
<to uri="bean:cashMgnHandler?method=handleCashMgnAdo" />
</route>
</camelContext>
The GenericFileProcessStrategy can be set with the processStrategy property :
<bean id="myProcessStrategy" class="..."/>
..
<from uri="file:..?..processStrategy=#myProcessStrategy"/>

Categories