JAXB: Создание классов для двух XSD, которые используют общий XSD

У меня есть 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 распознавать общие схемы?

17
задан brasskazoo 11 September 2012 в 02:07
поделиться

1 ответ

Я настроил пакеты, как описано здесь . Таким образом, 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>
5
ответ дан 30 November 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: