【问题标题】:Multiple setImplicitCollections using XStreamMarshaller使用 XStreamMarshaller 的多个 setImplicitCollections
【发布时间】:2020-04-14 07:14:36
【问题描述】:

我正在尝试 XStreamMarshaller。但是当我尝试解析两个 xsd:complexType 的 xml 文件时,我收到了这个错误:

class[1]            : com.mc.batch.mapping.authorization.PIECES_JOINTES
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter

XML:

<DOCUMENT>

    <ARTICLES>
        <ARTICLE>
            <NUMERO_ARTICLE>1</NUMERO_ARTICLE>
        </ARTICLE>
        <ARTICLE>
            <NUMERO_ARTICLE>2</NUMERO_ARTICLE>
        </ARTICLE>
    </ARTICLES>

    <PIECES_JOINTES>
        <PIECES_JOINTE>
            <TYPE_DOCUMENT>PDF</TYPE_DOCUMENT>
        </PIECES_JOINTE>
        <PIECES_JOINTE>
            <TYPE_DOCUMENT>WORD</TYPE_DOCUMENT>
        </PIECES_JOINTE>
        <PIECES_JOINTE>
            <TYPE_DOCUMENT>XLS</TYPE_DOCUMENT>
        </PIECES_JOINTE>
    </PIECES_JOINTES>

</DOCUMENT>

代码:

@Bean
MessageConverter messageConverter() {

    Map<String, Class<?>> aliases = new HashMap<>();

    XStreamMarshaller marshallerAuthorization = new XStreamMarshaller();
    aliases.put("DOCUMENT", DOCUMENT.class);
    marshallerAuthorization.setAliases(aliases);

    Map implicitArticle = Collections.singletonMap(ARTICLES.class, "ARTICLE");
    Map implicitPiece   = Collections.singletonMap(PIECES_JOINTES.class, "PIECES_JOINTE");

    marshallerAuthorization.setImplicitCollections(implicitPiece);
    marshallerAuthorization.setImplicitCollections(implicitArticle);

    MarshallingMessageConverter messageConverterAuthorization = new MarshallingMessageConverter(marshallerAuthorization);
    messageConverterAuthorization.setTargetType(MessageType.TEXT);
    return messageConverterAuthorization;
}

但是如何使用两个setImplicitCollections来映射PIECES_JOINTES.classARTICLES.class

我该如何解决这个冲突?欢迎任何帮助。提前致谢。

【问题讨论】:

    标签: spring spring-integration spring-batch xstream


    【解决方案1】:

    如何使用两个 setImplicitCollections 映射 PIECES_JOINTES.class 和 ARTICLES.class

    您不需要调用setImplicitCollections 两次,第二次调用中传递的值将覆盖第一次。这个方法接受一个地图,所以你可以这样写:

    Map<Class<?>, String> implicitCollections = new HashMap<>();
    implicitCollections.put(ARTICLES.class, "ARTICLE");
    implicitCollections.put(PIECES_JOINTES.class, "PIECES_JOINTE");
    
    marshallerAuthorization.setImplicitCollections(implicitCollections);
    

    代替:

    Map implicitArticle = Collections.singletonMap(ARTICLES.class, "ARTICLE");
    Map implicitPiece   = Collections.singletonMap(PIECES_JOINTES.class, "PIECES_JOINTE");
    
    marshallerAuthorization.setImplicitCollections(implicitPiece);
    marshallerAuthorization.setImplicitCollections(implicitArticle);
    

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2021-12-19
      • 2014-05-22
      相关资源
      最近更新 更多