У меня есть 2 служебных XSD-файла AService.xsd и BService.xsd, каждый с разным targetNamespace. Оба они используют общий XSD под названием common.xsd. Я использую плагин JAXB Maven для создания классов. Вот как это сделать,
<execution>
<id>generate-package</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<extension>true</extension>
<schemaIncludes>
<include>schema/Aservice.xsd</include>
<include>schema/Bservice.xsd</include>
</schemaIncludes>
<bindingIncludes>
<include>schema/*.xjb</include>
</bindingIncludes>
<generatePackage>com.schema</generatePackage>
<generateDirectory>src/main/java</generateDirectory>
</configuration>
</execution>
Когда я пытаюсь запустить это, я получаю следующую ошибку. ValidationType
определен в common.xsd
org.xml.sax.SAXParseException: A class/interface with the same name "com.schema.ValidationType" is already in use. Use a class customization to resolve this conflict.
..........
org.xml.sax.SAXParseException: (Relevant to above error) another "ValidationType" is generated from here.
......
com.sun.istack.SAXParseException2: Two declarations cause a collision in the ObjectFactory class.
Если я запускаю 2 xsds службы в 2 разных исполнениях, генерируя в 2 разных пакета, я получаю один и тот же класс ValidationType
в 2 разных пакетах.
Есть идеи, как заставить JAXB распознавать общие схемы?
Я настроил пакеты, как описано здесь . Таким образом, common.xsd
входит в com.common.schema
и используется совместно AService.xsd
и BService.xsd
, которые оба находятся в разных пакетах, так как они находятся в разных пространствах имен.
generatePackage
удален из конфигурации Maven и выглядит следующим образом,
<execution>
<id>generate-package</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<extension>true</extension>
<schemaIncludes>
<include>schema/Aservice.xsd</include>
<include>schema/Bservice.xsd</include>
</schemaIncludes>
<bindingIncludes>
<include>schema/*.xjb</include>
</bindingIncludes>
<generateDirectory>src/main/java</generateDirectory>
</configuration>
</execution>