问题标签 [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 投票
2 回答
49885 浏览

java - JAXB 将多个 XML 元素解组为单个类

我有以下 XML 结构,它跨多个 XML 元素对单个概念进行建模。这种格式不在我的控制范围内。

我想在我可以控制的数据库中对此进行建模,并且可以拥有一个更简单的Channel表,其中包含id,typename字段。因此我想解组成一个单一List<Channel>Wrapper类。

这可以通过@Xml...注释自动完成吗?我目前正在使用 JAXB 解组为单独的@XmlElement(name="Channel")@XmlElement(name="ChannelName")类列表,然后对瞬态ChannelName/name进行后处理,Channel但我认为必须有一种更简单的自动化方法来映射这些元素。或者它是 XSLT 的工作?

知道 XML 作为 HTTP 文件 POST 文件传入并且我使用 Spring 3、Java 和 Hibernate 可能会有所帮助。我希望EclipseLink JAXB (MOXy)中的某些东西可能会有所帮助:)

0 投票
1 回答
1392 浏览

xpath - EclipseLink MOXy @XmlPath 支持按属性值获取元素值

使用 EclipseLink MOXy JAXB 实现,我正在尝试使用 @XmlPath 注释来获取基于元素属性值的元素值。我似乎无法让它工作。这支持吗?

XML 摘录:
<Item>
  ...
  <ItemRefFields>
    <ItemRefField id="1">12345</ItemRefField>
    <ItemRefField id="2">blah</ItemRefField>
  </ItemRefFields>
</Item>

POJO摘录:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
  ...
  @XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
  private String ItemRef1 = null;
  @XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
  private String ItemRef2 = null;
  ...
}

现在发生的情况是,这两个值都被连续分配给 ItemRef2,因此“blah”最终成为最终值,但 ItemRef1 从未获得分配的值。我相信这是因为 XPath 表达式 ([@id='x']) 的属性值部分被忽略了。因此,两个 XPath 表达式被视为相同,似乎这导致表达式首先映射到 ItemRef1,然后映射到 ItemRef2,ItemRef2 覆盖 ItemRef1 映射,因此 ItemRef2 获胜。

我希望这是由我的语法问题引起的。任何意见,将不胜感激。

谢谢,凯文

0 投票
1 回答
1871 浏览

java - MOXy 的 xml-transient 声明是如何工作的?

我在一个单独的项目中有一组 bean,我无法更改。这些 bean 具有 JPA 和 JAXB 注释,并且正在 RESTful 实现中使用。我的大多数关系都是延迟加载的,我希望能够更精细地控制哪些元素实际上被编组以进行传输。

我在下面有修改后的 MOXy Customer.java 类。

我希望我能够使用 MOXy eclipselink-oxm 映射来控制编组的内容,但它的行为并不像我预期的那样。使用 JAXB 注释,您将元素(字段或属性)声明为瞬态,但 eclipselink-oxm.xml 仅允许对类型进行瞬态声明。但是,当我像这样声明类型瞬变时,会出现以下异常:

例外:

如果我删除 xml-transient 属性或将其设置为 false,则 Customer 将按预期转换为 XML。有什么方法可以在不修改 Customer bean 的情况下抑制电话号码的编组?

0 投票
1 回答
2177 浏览

json - MOXy JSON 支持

我在我的 RESTEasy 项目中使用 EclipseLink 的 MOXy 作为 JAXB 实现。由 @XmlDiscriminatorNode 和 Value 等注释带来的 MOXy 的高级功能对我帮助很大。除了一件事:JSON 支持之外,一切都运行良好。我正在使用 RESTEasy 的 JettisonMappedContext 但不幸的是,编组后只有实例变量字段属于我的 JSON 中的抽象超类。

子类:

编组后的 XML:

编组后的 JSON:

有没有其他方法可以实现这一目标?

谢谢你。

0 投票
4 回答
14920 浏览

java - JAXB 2.x:如何在不知道目标类的情况下解组 XML?

如果有办法,如何做到这一点,我想知道最优雅的一种。这是问题: - 假设您有一个抽象类 Z - 您有两个从 Z 继承的类:名为 A 和 B。

您可以像这样编组任何实例(A 或 B):

在生成的 XML 中,您可以看到它是什么类型的实例(A 或 B)。

现在,你如何解组喜欢

