在我当前的项目中,我们从XSD文件生成JAXB bean。 我们需要关于bean的行号信息(超出XSD验证错误!)所以我使用了这里指定的-Xlocator选项:
http://java.sun.com/webservices/docs/1.6/jaxb/xjc.html
但是,我错过了Locator类。在这个有六年历史的页面上引用的jar文件在任何地方都找不到,因为我根本没有在任何网站上看到JWSDP的下载。
XJC死了吗?我应该使用其他东西吗?
编辑:解决方案必须使用Java 1.5
答案 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.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
答案 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;