2017-02-19 9 views
9

Команды 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 делает.

Что может быть причиной этой проблемы и как это можно устранить? Почему путь влияет на привязку? Существуют ли какие-либо обходные пути, которые могут помочь избежать этой проблемы, при условии, что привязка не будет проигнорирована, даже если путь изменится?

+1

Я не могу воспроизвести проблему. Прежде всего, что-то не так с вашим файлом bindings.xjb. Закрывающий тег для отсутствует. Тогда странно иметь тот же метод для синтаксического анализа и печати (конвертер должен, например, использовать Converter.print как printMethod). Можете ли вы дать более подробную информацию о том, какую небольшую версию JDK7 вы использовали и какой каталог вы назвали командой wsimport? И не могли ли вы напечатать вывод «tree/f» в каталоге, который вы назвали wsimport, и о выходе самой команды wsimport? Благодаря! – boskoop

+0

Привет, боскооп, спасибо за ваш ответ. Я установил глобальный тег привязки и метод printMethod (не затрагивал проблему). Я использую jdk1.7.0_79. Я попытаюсь воспроизвести проблему в каталоге, который не раскрывает конфиденциальную информацию и не обновляет вопрос. –

+0

Попытка воспроизвести с образцом wsdls и xsds –

ответ

Смежные вопросы