jaxb2-maven-plugin, создающий package-info.java с префиксами xmlns

Я хочу создавать классы java с помощью jaxb2-maven-plugin. Я использую следующую конфигурацию:

pom.xml:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <id>SomeID</id>
            <goals>
                <goal>xjc</goal>
            </goals>
            <configuration>
                <extension>true</extension>
                <clearOutputDir>true</clearOutputDir>
                <sources>
                    <source>src/main/xsd/schema.xsd</source>
                </sources>
                <noGeneratedHeaderComments>true</noGeneratedHeaderComments>
            </configuration>
        </execution>
    </executions>
</plugin>

schema.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://my.target.namespace/uri" 
    xmlns="http://my.target.namespace/uri" 
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:h="http://my.uri.for.prefix.h"
    xmlns:f="http://my.target.namespace/uri">
    
    <xsd:import namespace="http://my.uri.for.prefix.h" schemaLocation="schema2.xsd"/> 
    
    <xsd:complexType name="FooType">
        <xsd:sequence>
            <xsd:element ref="h:something" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="FooType" type="FooType" />
 
</xsd:schema>

Плагин Jaxb2 генерирует следующий package-info.java:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;

Но вот что я хочу получить:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", xmlns = {
        @XmlNs(prefix="f", namespaceURI="http://my.target.namespace/uri"),
        @XmlNs(prefix="h", namespaceURI="http://my.uri.for.prefix.h")
}, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;

import javax.xml.bind.annotation.XmlNs;

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


person micharaze    schedule 24.06.2020    source источник


Ответы (1)


См. Этот ответ о том, как решить эту проблему: https://stackoverflow.com/a/10812236/1389219

Предупреждение о спойлере: вам придется отказаться от jaxb2-maven-plugin в пользу maven-jaxb2-plugin. Вам нужно будет указать аргумент <arg>-Xnamespace-prefix</arg> и написать новый bindings.xml файл. Ваш POM-файл станет более подробным, но стоит создать package-info.java так, как вам нужно.

person vegemite4me    schedule 29.07.2021