【问题标题】:Camel DataFormat Jackson using blueprint XML DSL throws context exceptionCamel DataFormat Jackson 使用蓝图 XML DSL 引发上下文异常
【发布时间】:2018-04-30 23:40:37
【问题描述】:

无论我将数据格式放在 XML DSL 蓝图中的哪个位置,我都会在不同的位置开始出现此错误。如果我删除它,它可以工作,但我当然不能将 JSON 转换为 POJO。 ???任何帮助或告诉我我做错了什么,我错过了什么。谢谢!

错误

Unable to start blueprint container for bundle passthrumt1.core/1.0.1.SNAPSHOT
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'endpoint'. One of '{"http://camel.apache.org/schema/blueprint":redeliveryPolicyProfile, "http://camel.apache.org/schema/blueprint":onException, "http://camel.apache.org/schema/blueprint":onCompletion, "http://camel.apache.org/schema/blueprint":intercept, "http://camel.apache.org/schema/blueprint":interceptFrom, "http://camel.apache.org/schema/blueprint":interceptSendToEndpoint, "http://camel.apache.org/schema/blueprint":restConfiguration, "http://camel.apache.org/schema/blueprint":rest, "http://camel.apache.org/schema/blueprint":route}' is expected.

XML DSL

   <camelContext     
      id="com.passthru.coreCamelContext"
      trace="true"
      xmlns="http://camel.apache.org/schema/blueprint"
      allowUseOriginalMessage="false"
      streamCache="true"
      errorHandlerRef="deadLetterErrorHandler" >

    <properties>
        <property key="http.proxyHost" value="PITC-Zscaler-Americas.proxy.corporate.com"/>
        <property key="http.proxyPort" value="80"/>
    </properties>

    <streamCaching  id="CacheConfig" 
                    spoolUsedHeapMemoryThreshold="70" 
                    anySpoolRules="true"/>
<!--  -->
    <dataFormats>
            <json id="Json2Pojo" library="Jackson" unmarshalTypeName="com.passthru.core.entities.TokenEntities">
            </json>
    </dataFormats>

    <endpoint id="predixConsumer" uri="direct:preConsumer" />
    <endpoint id="predixProducer" uri="direct:preProducer" />
    <endpoint id="getToken" uri="direct:getToken" />

      <onException>
        <exception>com.passthru.dataservice.PDXDataServiceInvalidDataException</exception>
        <redeliveryPolicy maximumRedeliveries="3" />
        <handled>
          <constant>true</constant>
        </handled>
        <log
          message="Invalid Data From Data Service"
          loggingLevel="ERROR" />
        <setBody>
          <simple>${body.toString}</simple>
        </setBody>
        <to uri="file:{{errorArchive}}" />
      </onException>

如果我将数据格式放在属性之上,它会抱怨,我必须删除属性和流缓存语句才能使其工作。但我需要代理属性。有什么建议么???再次感谢

如果

<camelContext     
  id="com.ge.digital.passthru.coreCamelContext"
  trace="true"
  xmlns="http://camel.apache.org/schema/blueprint"
  allowUseOriginalMessage="false"
  streamCache="true"
  errorHandlerRef="deadLetterErrorHandler" >
<dataFormats>
    <json id="Json2Pojo" library="Jackson" unmarshalTypeName="com.passthru.core.entities.TokenEntities"/>
</dataFormats>
<properties>
    <property key="http.proxyHost" value="PITC-Zscaler-Americas-Cincinnati3PR.proxy.corporate.com"/>
    <property key="http.proxyPort" value="80"/>
</properties>

我明白了

Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'properties'. One of '{"http://camel.apache.org/schema/blueprint":redeliveryPolicyProfile, "http://camel.apache.org/schema/blueprint":onException, "http://camel.apache.org/schema/blueprint":onCompletion, "http://camel.apache.org/schema/blueprint":intercept, "http://camel.apache.org/schema/blueprint":interceptFrom, "http://camel.apache.org/schema/blueprint":interceptSendToEndpoint, "http://camel.apache.org/schema/blueprint":restConfiguration, "http://camel.apache.org/schema/blueprint":rest, "http://camel.apache.org/schema/blueprint":route}' is expected.

我错过了什么?

【问题讨论】:

    标签: json jackson apache-camel dataformat spring-camel


    【解决方案1】:

    Camel 蓝图 XML 已针对 camel-blueprint.xsd 进行验证。 您对名称为 camelContextFactoryBean 的复杂类型感兴趣,其中包含具有固定顺序的可用元素序列。

    在此序列中定义的 camelContext 元素的正确顺序是:

    • 属性
    • 全局选项
    • propertyPlaceholder
    • 包扫描
    • 上下文扫描
    • jmxAgent
    • 流缓存
    • 导出
    • defaultServiceCallConfiguration
    • serviceCallConfiguration
    • defaultHystrixConfiguration
    • hystrix 配置
    • 路由构建器
    • routeContextRef
    • restContextRef
    • 线程池配置文件
    • 线程池
    • 端点
    • 数据格式
    • 变压器
    • 验证器
    • redeliveryPolicyProfile
    • onException
    • 完成时
    • 拦截
    • 拦截来源
    • 拦截SendToEndpoint
    • 休息配置
    • 休息
    • 路线

    为了解决您的问题,将所有 endpoint 声明移到 dataFormats 上方。

    【讨论】:

    • 谢谢 Bedla,这解决了问题。哇!这是一个非常有价值的知识。非常感谢您的分享。
    • 感谢@GLMills,很高兴它有所帮助。如果您认为这个解决方案是正确的,请考虑accepting answer
    • Bedla,再次感谢,我是新手,我相信我已经接受了答案。如果它不起作用,请告诉我。
    • @GLMills 还没有。答案左侧有灰色复选标记。单击它,我会将颜色更改为绿色。我之前的评论包含带有图片说明的链接,如何操作。
    猜你喜欢
    • 2019-11-09
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多