В сгенерированных XJC классах Java отсутствует оператор импорта при использовании объявления привязки

Я пытаюсь использовать XJC для создания классов Java из схемы XML и файла привязок. Файл привязок предназначен для создания члена типа InetAddress вместо String в сгенерированном классе.

У меня есть следующее:

config.xsd

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="config">
    <xsd:complexType>
        <xsd:all>
            <xsd:element name="ip" type="IPv4Address" />
        </xsd:all>
    </xsd:complexType>
</xsd:element>

<xsd:simpleType name="IPv4Address">
    <xsd:annotation>
        <xsd:documentation>
            IPv4 address in the dotted-decimal notation.
        </xsd:documentation>
    </xsd:annotation>

    <xsd:restriction base="xsd:string">
        <xsd:pattern value="((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])"/>
    </xsd:restriction>
</xsd:simpleType>

configBindings.xml

<?xml version="1.0"?>
<jxb:bindings version="2.0"
          xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:bindings schemaLocation="config.xsd" node="/xsd:schema" >
    <jxb:globalBindings>
        <jxb:javaType name="InetAddress" xmlType="IPv4Address" parseMethod="InetAddress.getByName" printMethod="getHostAddress" />
    </jxb:globalBindings>
</jxb:bindings>

Затем я запускаю XJC с xjc -b configBindings.xml config.xsd, который генерирует java-код в «сгенерированном» каталоге. Однако, несмотря на то, что тип члена ip был правильно привязан к InetAddress, в файле Config.java отсутствует оператор импорта для java.net.InetAddress. Поэтому, когда я пытаюсь скомпилировать Config.java или адаптер Adapter1.java, я получаю несколько ошибок такого рода:

$ javac generated/Adapter1.java 
generated/Adapter1.java:14: error: cannot find symbol
    extends XmlAdapter<String, InetAddress>
                               ^
  symbol: class InetAddress

Должен ли я вручную вставлять необходимые операторы импорта после запуска XJC? Нет ли способа заставить XJC сделать это автоматически, даже если я каким-то образом укажу необходимые пакеты в файле привязки?

ПРИМЕЧАНИЕ. На самом деле я хочу использовать свой собственный класс адаптера для этого, чтобы я мог правильно обрабатывать исключения InetAddress, но этот пример немного упрощает вопрос, даже если сгенерированный код не будет компилироваться после ручного добавления импорта оператор, потому что UnknownHostException не обрабатывается.


person tweej    schedule 18.01.2016    source источник


Ответы (1)


Просто используйте полное имя класса. Вы не можете ожидать, что XJC догадается, что вы имели в виду java.net.InetAddress.

person lexicore    schedule 19.01.2016
comment
Спасибо. Никогда не ожидал, что догадается. - person tweej; 20.01.2016