问题标签 [moxy]

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 投票
1 回答
989 浏览

jaxb - Jaxb EclipseLink/MOXy:是否可以指定 get/set 方法的名称

我有一个非常简单的问题:

假设我有一个这样定义的模型类:

你可以看到我有一个 testProperty 的标准设置器,但 getter 有一个不同的名称:getFormattedTestProperty()。

是否可以在 Jaxb/Moxy 中指定用于特定属性的吸气剂?

我正在使用带有外部元数据绑定文件的 MOXy 实现。我正在从事的项目使用您使用 Castor。在 Castor 的映射文件中,您可以指定使用哪个 getter/setter:

moxy 的外部元数据是否可以做同样的事情?

如果不支持这种自定义,是否可以将一个字段标记为只读而另一个字段标记为只写?所以我可以在元数据绑定文件中声明一个名为“formattedTestAttribute”的只读属性和一个名为“testAttribute”的只写属性?

请注意,我对模型类的控制非常有限。

提前感谢您的回答。

0 投票
1 回答
1105 浏览

inheritance - JAXB-Eclipselink:XmlRootElement 和继承

使用 Eclipselink/MOXy 2.3 我在编组到 XML 时有以下用例:

我在 oxm.xml 中定义了以下映射:

现在这导致:

因为我不想要导出的 xml 中的属性名称,所以我更改了:

这导致:

我想要的是:

问题是:我如何实现这一目标?MOXy 只是忽略了我在 MyImpl 上的 XmlRootElement ......

编辑:

尝试 Blaise 的建议会给我以下异常:

现在这需要我之前遗漏的更多信息,因为我认为它不相关:

A 类是一个接口,它定义:public X getMyAbstract(); MyAbstract 实现 X(这就是我在接口 A 的映射中添加类型属性的原因)。

所以,使用xml-element-refMOXy 不再“看到”吸气剂,使用xml-element它。

0 投票
1 回答
414 浏览

inheritance - JAXB-ElipseLink:防止继承财产的编组

我再次有一个 EclipseLink 2.3 编组用例,这似乎很简单,但没有按预期工作:

我有一个抽象基类,它定义了一个属性 getX()。我有几个从这个基类派生的子类,它们继承了这个属性。

在编组子类时,这个属性也被编组给每个子类。但是,对于一个特定的子类,我想防止对这个属性进行编组。

我试过:

  1. @Override子类中的这个属性并设置它@XmlTransient
  2. 在oxm.xml<xml-transient java-property="X">中为子类指定。

两者都无济于事,财产总是编组的 - 这应该如何工作?

0 投票
1 回答
267 浏览

jaxb - JAXB-ElipseLink:@XmlJavaTypeAdapter 和类型属性

我正在使用 @XmlJavaTypeAdapter 将 Map 类型的字段编组为 XML。这会导致 EclipseLink-MOXyxsi:type="<myValueType>"在输出 xml 元素上创建一个 -attribute。验证后,当然找不到引用的类型。

有什么办法可以抑制这个属性的产生吗?

PS:一个 XmlAdapter-tag 会很方便 :)

0 投票
1 回答
1301 浏览

validation - JAXB-ElipseLink:编组器未验证

我希望我的 Eclipselink 2.3 Marshaller 在编组时执行验证。我已确保Schema由 a 正确创建SchemaFactory,我将其传递给Marshaller.setSchema并且我已通过Marshaller.setEventHandler().

元帅结果显然是无效的。到它的模式(在 Eclipse 中验证),但我可以看到我的断点handleEvent(ValidationEvent event)从未被命中。

我正在编组 XML 片段marshal(Object, XMLStreamWriter),并希望编组器根据我通过的模式对这些片段执行验证。

有人知道为什么这没有发生吗?

编辑

应该发生的验证错误:元素上缺少 2 个属性。

该元素对应于 List<> 中包含的 Java-Object。我正在使用以下方法编组列表:

元素本身的映射:

因此,所有属性都编组到 ListWrapperElement/ListElement/@attribute。其中 2 个缺失且未被验证检测到。

0 投票
1 回答
5842 浏览

inheritance - eclipselink/Moxy:基于类型的继承和属性名重载

我正面临一个编组/解组问题,涉及使用 MOXy 的 JAXB 实现和外部元数据绑定文件的继承和多态性。

我无法控制 XML 文件或模型类。

模型内部有多个类继承其他 DTO 类。这是我正在使用的环境的示例。此示例仅用于某些语法目的,真实环境涉及嵌套继承、集合等:

这是将被继承的类

