Jaxb2Marshaller для нескольких пакетов с одинаковыми классами

У меня есть 2 схемы xsd и сгенерированные из них классы Java, например:

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-xjc-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xsdtojava</goal>
                    </goals>
                    <configuration>
                        <xsdOptions>
                            <xsdOption>
                                <xsd>${basedir}/src/main/resources/xsd/schema/1.xsd</xsd>
                                <bindingFile>${basedir}/src/main/resources/xsd/binding/1.xjb</bindingFile>
                                <packagename>foo.bar.1</packagename>
                            </xsdOption>
                            <xsdOption>
                                <xsd>${basedir}/src/main/resources/xsd/schema/2.xsd</xsd>
                                <bindingFile>${basedir}/src/main/resources/xsd/binding/2.xjb</bindingFile>
                                <packagename>foo.bar.2</packagename>
                            </xsdOption>
                        </xsdOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Эти схемы имеют одинаковые классы, поэтому я отсортировал их по разным пакетам. Я пытаюсь создать Jaxb2Marshaller для этих пакетов следующим образом:

@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();

    marshaller.setPackagesToScan("foo.bar.1","foo.bar.2");

    marshaller.setMarshallerProperties(new HashMap<String, Object>() {{
        put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true);
    }});

    return marshaller;
}

но получил следующее исключение

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'jaxb2Marshaller' defined in class path resource: Invocation of init method failed; nested exception is 
    org.springframework.oxm.UncategorizedMappingException: Unknown JAXB exception; nested exception is 
    javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory could not be instantiated: 
    com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 51 counts of IllegalAnnotationExceptions. 
    The element name {}Initial has more than one mapping.

Я думаю, что я должен создать отдельный маршаллер для каждого пакета, но может быть существует решение, как это сделать с одним маршаллером.

0 ответов

Другие вопросы по тегам