Несколько setImplicitCollections с использованием XStreamMarshaller - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь 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.class и ARTICLES.class

Как мне разрешить этот конфликт? Любая помощь приветствуется. Заранее спасибо.

1 Ответ

2 голосов
/ 14 апреля 2020

как использовать два 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...