问题标签 [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.
jaxb - Jaxb EclipseLink/MOXy:是否可以指定 get/set 方法的名称
我有一个非常简单的问题:
假设我有一个这样定义的模型类:
你可以看到我有一个 testProperty 的标准设置器,但 getter 有一个不同的名称:getFormattedTestProperty()。
是否可以在 Jaxb/Moxy 中指定用于特定属性的吸气剂?
我正在使用带有外部元数据绑定文件的 MOXy 实现。我正在从事的项目使用您使用 Castor。在 Castor 的映射文件中,您可以指定使用哪个 getter/setter:
moxy 的外部元数据是否可以做同样的事情?
如果不支持这种自定义,是否可以将一个字段标记为只读而另一个字段标记为只写?所以我可以在元数据绑定文件中声明一个名为“formattedTestAttribute”的只读属性和一个名为“testAttribute”的只写属性?
请注意,我对模型类的控制非常有限。
提前感谢您的回答。
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-ref
MOXy 不再“看到”吸气剂,使用xml-element
它。
inheritance - JAXB-ElipseLink:防止继承财产的编组
我再次有一个 EclipseLink 2.3 编组用例,这似乎很简单,但没有按预期工作:
我有一个抽象基类,它定义了一个属性 getX()。我有几个从这个基类派生的子类,它们继承了这个属性。
在编组子类时,这个属性也被编组给每个子类。但是,对于一个特定的子类,我想防止对这个属性进行编组。
我试过:
@Override
子类中的这个属性并设置它@XmlTransient
- 在oxm.xml
<xml-transient java-property="X">
中为子类指定。
两者都无济于事,财产总是编组的 - 这应该如何工作?
jaxb - JAXB-ElipseLink:@XmlJavaTypeAdapter 和类型属性
我正在使用 @XmlJavaTypeAdapter 将 Map 类型的字段编组为 XML。这会导致 EclipseLink-MOXyxsi:type="<myValueType>"
在输出 xml 元素上创建一个 -attribute。验证后,当然找不到引用的类型。
有什么办法可以抑制这个属性的产生吗?
PS:一个 XmlAdapter-tag 会很方便 :)
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 个缺失且未被验证检测到。
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),有没有办法做它 ?
在此先感谢您的时间。
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。
java - JAX-B:子元素上缺少 XML 属性
编辑:我最初从我的问题中遗漏了一个重要的细节——返回要编组的 Java 对象的服务方法返回接口类型 ( Foo
) 而不是类实现类型 ( FooImpl
)。
我有一个简单的 Java 类,其中包含几个元素和属性的 JAX-B 注释:
编辑: FooImpl 类有一个名为的接口Foo
:
当我有一个返回 a 的服务方法时Foo
,我得到了我所期望的:
但是我还有另一个包含 a 的类,List<Foo>
当它被编组时,XML 元素foo
不包含它们的id
属性!
保存列表的类如下所示:
我碰巧使用 MOXy 作为我的 JAX-B 实现,但我认为这并不重要。
java - 如何为 moxy jaxb 设置 characterEscapeHandler
我正在尝试characterEscapeHandler
为 moxy jaxb 设置自定义但遇到异常:
javax.xml.bind.PropertyException:名称:com.sun.xml.bind.characterEscapeHandler 值:..
我通过向of添加com.sun.xml.bind.characterEscapeHandler
属性来做到这一点(它适用于标准 jaxb)。marshallerProperties
org.springframework.oxm.jaxb.Jaxb2Marshaller
我知道 XmlCdata。但我不希望!Cdata[[ .. 将被添加,我只想不要转义字符(不添加 Cdata)。
jaxb - Moxy + 继承 + 包名作为 xml-root-element
我正在尝试编组一个使用 eclipseLink moxy 扩展抽象类的类:
我使用 xml 进行映射:
现在解组时一切都很好。当我编组对象时出现问题。代替
我只得到的根元素
作为根元素。有趣的是-一旦我将抽象类中的字段下推到示例中,并删除扩展 AbstractExample 关键字,根就是它应该是的
难道我做错了什么?我真的需要扩展抽象类,否则我的代码会有很多冗余。