1

在我当前的项目中,我们从 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

4 回答 4

3

XJC 远未消亡,但您引用的页面很古老,适用于 JAXB 1。Java6 包含 JAXB 2.1(请参阅此处的文档)。令人讨厌的是,当您今天进行 google 搜索时,您得到的大多数点击都是针对过时的 JAXB 1 引用。

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

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

于 2010-05-26T07:18:09.643 回答
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
于 2013-04-16T16:14:08.643 回答
0

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

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

于 2010-05-28T10:20:12.687 回答
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;
于 2014-08-13T13:20:03.567 回答