这是一个继承的类

还有一个

这是一个容器类

这是在 MyContainer 包含 A 的情况下它应该生成的 XML

MyContainer 包含 B

和包含 C 的 MyContainer

所以你已经可以看到即将出现的问题......

这是我要编写的映射文件:


第一个问题是,如果我像这样绑定类,我会得到以下异常:

第一个问题:我知道这是正常的,Jaxb 需要一些方法来确定 MyContaioner.myObject 属性的类型。问题是我无法访问传入的 XML 文件,因此我无法向它们添加 xsi:type 字段。有没有办法根据其中是否存在特定属性来确定一个类?不管它的价值。如果源 xml 包含 @attrFromC 属性,我知道对象应该是 C 类型。如果它包含 attrFromB,它就是 B。


第二个问题是“name”属性在 B 和 C 中不存在,所以 jaxb 忽略了 em。

第二个问题:另一个问题是我不知道 Jaxb 是否能够像 XML 文件中预期的那样覆盖 xml 属性名称(@nameA、@nameB 和 nameC 都指 A.name),有没有办法做它 ?

在此先感谢您的时间。

0 投票
1 回答
4094 浏览

java - 使用 Spring 配置 CXF 以使用 MOXY 进行 XML 编组/解组

我有一个使用 CXF 提供 SOAP 和 REST Web 服务的 Java 服务器应用程序。目前它使用 JAX-B 的参考实现进行 XML 编组/解组,但我已将其配置为用 Jackson 替换 Jettison 以进行 JSON 编组/解组。我使用 Spring 进行 DI 和应用程序上下文配置。

REST Web 服务配置片段如下所示:

web.xml

应用程序上下文.xml

此配置有效,并将根据 HTTP Accept 标头返回 XML 或 JSON。我喜欢这个配置的地方在于它基于 Spring,并且非常容易创建和使用备用 JSON 编码器。可以在此处找到有关配置 CXF 的详细信息。

我的问题是现在我有一个新的(附加的)REST Web 服务要提供,我想为这个新的 Web 服务使用不同的 JAX-B XML 绑定。我知道 MOXy 可以做到这一点,但我无法弄清楚如何配置 CXF 端点,以便它将使用 MOXy 进行编组/解组(以及如何告诉 Moxy 我的自定义 XML 映射文件)。我还希望这个新的 Web 服务根据 Accept 标头返回 XML 或 JSON。我也读过 MOXy 2.4+ 也可以处理这个问题!

理想情况下,我可以将 MOXy 用于这个新端点,而不会影响其他现有的 servlet。

0 投票
1 回答
1986 浏览

java - JAX-B:子元素上缺少 XML 属性

编辑:我最初从我的问题中遗漏了一个重要的细节——返回要编组的 Java 对象的服务方法返回接口类型 ( Foo) 而不是类实现类型 ( FooImpl)。

我有一个简单的 Java 类,其中包含几个元素和属性的 JAX-B 注释:

编辑: FooImpl 类有一个名为的接口Foo

当我有一个返回 a 的服务方法时Foo,我得到了我所期望的:

但是我还有另一个包含 a 的类,List<Foo>当它被编组时,XML 元素foo 不包含它们的id属性

保存列表的类如下所示:

我碰巧使用 MOXy 作为我的 JAX-B 实现,但我认为这并不重要。

0 投票
1 回答
1207 浏览

java - 如何为 moxy jaxb 设置 characterEscapeHandler

我正在尝试characterEscapeHandler为 moxy jaxb 设置自定义但遇到异常:

javax.xml.bind.PropertyException:名称:com.sun.xml.bind.characterEscapeHandler 值:..

我通过向of添加com.sun.xml.bind.characterEscapeHandler属性来做到这一点(它适用于标准 jaxb)。marshallerPropertiesorg.springframework.oxm.jaxb.Jaxb2Marshaller

我知道 XmlCdata。但我不希望!Cdata[[ .. 将被添加,我只想不要转义字符(不添加 Cdata)。

0 投票
1 回答
273 浏览

jaxb - Moxy + 继承 + 包名作为 xml-root-element

我正在尝试编组一个使用 eclipseLink moxy 扩展抽象类的类:

我使用 xml 进行映射:

现在解组时一切都很好。当我编组对象时出现问题。代替

我只得到的根元素

作为根元素。有趣的是-一旦我将抽象类中的字段下推到示例中,并删除扩展 AbstractExample 关键字,根就是它应该是的

难道我做错了什么?我真的需要扩展抽象类,否则我的代码会有很多冗余。