java - jaxb错误

标签 java jaxb

我正在使用jaxb(xjc版本“ 2.0-b26-ea3”)

我已经可以使用xjc生成架构(.xsd)的类,但是当我尝试编译生成的类时,出现错误,提示:“包javax.xml.bind.annotation”不存在。

我正在使用jdk1.5.0_14。我正在尝试通过命令提示符运行。

任何帮助将不胜感激。

提前致谢!!

最佳答案

XJC生成的Java源文件使用JAXB API中的注释。为了编译它们,这些注释类型必须在类路径上。

要使用JAXB(用于进出XML文档的编组和从中解编),您将需要满足以下条件:


JAXB API定义。
JAXB实现。
实现依赖的任何库。


实现与API分开且可以互换。它将通过Java服务提供程序机制定位。我在这里不做详细介绍,但是假设在类路径上有一个带有实现的jar足够了。通常,您只会调用JAXB API类。例如,JAXBContext.newInstance("my.sample.pack");

实际的实现位于运行时,并通过您的API调用加载。这意味着,为了编译JAXB代码,带有API的jar应该足够。仅在运行时需要实现及其依赖项。

现在,对于JDK 1.6.x,您无需在类路径中包含任何其他内容。从Java SE 6开始,JAXB API已包含在标准Java SE API中。 Java运行时环境还包括该API的实现。这是the java.net JAXB site.上可用的参考实现

对于JDK 1.5.x,情况有所不同。 JAXB API尚未作为标准Java API包含在内。因此,您需要手动使其可用。至少您将需要API;您将要使用的实现是可以自由选择的,尽管除了我脑海中的参考实现之外,我什么都不知道。它可能是最好的开始。
单击上面链接的JAXB网站上的“立即下载”按钮。您会看到一个下载jar文件的链接。通过在文件系统中双击它或通过命令行运行它来获取并打开它。这会将一些内容提取到与jar相同位置的文件夹中。您会看到许多文件夹。 bin文件夹包含xjc和schemagen的runnable。还有文档和示例文件夹。 lib文件夹是我们感兴趣的文件夹。这是一个摘要:


jaxb-api.jar:这是JAXB API;您将需要此代码来编译生成的代码
jaxb-impl.jar:参考实现;不需要编译,但是在运行时需要
jaxb-xjc.jar:用于以编程方式或在Ant中调用xjc
jaxb1-impl.jar:JAXB 1 API的参考实现;我认为您会坚持使用JAXB 2,因此请忽略它
activation.jar:一个依赖关系,不需要进行编译,但在运行时可能需要
jsr173_1.0_api.jar:实际上,这是用于XML(StAX)的Java流API。 JAXB参考实现使用它


在实现方面,最后一个类似于JAXB。它是具有可互换实现的API。与JAXB一样,它在Java 5中默认情况下不可用,但已包含在Java 6 API中。在Java 5中,您可能还需要一个实现。我留给您查找和使用它。遵循的步骤将与我为JAXB描述的内容完全相似。

因此,将其总结为一个简洁的概述...如果您可以使用Java 6,几乎所有依赖项都是开箱即用的,并且您在类路径上不需要任何其他东西来编译与JAXB相关的代码,并且运行。对于Java 5,您至少需要用于编译的JAXB API和该API,以及在运行时的实现。该实现可能有其自身的依赖性,因此,如果仍然遇到ClassNotFound错误,请尝试找出缺少的类是哪个项目的一部分。

Pangea建议的jarfinder网站可能对此非常有用。但是不要跳过检查实际项目站点的步骤,以确保获得所有依赖项,最新版本并查看许可条款。

祝好运!

关于java - jaxb错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113802/

相关文章:

java - 为什么我在执行 POST 请求时收到 405 Method Not Allowed

java - 如何使用 JdbcTemplate 从 Spring 创建存储函数?

java - 将hyperjaxb采购订单教程导入Eclipse

java - 使用 JAXB 编码只能包含多个子节点类型之一的 XML 节点(SharePoint 查询)

java - Spring集成动态消息选择器

java - Maven/Spring 私有(private)存储库设置

java - 如何在多同步 Realm 中分离我的 Realm 对象?

java - 使用 Moxy 处理动态元素名称

java - 使用 JAXB 在 Java 中编码

java - 使用 JAXB 从 XML 字符串创建对象