问题标签 [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.
java - JAXB 将多个 XML 元素解组为单个类
我有以下 XML 结构,它跨多个 XML 元素对单个概念进行建模。这种格式不在我的控制范围内。
我想在我可以控制的数据库中对此进行建模,并且可以拥有一个更简单的Channel
表,其中包含id
,type
和name
字段。因此我想解组成一个单一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)中的某些东西可能会有所帮助:)
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 获胜。
我希望这是由我的语法问题引起的。任何意见,将不胜感激。
谢谢,凯文
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 的情况下抑制电话号码的编组?
json - MOXy JSON 支持
我在我的 RESTEasy 项目中使用 EclipseLink 的 MOXy 作为 JAXB 实现。由 @XmlDiscriminatorNode 和 Value 等注释带来的 MOXy 的高级功能对我帮助很大。除了一件事:JSON 支持之外,一切都运行良好。我正在使用 RESTEasy 的 JettisonMappedContext 但不幸的是,编组后只有实例变量字段属于我的 JSON 中的抽象超类。
子类:
编组后的 XML:
编组后的 JSON:
有没有其他方法可以实现这一目标?
谢谢你。
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。
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 作为元素接收。
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 实体:
类别实体:
jaxb - 使用 MOXy 编组到 XML 时,Java 继承可以隐藏/展平吗?
是否有可能使用 JAXB,可能使用 MOXy,在编组中将基类“扁平化”为其子类,从而使 Java 继承在 XML 中不可见?我们有许多基于生成类的一对一的手工创建类——基类在 XML 中没有任何价值。
如果不是很明显,我们正在使用 schemagen 功能——从 Java 开始,创建一个模式。
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 ?
java - 为多个 Java 包指定 MOXy 运行时
有没有办法将 MOXy 指定为我的 JAXB 实现,对于分布在多个 Java 包中的域类,而不是放入jaxb.properties
每个单独的包中?