Команды wsimport и xjc (оба загруженные как часть Java JDK) игнорируют предоставленный файл привязки jaxb, когда целевые wsdl/xsds помещаются под некоторые конкретные пути.xjc/wsimport - привязка JAXB игнорируется
Для воспроизведения этого поведения может использоваться путь C: \ a. Этот каталог содержит следующие файлы: XSD
nm.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="name.xsd"/>
<xs:annotation>
<xs:documentation xml:lang="en">Annotation</xs:documentation>
</xs:annotation>
<xs:element name="name" type="Name"/>
<xs:complexType name="FName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LName">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
name.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name">
<xs:sequence>
<xs:element name="FirstName" type="FName"/>
<xs:element name="LastName" type="LName"/>
<xs:element name="Date" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
bindings.xjb:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:globalBindings generateElementProperty="false" collectionType="indexed">
<jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/>
</jxb:globalBindings>
</jxb:bindings>
Следующая команда используется из C: \ а для генерации артефактов JAXB:
xjc -b bindings.xjb nm.xsd
Связывание игнорируется. Сгенерированные классы по-прежнему используют xs: date вместо java.util.Date, а класс адаптера не генерируется. Проблема также воспроизводится при использовании wsimport с wsdl, который импортирует XSD.
При переименовании к д, связывание работает так, как ожидалось. Некоторые пути работают, а некоторые - нет. Это кажется случайным, ни одна модель не была идентифицирована. Поведение согласовано для заданного пути. Это было воспроизведено на окнах 10, windows 7 и Unix-машинах. Используемая версия Java - 1,7.0_79. Имя файлов привязок, похоже, не имеет эффекта, но имя файлов XSD делает.
Что может быть причиной этой проблемы и как это можно устранить? Почему путь влияет на привязку? Существуют ли какие-либо обходные пути, которые могут помочь избежать этой проблемы, при условии, что привязка не будет проигнорирована, даже если путь изменится?
Я не могу воспроизвести проблему. Прежде всего, что-то не так с вашим файлом bindings.xjb. Закрывающий тег для отсутствует. Тогда странно иметь тот же метод для синтаксического анализа и печати (конвертер должен, например, использовать Converter.print как printMethod). Можете ли вы дать более подробную информацию о том, какую небольшую версию JDK7 вы использовали и какой каталог вы назвали командой wsimport? И не могли ли вы напечатать вывод «tree/f» в каталоге, который вы назвали wsimport, и о выходе самой команды wsimport? Благодаря! –
boskoop
Привет, боскооп, спасибо за ваш ответ. Я установил глобальный тег привязки и метод printMethod (не затрагивал проблему). Я использую jdk1.7.0_79. Я попытаюсь воспроизвести проблему в каталоге, который не раскрывает конфиденциальную информацию и не обновляет вопрос. –
Попытка воспроизвести с образцом wsdls и xsds –