2010-05-25 150 views
1

在我当前的项目中,我们从XSD文件生成JAXB bean。 我们需要对豆行号信息,所以我就用这里指定的-Xlocator选项(超出XSD验证错误!):JAXB定位器 - 缺少依赖关系?

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

不过,我错过了定位器类。在该六年前的页面上引用的jar文件无法在任何地方找到,因为我没有在任何站点上看到JWSDP的下载。

XJC死了吗?我应该使用别的东西吗?

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

回答

0

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

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

+0

我在Java板中创建了一个问题,因为它仍然存在于JAVA 1.8中。 https://java.net/jira/browse/JAXB-1125 – Duff 2017-03-22 16:20:44

3

XJC是离死不远了,但你引用该页面是古老的,并适用于JAXB 1的Java6包含JAXB 2.1(见文档here)。令人讨厌的是,当你今天进行谷歌搜索时,你回头的大部分命中都是针对过时的JAXB 1引用。

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

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

+0

我希望每个bean来跟踪它在来替代进口

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

XML文件,即行和列号(行将是suf尽管)。 看起来好像XJC支持这个(通过-Xlocator)并且JAXB似乎是通过@XmlLocation注解来实现的,但是我不能让它在没有依赖的情况下工作。 如果相关:我们使用java 1.5。 – 2010-05-26 11:52:02

+0

@Wouter:请参阅编辑 – skaffman 2010-05-26 12:48:53

+0

感谢您的补充,但是......也许我很愚蠢,但我无法在该网站上找到正确的下载。我可以下载一个带有一个10兆字节的jar包,但这对我来说没有什么用处。我在哪里可以下载正确的jar? – 2010-05-28 09:36:50

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 
0

对于Maven的用户添加的依赖

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

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