camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vikas Kumar Arora <vikas_kumar...@yahoo.com>
Subject Re: Camel File: how to retain Original File contents when moving file?
Date Wed, 19 May 2010 05:18:00 GMT

Thanks Claus,
That was a good pointer, I think I missed at least moveFailed part, as I was
not sure how would camel detect that something has failed.

(Just putting solution detail, in case if this helps someone like me)

So the solution I applied now is like, once I have the SOAP response I send
that SOAP response to a Validator and let Validator throw any Exception
(just say lang.Exception) in case of failure. So that was it, camel detects
Exception and then knows that it has to apply "moveFailed" flag and moves
the file appropriately.

In case if this config helps someone:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:spring="http://www.springframework.org/schema/beans"
	   xmlns:camel="http://camel.apache.org/schema/spring"
	   xmlns:jetty="http://mortbay.com/schemas/jetty/1.0"
	   
	   xsi:schemaLocation="
			http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
			http://mortbay.com/schemas/jetty/1.0 http://jetty.mortbay.org/jetty.xsd 
			http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
			">
	<camel:camelContext xmlns="http://camel.apache.org/schema/spring"
						xmlns:spmlv2="urn:oasis:names:tc:SPML:2:0">
						
		<camel:package>com.xxxxx.sample.camel.router</camel:package>

		<camel:route>
			<camel:from
uri="file://C:/Projec~1/Documents/xmls/xmls?move=.done&amp;moveFailed=error"/>
			<camel:to uri="xslt:wrapUDCXMLWithSOAPMessageStructure.xsl"/>
			<camel:to uri="bean:someBean"/>
			<camel:to uri="http://login.abcd.com/IS/services/ISService"/>
			<!--  camel:to uri="xslt:SOAPResponseMessageTransform.xsl"/-->
			<convertBodyTo type="org.w3c.dom.Node"/>
			
			<to uri="bean:responseValidator?method=validateResponse" />
		</camel:route>

	</camel:camelContext>
		
	<bean id="someBean" class="com.abcd.sample.camel.SomeBean" />
	<bean id="responseValidator"
class="com.abcd.sample.camel.ResponseValidator" />
	
</beans>

Thanks,
Vikas



Claus Ibsen-2 wrote:
> 
> Hi
> 
> The file component
> http://camel.apache.org/file2.html
> 
> Have options where you specify where the file should be moved afterwards.
> move
> moveFailed
> 
> By default it will move files into a hidden .camel sub directory.
> 
> 
> On Wed, May 19, 2010 at 3:55 AM, Vikas Kumar Arora
> <vikas_kumar_24@yahoo.com> wrote:
>>
>> Hi,
>> My use case, Bulk Load Operation where I've several thousand XML files:
>> 1. Read XML files from a folder
>> 2. wrap A SOAP Message structure around that XML file
>> 3. send it to Web Service
>> 4. transform response from Web Service into XML response
>> (which it already is, but if I give the output of WS directly to XPath I
>> get
>> java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast
>> to
>> org.w3c.dom.Node
>> ). Any way this works.
>> 5. Now the problem point: now based on the SOAP message's SUCCESS or
>> FAILURE
>> status, I've to move the ORIGINAL file and it's content (original of
>> course)
>> to appropriate folder.
>>
>>  I was going thru the docs, and some where found that there is
>> "useOriginalMessage", but that's only available at the "onException"
>> element
>> level.
>>
>>  But In my case I dont have any exception,
>>
>> 1. So I'm not sure if similar "useOriginalMessage" flag/attribute should
>> also be useful at the URI level say for
>> "uri=file:...?useOriginalMessage=true"?
>>
>> 2. Or is there any way to hold the, original file's content in Camel
>> Global
>> context (if accessible thru Camel DSL) somewhere and be available for use
>> later at any point.
>>
>> Just like Http Session, where for a given session (or like Http Request),
>> where we can keep our data for the duration of the
>> Transaction(request/session) and use accordingly?
>>
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>>           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>           xmlns:spring="http://www.springframework.org/schema/beans"
>>           xmlns:camel="http://camel.apache.org/schema/spring"
>>           xmlns:jetty="http://mortbay.com/schemas/jetty/1.0"
>>
>>           xsi:schemaLocation="
>>                        http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>                        http://www.springframework.org/schema/util
>> http://www.springframework.org/schema/util/spring-util-2.0.xsd
>>                        http://mortbay.com/schemas/jetty/1.0
>> http://jetty.mortbay.org/jetty.xsd
>>                        http://camel.apache.org/schema/spring
>> http://camel.apache.org/schema/spring/camel-spring.xsd
>>                        ">
>>        <camel:camelContext xmlns="http://camel.apache.org/schema/spring"
>>                                              
>>  xmlns:spmlv2="urn:oasis:names:tc:SPML:2:0">
>>
>>              
>>  <camel:package>com.xxxxx.sample.camel.router</camel:package>
>>
>>                <camel:route>
>>                        <camel:from
>> uri="file://C:/Projec~1/Documents/xmls/xmls?noop=true"/>
>>                        <camel:to
>> uri="xslt:wrapXMLWithSOAPMessageStructure.xsl"/>
>>                        <camel:to uri="bean:someBean"/>
>>                        <camel:to
>> uri="http://login.abcd.com/IS/services/ISService"/>
>>                        <camel:to
>> uri="xslt:SOAPResponseMessageTransform.xsl"/>
>>                        <choice>
>>                            <when>
>>                              
>>  <xpath>//spmlv2:modifyResponse[@status='success']</xpath>
>>                                <camel:to
>> uri="file://C:/Projec~1/Documents/xmls/xmls/success?useOriginalMessage=true"/>
>>                            </when>
>>                            <when>
>>                              
>>  <xpath>//spmlv2:modifyResponse[@status='failure']</xpath>
>>                                <camel:to
>> uri="file://C:/Projec~1/Documents/xmls/xmls/error?useOriginalMessage=true"/>
>>                            </when>
>>                            <otherwise>
>>
>>                            </otherwise>
>>                        </choice>
>>                </camel:route>
>>
>>        </camel:camelContext>
>>        <bean id="someBean" class="com.abcd.sample.camel.SomeBean" />
>>
>> </beans>
>>
>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/Camel-File%3A-how-to-retain-Original-File-contents-when-moving-file--tp28603397p28603397.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://old.nabble.com/Camel-File%3A-how-to-retain-Original-File-contents-when-moving-file--tp28603397p28604240.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message