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.
Я думаю, что я должен создать отдельный маршаллер для каждого пакета, но может быть существует решение, как это сделать с одним маршаллером.