我得到一个 UnmarshalException 说

javax.xml.bind.UnmarshalException"

那么如何进行解组以获得 Z 的实例,然后可以在解组后进行测试,它是什么?例如 z instanceof A then... z instanceof B then something else... 等等。

感谢您提供任何想法或解决方案。

我正在使用 JRE1.6 和 MOXy 作为 JAXB Impl。

0 投票
1 回答
246 浏览

jaxb - JAXB/MOXy:如何部分解组,将给定节点的后代传递给封闭/专有类?

我从一些我希望能够从 XML 解组的 Java 类开始——我正在确定模式。我想使用类似于以下的 XML:

我希望注释我的 Java 类,类似于以下内容:

我想将 <foo xmlns="http://proprietary.foo"> 元素及其后代传递给已编译的工厂类,其工作方式如下:

FooFactory.getFooFromDomNode(myFooElement) // Returns a private ProprietaryFooImpl as an instance of the public ProprietaryFoo Interface

似乎我需要为 ProprietaryFoo 创建一个 DomHandler 但我不太明白(我得到的是“com.xyz.ProprietaryFooImpl 或其任何超类在这种情况下都是已知的。”)我也是对 XmlJavaTypeAdapter 感兴趣我不知道如何将 ValueType 作为元素接收。

0 投票
1 回答
937 浏览

java - JAXB 解组到实体错误

我在将 xml 流解组到实体时遇到问题。我的外键永远不会被设置为具有正确主键的对象,它们只是被设置为一个空对象。

具有外键的类称为 ProductBase。它引用了 BrandData(field pkId) 和 Categories(field pkId)。当我解组并坚持时,我可以很好地处理 BrandData 和 Categories。我遇到了 ProductBase 的问题。

这是产品库:

解组以下内容:

我希望得到一个像这样的 ProductBase 对象:

但是我得到

ProductBase p1: p1.pkId=88294 p1.brandData = (brandData object each field null) p1.categories = (Categories object each field null) p1.ts = (Date object with value 1970-01-01T05:22:35.06)

因此,当我坚持 ProductBase 时,它​​会遇到空值问题。

我希望这是由于 BradnData 和 Categories 实体中的引用不当造成的。我尝试使用 @XmlInverseReference 注释,但没有成功。任何人都看到问题可能是什么?

BrandData 实体:

类别实体:

0 投票
1 回答
1979 浏览

jaxb - 使用 MOXy 编组到 XML 时,Java 继承可以隐藏/展平吗?

是否有可能使用 JAXB,可能使用 MOXy,在编组中将基类“扁平化”为其子类,从而使 Java 继承在 XML 中不可见?我们有许多基于生成类的一对一的手工创建类——基类在 XML 中没有任何价值。

如果不是很明显,我们正在使用 schemagen 功能——从 Java 开始,创建一个模式。

0 投票
1 回答
3040 浏览

java - 使用 JAXB 保持干燥

我正在开发一些必须以下列格式序列化为 XML 的 Java 类:

一开始,Foo.java看起来像这样:

Bar.java猜测什么和Baz.java可能是什么样子并不需要太多的想象力。int这些是(在本例中) 、、String和的非常简单的包装类boolean。到目前为止,一切都很好。写完第九轮

我想:“嘿,我知道如何解决这个问题——我只需要一层抽象!” 介绍Wrapper<T>

现在,要实现Foo,我需要做的就是扩展Wrapper,实现我需要的工厂方法:

并添加@XmlSeeAlso({... Foo.class ...})toWrapper的声明。


  • 优点:这要好得多。
  • 缺点:JAXB 不会序列化这些对象。

由于在 JAXB 内部深处某个地方抛出的任何调用JAXBContext.getInstance(Wrapper.class)或失败:JAXBContext.getInstance(Foo.class)NullPointerException

我已经尝试将我的 JAXB 实现从 Metro 切换到 MOXy(并且我确实检查了实现是否发生了变化)但是 MOXy 抛出了类似的 NPE:


有没有办法在最小化样板文件和保持DRY的同时生成所需的 XML ?

0 投票
1 回答
1350 浏览

java - 为多个 Java 包指定 MOXy 运行时

有没有办法将 MOXy 指定为我的 JAXB 实现,对于分布在多个 Java 包中的域类,而不是放入jaxb.properties每个单独的包中?