问题标签 [xjc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
62155 浏览

java - How to generate @XmlRootElement Classes for Base Types in XSD?

I am having some issues with generating Java Classes with appropriate JAXB annotations from an XSD using XJC.

I have a relatively simple XSD file defining my XML schema. The complex types within the XSD take advantage of inheritance using the <xs:extension> tags. The problem I having is that I need all complex types to generate Java Classes with the @XmlRootElement.

Unfortunately, the way in which XJC generates the classes means that only derived class gets the @XmlRootElement (not the base class). I am using the simple global binding directive to ensure that it solves many of the other issues that I have faced with XJC.

Here is an example snippet of the XSD:

As we can see from the above snippet, EmailArtifact extends Artifact.

The java class code for EmailArtifact contains the following:

The java class code for Artifact contains the following:

In the EmailArtifact we can see that it contains the @XmlRootElement but the base type Artifact does not contain @XmlRootElement.

How can you force XJC to generate @XmlRootElement for all classes including the base types.

0 投票
1 回答
2973 浏览

java - 使用默认 sax 解析器时,jaxb unmarshal 可被精心制作的 xml 滥用?

因此,在我当前的项目中,我使用 JAXB RI 和 Sun 的 JRE(我相信是 Xerces)中的默认 Java 解析器来解组任意 XML。

首先我使用 XJC 编译一个如下形式的 XSD:

在“好案例”中,一切都按设计进行。也就是说,如果我传递了符合此模式的 XML,那么 JAXB 会正确地将其解组为对象树。

当我通过外部 DTD 引用传递 XML 时,问题就出现了,例如

在解组这样的事情时,SAX 解析器尝试加载远程实体(“ http://somehost/foobar.dtd ”),尽管这个片段显然不符合我之前用 XJC 编译的模式。

为了规避这种行为,因为我知道任何符合标准的 XML(根据我编译的 XSD)都不需要加载远程实体,所以我必须定义一个自定义 EntityResolver 来缩短所有远程实体的加载。所以不要做类似的事情:

我被迫这样做:

所以我的最终问题是:

当使用 JAXB 解组时,如果在没有加载这些远程实体的情况下可以将相关 XML 识别为无效时,底层 SAX 解析器加载远程实体是否应该自动短路?

另外,这似乎不是一个安全问题吗?鉴于 JAX-WS 在底层依赖 JAXB,似乎我可以将特制的 XML 传递给任何基于 JAX-WS 的 Web 服务,并导致 WS 主机加载任意 URL。

我是一个相对新手,所以我可能缺少一些东西。如果是这样,请告诉我!

0 投票
4 回答
19601 浏览

java - 如何使生成的类包含 XML Schema 文档中的 Javadoc

我目前正在使用在大多数类型和元素上具有<xsd:annotation>/的 XML 模式。<xsd:documentation>当我从这个 XML Schema 生成 Java Bean 时,这些 Bean 的 Javadoc 只包含一些关于类型/元素的允许内容的通用生成信息。

我想<xsd:documentation>在相关位置查看标记的内容(例如,complextType 的标记内容应该显示在生成的表示该 complexType 的类的 Javadoc 中)。

有什么办法可以做到这一点?

编辑:这个 XML Schema 将在带有 JAX-WS 的 WSDL 中使用,所以这个标签也可能是合适的。

编辑 2:我读过关于<jxb:javadoc>. 据我了解,我可以在单独的 JAXB 绑定文件中或直接在 XML 模式中指定。这几乎可以解决我的问题。但我宁愿使用现有的<xsd:documentation>标签,因为 Javadoc 不是文档的主要目标(它主要是关于数据结构的信息,而不是关于从中生成的 Java Beans),并且允许非 JAXB 工具访问信息为好。两者都提供文档<jxb:javadoc>并且xsd:documentation>“感觉”是错误的,因为我无缘无故地复制数据(和工作)。

编辑 3:感谢 Pascal 的回答,我意识到我已经有了一半的解决方案:<xsd:documentation>scomplexType被写入其 Javadoc 的开头!问题仍然是使用了complexTypes 并且simpleTypes(也可以导致类)和元素仍然是 Javadoc-less。

0 投票
1 回答
59990 浏览

java - 如何为xjc编写外部绑定文件?

JAXB xjc的文档说:

-b 指定一个或多个要处理的外部绑定文件。(每个绑定文件必须有它自己的“-b”开关。)外部绑定文件的语法非常灵活。您可能有一个包含多个模式自定义的绑定文件,或者您可以将自定义分解为多个绑定文件:

此外,命令行中模式文件和绑定文件的顺序无关紧要。

但是我在哪里可以找到这个“外部绑定文件”的文档?

0 投票
3 回答
19958 浏览

ant - 如何使用 jaxb 和 Ant xjc 任务处理多个 xsd 模式?

我正在使用 jaxb 从 Ant 脚本中的 xml 模式生成 java 对象类,如下所示:

现在,这适用于一个模式(本例中为 ff.xsd)。如何处理多个模式(即多个 xsd 文件)?

我尝试为每个模式设置一个单独的 ant 任务,但不知何故,这不起作用,因为 Ant 处理第一个任务,然后说以下模式的“文件是最新的”!

0 投票
1 回答
18829 浏览

java - JAXB XJC 代码生成 - Marshaller 生成的 xml 中缺少“schemaLocation”

我使用 XJC 工具为我的 XSD 模式生成 Java 类。当我使用 JAXB Marshaller 将类编组为 XML 有效负载时,我在输出 XML 中缺少“schemaLocation”参数,但我在 xsd 文件中声明了此参数。如何在输出 XML 中强制执行“schemaLocation”参数?

下面是我用于代码生成的 xsd 模式文件的开头:

问候

0 投票
2 回答
10120 浏览

java - 如何使用 xjc 和自定义绑定生成 XMLElementWrapper 注释

我正在使用 JAXB 和 xjc 将我的 XML Schema 编译成 Java 类。我不想手动编辑这个生成的类。我有这样的xml架构:

xjc 生成一个Items只包含Item对象列表的类。有没有机会省略类并直接在类Items中有一个对象列表?ItemRoot

我知道这可以通过@XMLElementWrapper注释来完成,但我不知道如何告诉 xjc 创建这样的。

感谢您的任何建议!

最好的问候,马库斯

0 投票
1 回答
4235 浏览

java - 为 JAXB 编译解决包含的 XSD 中的命名冲突

我目前正在尝试使用 JAXB (IBM build 2.1.3) 将一对模式文件编译到同一个包中。每个都将自行编译,但是当尝试将它们编译在一起时,由于包含,我会遇到元素命名冲突。我的问题是;有没有办法通过外部绑定指定命名冲突的解决方案。

示例文件如下。在示例中,违规元素称为“Common”,它在 incA 和 incB 中都定义:

incA.xsd

incB.xsd

a.xsd

B.xsd

从 xjb 的一次调用编译两者时的编译器错误:

(作为参考,这是解决编译 OAGIS8 SP3 包的问题的概括)

0 投票
4 回答
6361 浏览

java - 使用 XJC 将 XML 模式转换为 Java 类

我正在使用 xjc 从 XML 模式生成 Java 类,以下是 XSD 的摘录。

在大多数情况下,生成的类都很好,但对于上面的块,我会得到类似的东西:

上面有以下评论:

我在有问题的两行末尾发表了评论。

目前,我认为更改架构并不容易,因为这是由供应商决定的,我不想走这条路(如果可能的话),因为它会大大减慢进度。

我搜索了,找到了这个页面,外部定制是我想做的吗?我大部分时间都在使用生成的类,所以我并不完全熟悉生成这些类的过程。“属性定制”的简单示例会很棒!只要模式仍然可以使用,生成 Java 类的替代方法就可以了。

编辑:我应该澄清这两者UnstructuredName确实是相同的元素。

0 投票
4 回答
2477 浏览

java - JAXB 定位器 - 缺少依赖项?

在我当前的项目中,我们从 XSD 文件生成 JAXB bean。我们需要有关 bean 的行号信息(除了 XSD 验证错误!)所以我使用了此处指定的 -Xlocator 选项:

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

但是,我错过了 Locator 类。在那个有六年历史的页面上引用的 jar 文件在任何地方都找不到,因为我根本没有在任何站点上看到 JWSDP 的下载。

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

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