Сценарий следующий: у меня есть пакет java ( myapp.config ), который содержит все мои JAXB-аннотированные классы, из которых я хотел бы сгенерировать файл схемы XML. В пакете также есть файл package-info.java , который содержит аннотацию @ XmlSchema для элемента пакета, поэтому действует во всем пакете:
@XmlSchema(namespace="http://myapp/config",
xmlns = @XmlNs(prefix="myapp", namespaceURI="http://myapp/config"),
elementFormDefault=XmlNsForm.QUALIFIED)
package myapp.config;
Когда я запускаю инструмент командной строки schemagen , который поставляется вместе с JDK,
D:\Projects\Myapp>"%JAVA_HOME%/bin/schemagen" -cp "%JAVA_HOME%/lib/tools.jar"
src/myapp/config/*.java
Я получаю правильный результат: корневой элемент в сгенерированном schema1.xsd файле содержит targetNamespace и другие необходимые атрибуты:
<xs:schema elementFormDefault="qualified" version="1.0"
targetNamespace="http://myapp/config"
xmlns:tns="http://myapp/config"
xmlns:myapp="http://myapp/config">
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
Однако, когда я хочу выполнить ту же задачу в моем скрипте Ant,
<schemagen srcdir="src/myapp/config" destdir="dist">
<include name="*.java"/>
</schemagen>
Инструмент schemagen, похоже, полностью игнорирует аннотации пространства имен, потому что в результирующем файле schema1.xsd их нет и следа:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
Когда я запускаю задачу schemagen в режиме verbose и debug , становится очевидным, что инструмент загружает все .java файлы, кроме package-info.java , поэтому он ничего не знает о пространствах имен.
Вы встречали это странное поведение раньше? Почему инструмент командной строки обрабатывает файл информации о пакете, а задача Ant - нет? Что я должен сделать, чтобы задача Ant работала?
Заранее спасибо,
BUC