代码之家  ›  专栏  ›  技术社区  ›  May12

如何修复使用Apache Camel开发的run jar时路由标记中的SAXParseException?

  •  0
  • May12  · 技术社区  · 7 年前

    对于同事,我有一个Camel上下文文件:

    <?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:camel="http://camel.apache.org/schema/spring"
           xsi:schemaLocation="
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
              http://camel.apache.org/schema/spring
              http://camel.apache.org/schema/spring/camel-spring-2.0.0.xsd">
    
              <bean id="myFilter" class="com.ac.am.CamelComp.CurrentDateFileFilter"/>
        <bean id="xsdProcessor" class="com.ac.am.CamelComp.MessProcessor"/>
        <bean id="startPolicy" class="org.apache.camel.routepolicy.quartz2.CronScheduledRoutePolicy">
            <property name="routeStartTime" value="0 0/5 * ? * 1-6 *" />
        </bean>
    
        <camel:camelContext xmlns="http://camel.apache.org/schema/spring">
              <route id="uploadFromFtp" routePolicyRef="startPolicy">
                <camel:from uri="sftp://
                &amp;throwExceptionOnConnectFailed=true
                &amp;consumer.delay=10000
                &amp;recursive=true"/>
                <camel:to uri="bean:xsdProcessor"/>
                <camel:to uri="file:sftp-inbound"/>
            </route>
        </camel:camelContext>
    </beans>
    

    我使用 mvn clean compile assembly:single . 当我运行jar时,我会收到下一个堆栈跟踪:

    [32m13:37:27.923[0;39m[34mINFO[0;39 m[32m[main][0;39米] [36mo.s.b.f.xml.XmlBeanDefinitionReader[0;39m:加载XMLBean 类路径资源[camel context.xml]的定义 [32m13:37:28.331[0;39m[31mWARN[0;39 m[32m[main][0;39米] [36mo.s.c.a.AnnotationConfigApplicationContext[0;39m:异常 在上下文初始化期间遇到-取消刷新 尝试: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 类路径资源[camel context.XML]的XML文档中的第24行 无效;嵌套异常是org.xml.sax.SAXParseException; 行号:24;列数:66;cvc复杂类型3.2.2:属性 “routePolicyRef”不允许出现在元素“route”中。 线程“main”中的异常 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 类路径资源[camel context.XML]的XML文档中的第24行 无效;嵌套异常是org.xml.sax.SAXParseException; 行号:24;列数:66;cvc复杂类型3.2.2:属性 “routePolicyRef”不允许出现在元素“route”中。 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doloadBeanDefections(XmlBeanDefinitionReader.java:399) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.LoadBeanDefections(XMLBeanDepinitionRead.java:336) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.LoadBeanDefections(XMLBeanDepinitionRead.java:304) .... 位于org.springframework.context.support.PostProcessorRegistrationLegate.invokeBeanFactoryPostProcessors(PostProcessor Registrationlegate.java:93) 位于org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplication context.java:686) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplication context.java:524) 位于org.springframework.context.annotation.AnnotationConfigApplicationContext。(AnnotationConfigApplicationContext.java:84) 在com.ac.am.AmeFtp.main(amefftp.java:32)中,由:org.xml.sax引起。SAXParseException;行号:24;列数:66; cvc复杂类型。3.2.2:不允许属性“routePolicyRef” 出现在元素“路由”中。 在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(未知 资料来源) 在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handlestarelement(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(未知 资料来源) 在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知 资料来源) 在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知 资料来源) 在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知 资料来源) 在com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知 资料来源) 在com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(未知 资料来源) 在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知 资料来源) 位于org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doloadBeanDefections(XmlBeanDefinitionReader.java:391) …16个或更多

    第23行是: <route id="uploadFromFtp" routePolicyRef="startPolicy">

    你能帮我修一下吗?非常感谢。

    更新

    camel 添加到 route ,但什么也没有

    <camel:camelContext xmlns="http://camel.apache.org/schema/spring">
              <camel:route id="uploadFromFtp" routePolicyRef="startPolicy">
                <camel:from uri="sftp:......
                &amp;throwExceptionOnConnectFailed=true
                &amp;consumer.delay=10000
                &amp;recursive=true"/>
                <camel:to uri="bean:xsdProcessor"/>
                <camel:to uri="file:sftp-inbound"/>
            </camel:route>
        </camel:camelContext>
    

    堆栈:

    Caused by: org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 72; cvc-complex-type.3.2.2: Attribute 'routePolicyRef' is not allowed to appear in element 'camel:route'.
    

    lineNumber: 24; <camel:camelContext xmlns="http://camel.apache.org/schema/spring">

    1 回复  |  直到 7 年前
        1
  •  1
  •   zeppelin    7 年前

    你的 骆驼 名称空间 xmlns:camel="http://camel.apache.org/schema/spring" 映射到架构的2.0.0版本 http://camel.apache.org/schema/spring/camel-spring-2.0.0.xsd (通过xsi:schemaLocation),它没有 routePolicyRef 属性尚未定义。

    看起来此属性仅添加到中 2.1.0

    ...
    <xs:attribute name="routePolicyRef" type="xs:string"/> 
    ...
    

    因此。

    您可能可以尝试更新您的 xsi:schemaLocation 指向模式的正确版本(2.1.0或更高版本),假设您使用的是框架本身的适当版本。