如何基于Apache Camel中的Size来路由文件

时间:2012-03-26 13:16:54

标签: xml configuration-files apache-camel

好的,所以仍然忙于将文件用于MySQL文件使用者。我开始遇到某些大文件的错误,并希望将它们发送到另一条路线进行处理。因此,这个想法是一个简单的基于内容的路由器,它将查看文件大小,如果它是一个大文件,将其复制到另一个目录并保留在那里(再一次简单的步骤来了解如何操作)。

所以我开始阅读有关CBR以及如何在我的驼峰上下文中使用简单表达式语言的内容。所以我在camel-context.xml文件中添加了一个CBR,现在我甚至无法运行任何路由。构建失败,并出现以下错误:

Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
Line 48 in XML document from class path resource [META-INF/spring/camel-context.xml] is invalid; 
nested exception is org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.

对,所以很明显我在那里得到了一些不好的XML,但对于我的生活,我似乎无法找到问题,也许一些更有经验的骑手可以通过快速查看我的xml文件给我一些建议。

 <errorHandler id="defaultEH" type="DefaultErrorHandler">
        <redeliveryPolicy
                 maximumRedeliveries="5"
                 retryAttemptedLogLevel="WARN"
                 backOffMultiplier="1"
                 useExponentialBackOff="true"/>
     </errorHandler>
    <threadPoolProfile id="myDefaultProfile"
        defaultProfile="true"

        maxPoolSize="16"/>

        <threadPool id="myPool" threadName="Cool" poolSize="4" maxPoolSize="4" maxQueueSize="100"/>
        <route handleFault="true">


            <from uri="file://c:/CTest/BadFiles?noop=true&amp;recursive=true&amp;delay=3000"/>
            <choice>
            <when>
                <simple>${file:length}<20000000</simple>
                <threads executorServiceRef="myPool">
                    <to uri="bean://fileToSQL"/>
                </threads>
            </when>
            <otherwise>

                <to uri="file://c:/CTest/outbox"/>

                <stop/>
            </otherwise>
            </choice>
            <!--<to uri="jdbc://timlogdb"/>-->

       </route>

我到处查看,根据我的理解,这应该是有效的XML。

1 个答案:

答案 0 :(得分:1)

我认为你需要逃避大于签署文本;这是XML限制。 此外,简单的语言要求您在其运算符周围使用空间。所以它应该是

<simple>${file:length} &lt; 20000000</simple>