【问题标题】:Enable EMPTY_ELEMENT_AS_NULL in Camel 3 XML DSL在 Camel 3 XML DSL 中启用 EMPTY_ELEMENT_AS_NULL
【发布时间】:2022-08-24 21:10:20
【问题描述】:

我发现here 的默认行为FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL已从 true (2.9 - 2.11) 更改为 false (2.12 及更高版本),因此从该版本开始,不会对空元素进行自动强制转换,例如转换为 null。

我使用的是 Apache Camel 2.25,该版本默认启用了此功能,但现在,通过此更改,在 Camel 3.x 中禁用了此功能。如何使用 XML DSL 在 Camel 3 中启用它?我知道使用 XMLMapper 很简单:

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL, true);

但在 Camel XML DSL 中,allowed enums 只是来自 SerializationFeature、DeserializationFeature 和 MapperFeature 的那些。我尝试过其中一些,但没有运气。

<unmarshal>
   <jacksonxml disableFeatures=\"FAIL_ON_UNKNOWN_PROPERTIES\"
      enableFeatures=\"ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT\"
      unmarshalTypeName=\"com.my.class.Result\" 
      include=\"NON_NULL\" />
</unmarshal>

    标签: java apache-camel jackson-dataformat-xml camel-jackson


    【解决方案1】:

    您可以在 jacksonxml 元素上设置自定义 xmlMapper,该属性称为“xml映射器" 然后你可以引用你的自定义 XmlMapper,它应该被声明为一个 bean,但这很重要,你必须包含一个#在 bean 名称之前,否则将不会查找对象映射器并将其设置为 null 并创建一个默认映射器。

      @Bean
      public XmlMapper customXMLMapper(){
        return XmlMapper.builder()
                .configure(EMPTY_ELEMENT_AS_NULL, true)
                .configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
                .build();
      }
    
    <unmarshal>
        <jacksonxml unmarshalTypeName="com.fenergo.messagebroker.domain.dco.Result" xmlMapper="#customXMLMapper"/>
    </unmarshal>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多