JAXB定位器 - 缺少依赖?

时间:2010-05-25 15:10:18

标签: java xml xsd jaxb xjc

在我当前的项目中,我们从XSD文件生成JAXB bean。 我们需要关于bean的行号信息(超出XSD验证错误!)所以我使用了这里指定的-Xlocator选项:

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

但是,我错过了Locator类。在这个有六年历史的页面上引用的jar文件在任何地方都找不到,因为我根本没有在任何网站上看到JWSDP的下载。

XJC死了吗?我应该使用其他东西吗?

编辑:解决方案必须使用Java 1.5

4 个答案:

答案 0 :(得分:3)

XJC远未消亡,但您引用的页面很古老,适用于JAXB 1.Java6包含JAXB 2.1(请参阅文档here)。令人讨厌的是,当你今天进行谷歌搜索时,你得到的大部分命中都是针对过时的JAXB 1引用。

我不确定你的要求是什么。你是什​​么意思“我们需要关于豆子的行号信息”?

编辑:您提到了@XmlLocation注释。这是Java6和JAXB参考实现中的非标准注释,您将在Java5中使用它。类名为com.sun.xml.bind.annotation.XmlLocation,javadoc为here。如果您还没有here,可以从{{3}}获得参考实现。

答案 1 :(得分:1)

谢谢。我下载了 jaxb-impl.jar ,因为jaxb-api.jar已经包含在Java 6 API中。以防其他人需要一个linux脚本来替换错误的导入,如Wouter所述。

导航到您的项目路径并调整com.abc.generatedabc.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

答案 2 :(得分:0)

我发现了问题,或者至少是部分问题。 XJC生成对XmlLocation和Locatable的“内部”包版本的导入。不要问我为什么!

我写了一个小脚本用正确的替换这些导入,现在似乎工作正常。

答案 3 :(得分:0)

对于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;