Как я могу установить xsi: schemaLocation для удаленного пути, но использовать локальную схему? - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь использовать 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">
   ...
...