2

我在使用 JAXB 编组我的 Java 对象时遇到问题。当我将 Web 服务作为独立应用程序运行时,它运行良好。

当我将它与我的项目集成并使用生成的 Java 类时,在编组时出现异常

RequestImpl类或其任何超类都不为任何上下文所知。

在生成我的 JAXB 实例时,我使用以下语句:

JAXBContext jaxb = JAXBContext.newInstance("com.eos.hotels.API.Request");

我有 2 个单独的 xsd,一个Request用于Response.

生成的 java 类存储在一个文件夹结构中,如下所示:

API->请求
API->响应

在上述两个文件夹中,ObjectFactory.java都创建了一个并且jaxb.properties也在那里。

此外,在上述每个文件夹中,impl都会创建包含所有Impl文件的文件夹,并在此impl文件runtime夹中创建文件夹。

所有xs:element来自 XSD 的都是作为接口创建的,只有Impls是类。此外,生成的 java 文件中没有 XML 注释。

谁能告诉我这里出了什么问题?

出现此问题是因为文件夹结构还是因为 XML 注释不存在?

我在互联网上读到注释如果不存在也不是问题。

我什至尝试将生成的 impl 类复制到与 相同的文件夹中ObjectFactory.java,但这也不起作用。

4

4 回答 4

1

尝试在您的 JAXBContext 对象上调用 toString 方法。因为您使用的是 JAXB1 类,所以它应该显示如下内容:com.eos.hotels.API.impl.runtime.DefaultJAXBContextImpl。如果不是 - 您可能在 com.eos.hotels.API 包中没有 jaxb.properties 文件,或者您已删除 com.eos.hotels.API.impl.runtime 包。

于 2013-01-23T14:54:01.513 回答
0

因此,您正在使用 jaxb1,并从 2 个不同的 XSD 生成您的 jaxb 类,希望声明两个单独的命名空间 URI(否则会弄乱 JAXB)。

首先,我会考虑将这两个 XSD 结合起来,并拥有一个命名空间 URI。您仍然可以使用相同的包结构,或者以单个包结构结束,但更重要的是,将以单个运行时文件夹结束。此外,您最终将得到一个 ObjectFactory,这将避免在使用同一类中的两个 ObjectFactory 类时必须使用 FQCN(完全限定的类名)(这将使您的导入语句无用,这可能是一个陷阱也在这里玩)。

当您构建 JAXBContext 时,请确保列出所有包(而不是 impl 包),您应该一切顺利。

试试这个,让我们知道你得到了什么。祝你好运。

于 2012-04-27T23:39:00.317 回答
0

在创建时,JAxbContext 我使用了以下内容:

JAXBContext jaxb = new DefaultJAXBContextImpl(packagename, ObjectFactory.class                 .getClassLoader());

虽然我不知道为什么,但它似乎工作正常。

于 2012-05-08T09:11:35.300 回答
0

在从多个目录生成的类上创建 JAXBContext 时,您需要包含用冒号“:”分隔的所有包名称。

 JAXBContext jaxb = JAXBContext.newInstance("com.example.package1:org.example.package2");
于 2012-04-27T12:37:43.693 回答