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

拆分器组属性注入变量参数

  •  0
  • GLMills  · 技术社区  · 6 年前

    可以将config params文件中的值插入splitter group属性吗?如果是这样,正确的方法是什么?谢谢!

    我试过了,

    <split streaming="true" >
    <tokenize token="\n" group="{{noOfLines}}" />
    <log message="Split Group Body: ${body}"/>
        <to uri="bean:extractHeader" />
        <to id="acceptedFileType" ref="pConsumer" /> 
    </split>
    
    <split streaming="true" >
    <tokenize token="\n" group={{noOfLines}} />
    <log message="Split Group Body: ${body}"/>
        <to uri="bean:extractHeader" />
        <to id="acceptedFileType" ref="pConsumer" /> 
    </split>
    

    我做错什么了?

    ERROR:  'Open quote is expected for attribute "group" associated with an  element type  "tokenize".
    
    <tokenize token="\n" group="<simple>${properties:noOfLines:500}</simple>" /> 
    ERROR:  'The value of attribute "group" associated with an element type "tokenize" must not contain the '<' character.'
    
                <tokenize token="\n" group="${properties:noOfLines:500}" /> 
    
    Caused by: org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '${properties:noOfLines:500}' is not a valid value for 'integer'.
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   GLMills    6 年前

    我对信息和答案的探索不够深入。我发现这已经被克劳斯·易卜生遇到并回答了。请看看你是否有这种需要。

    Validation error with integer property (camel)

    http://camel.apache.org/using-propertyplaceholder.html

    在“对XML DSL中的任何类型的属性使用属性占位符”部分下

    这是我按照这些说明做的。

    添加了属性前缀命名空间 xmlns:prop=“http://camel.apache.org/schema/placeholder”

    然后修改tokenize属性

    <tokenize token="\n" prop:group="noOfLines" />
    

    我正在使用属性占位符

    <cm:property-placeholder persistent-id="com.digital.passthru.core" />
    

    这很有魅力。谢谢你,克劳斯。

        2
  •  0
  •   GLMills    6 年前

    这就是我的工作。

    <?xml version="1.0" encoding="UTF-8"?>
        <blueprint
          xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:prop="http://camel.apache.org/schema/placeholder"
          xmlns:camel="http://camel.apache.org/schema/blueprint"
          xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
          xsi:schemaLocation="
               http://www.osgi.org/xmlns/blueprint/v1.0.0 
               http://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">
    
        <cm:property-placeholder persistent-id="com.ge.digital.passthru.core" />
    
        <bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
            <property name="deadLetterUri" value="${deadLetterQueue}"/>
            <property name="redeliveryPolicy" ref="redeliveryPolicyConfig"/>
            <property name="useOriginalMessage" value="true" />
        </bean>
    
        <bean id="redeliveryPolicyConfig" class="org.apache.camel.processor.RedeliveryPolicy">
            <property name="maximumRedeliveries" value="3"/>
            <property name="redeliveryDelay" value="5000" />
    
        </bean>
    

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

    <route 
        id="core.predix.accept.file.type.route"
        autoStartup="true" >
        <from uri="{{fileEntranceEndpoint}}" />
        <convertBodyTo type="java.lang.String" />
        <split streaming="true" strategyRef="csvAggregationStrategy">
        <tokenize token="\n" />
          <process ref="toCsvFormat" />     <!-- passthru only we do not allow embedded commas in numeric data -->
        </split>
        <log message="CSV body: ${body}" loggingLevel="INFO"/>
        <choice>
            <when>
                <simple>${header.CamelFileName} regex '^.*\.(csv|CSV|txt|gpg)$'</simple>
                <log message="${file:name} accepted for processing..." />
                <choice>
                  <when>
                    <simple>${header.CamelFileName} regex '^.*\.(CSV|txt|gpg)$'</simple>
                    <setHeader headerName="CamelFileName">
                <!--    <simple>${file:name.noext}.csv</simple> -->  <!-- file:name.noext.single -->
                        <simple>${file:name.noext.single}.csv</simple>
                    </setHeader>
                    <log message="${file:name} changed file name." />                   
                  </when>
                </choice>
                <split streaming="true" >
                <tokenize token="\n" prop:group="noOfLines" />
                <log message="Split Group Body: ${body}"/>
                    <to uri="bean:extractHeader" />
                    <to id="acceptedFileType" ref="predixConsumer" /> 
                </split>
                <to uri="bean:extractHeader?method=cleanHeader"/>
            </when>
            <otherwise>  
                <log message="${file:name} is an unknown file type, sending to unhandled repo." loggingLevel="INFO" />
                <to uri="{{unhandledArchive}}" />
            </otherwise>
        </choice>
    </route>
    

    … 诺弗林斯是一个财产

    现在有一个命令,所有这一切,我发现,同时做这件事。 有关XML DSL中组件的驼峰式排序,请访问以下链接

    Camel DataFormat Jackson using blueprint XML DSL throws context exception