JAXB Locator - отсутствует зависимость? - PullRequest
1 голос
/ 25 мая 2010

В моем текущем проекте мы генерируем компоненты JAXB из файла XSD. Нам нужна информация о номере строки (кроме ошибок проверки XSD!), Поэтому я использовал опцию -Xlocator, указанную здесь:

http://java.sun.com/webservices/docs/1.6/jaxb/xjc.html

Однако мне не хватает класса Locator. Файл jar, указанный на этой шестилетней странице, нигде не может быть найден, так как я не вижу загрузки для JWSDP ни на одном сайте.

XJC мертв? Должен ли я использовать что-то еще?

Редактировать: решение должно использовать Java 1.5

Ответы [ 4 ]

3 голосов
/ 26 мая 2010

XJC далеко не мертв, но та страница, на которую вы ссылаетесь, древняя и относится к JAXB 1. Java6 содержит JAXB 2.1 (см. Документы здесь ). Досадно, что когда вы выполняете поиск в Google сегодня, большинство обращений, которые вы получаете, относятся к устаревшим ссылкам JAXB 1.

Я не уверен, каковы ваши требования. Что вы подразумеваете под "Нам нужна информация о номере строки в компонентах"?

edit: Вы упомянули аннотацию @XmlLocation. Это нестандартная аннотация в Java6 и в справочной реализации JAXB, которую вы будете использовать с Java5. Имя класса com.sun.xml.bind.annotation.XmlLocation, а javadoc здесь . Эталонную реализацию вы можете получить из здесь , если у вас ее еще нет.

1 голос
/ 16 апреля 2013

Спасибо. Я скачал jaxb-impl.jar , так как jaxb-api.jar уже включен в Java 6 API. На тот случай, если кому-то еще понадобится скрипт Linux для замены неправильного импорта, как упомянул Wouter.

Перейдите к пути проекта и настройте com.abc.generated и abc.xsd.

#!/bin/sh
xjc -d src/ -p com.abc.generated -Xlocator abc.xsd

FILES=$(find src/ -type f -name *.java)
for f in $FILES
do
    sed -i 's/\(.*import com.sun.xml.internal.bind.Locatable;.*\)/import com.sun.xml.bind.Locatable;/g' $f
    sed -i 's/\(.*import com.sun.xml.internal.bind.annotation.XmlLocation;.*\)/import com.sun.xml.bind.annotation.XmlLocation;/g' $f
done
0 голосов
/ 13 августа 2014

Для Maven-User добавьте зависимость

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.7</version>
</dependency>

и заменить импорт

import com.sun.xml.internal.bind.Locatable;
import com.sun.xml.internal.bind.annotation.XmlLocation;

с

import com.sun.xml.bind.Locatable;
import com.sun.xml.bind.annotation.XmlLocation;
0 голосов
/ 28 мая 2010

Я нашел проблему или хотя бы ее часть. XJC генерирует импорт во «внутренние» версии пакетов XmlLocation и Locatable. Не спрашивай меня почему!

Я написал небольшой скрипт для замены этих импортных операций на правильные, и теперь, похоже, он работает нормально.

...