Я пытаюсь использовать xjc
для генерации классов с использованием локальной схемы, но это приведет к выводу XML файлов с удаленным xsi:schemaLocation
У меня есть XML схема foo.xsd
. Я использую xjc
для генерации Java файлов классов из этой схемы, например, для CLI:
xjc foo.xsd
Отлично, за исключением того, что при построении с использованием результирующих классов xsi:schemaLocation
нет (и не xmlns:xsi
, но одна проблема за раз).
Я бы хотел, чтобы расположение схемы в XML было установлено: xsi:schemaLocation="http://bar.com foo.xsd"
. Поэтому я добавляю binding.xjb
:
<?xml version="1.0"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1">
<bindings schemaLocation="http://bar.com foo.xsd">
<schemaBindings>
<package name="foo"/>
</schemaBindings>
</bindings>
</bindings>
За исключением того, что сейчас xjc
это не нравится:
[ERROR] "http://bar.com foo.xsd" is not a part of this compilation. Is this a mistake for "file:foo.xsd"?
line 3 of file: binding.xjb
Я думаю, потому что это schemaLocation
в привязке должно быть xsi:schemaLocation
, но также и фактическим местоположением файла схемы, который будет использоваться при выполнении генерации.
Я возился с файлом каталога здесь, но не уверен, подходит ли он для этой цели или если Я использую это правильно. Я на самом деле не Java руководитель, и поэтому документы по каталогам в лучшем случае сбивают с толку.
Для других ответов я вижу, что этот атрибут можно установить в файле XML, задав свойства свойства маршаллер, но я хотел бы знать, возможно ли, чтобы сгенерированные файлы производили правильный вывод без их настройки (они перестраиваются при каждом запуске сборки)?
У меня нет возможности изменить схема.
TLDR:
Следующие данные создаются из сгенерированных классов:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo xmlns="http://fuzz.com/other">
...
Вместо этого я хотел бы, чтобы они создавали:
<?xml version="1.0" encoding="utf-8" ?>
<foo xmlns="http://fuzz.com/other"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://bar.com foo.xsd">
...