- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在让 Moxy 为继承对象列表生成“良好”的 XML 和 JSON 时遇到问题。无论是 XML 看起来还是 JSON 看起来都不错,但不是同时。这是模型:
public static abstract class Animal {
private String name;
protected Animal() {
}
protected Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@XmlRootElement
public static class Tiger extends Animal {
public Tiger() {
}
public Tiger(String name) {
super(name);
}
}
@XmlRootElement
public static class Lion extends Animal {
public Lion() {
}
public Lion(String name) {
super(name);
}
}
@XmlRootElement
public static class Zoo {
private List<Animal> animals = new ArrayList<>();
@XmlElementRef
public List<Animal> getAnimals() {
return animals;
}
public void setAnimals(List<Animal> animals) {
this.animals = animals;
}
public void addAnimal(Animal a) {
animals.add(a);
}
}
从以下 Zoo 实例生成的 XML 和 JSON
zoo = new Zoo();
zoo.addAnimal(new Tiger("Hobbes"));
zoo.addAnimal(new Lion("Simba"));
zoo.addAnimal(new Tiger("Sherikan"));
看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<zoo>
<tiger>
<name>Hobbes</name>
</tiger>
<lion>
<name>Simba</name>
</lion>
<tiger>
<name>Sherikan</name>
</tiger>
</zoo>
{
"zoo" : {
"tiger" : [ {
"name" : "Hobbes"
}, {
"name" : "Sherikan"
} ],
"lion" : [ {
"name" : "Simba"
} ]
}
}
XML 看起来也正是我想要的,但 JSON 很奇怪。 Moxy 使用类型作为键的方式不会保留列表中元素之间的顺序。这是错误还是功能?
如果我将 Zoo.animals
上的注释更改为 @XmlElement
,JSON 输出看起来没问题,但 XML 输出已更改为我无法使用的内容。
{
"zoo" : {
"animals" : [ {
"type" : "tiger",
"name" : "Hobbes"
}, {
"type" : "lion",
"name" : "Simba"
}, {
"type" : "tiger",
"name" : "Sherikan"
} ]
}
}
<?xml version="1.0" encoding="UTF-8"?>
<zoo>
<animals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="tiger">
<name>Hobbes</name>
</animals>
<animals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="lion">
<name>Simba</name>
</animals>
<animals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="tiger">
<name>Sherikan</name>
</animals>
</zoo>
我想出的解决这个问题的唯一方法是创建一个外部 OXM 绑定(bind)文件来覆盖 Zoo.animals
上的注释。下面的绑定(bind)是使用 JAXBContextProperties.OXM_METADATA_SOURCE 的属性注册的。
<?xml version="1.0"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xml-accessor-type="PUBLIC_MEMBER" xml-accessor-order="ALPHABETICAL"
xml-mapping-metadata-complete="false"
package-name="com.example">
<java-types>
<java-type name="com.example.JAXBTest2$Zoo">
<java-attributes>
<xml-element java-attribute="animals"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
有没有不使用外部绑定(bind)文件的更好解决方案?
最佳答案
注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组
The way that the Moxy uses the type as key does not preserve order among the elements in the list. Is this a bug or feature?
我们这样做是为了防止 key 重复。
The only way I've come up with to solve this is to create an external OXM binding file to override the annotation on Zoo.animals. The binding below is registered using the property of JAXBContextProperties.OXM_METADATA_SOURCE.
这就是我建议如何解决您的用例。
关于xml - Moxy:对象列表 XML 和 JSON 不能同时看起来不错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569891/
我在嵌入式 Jetty 9.x 服务器内使用 Jersey 2.x 和内置的 MOXy 转换从 JSONPOJO。 是否可以以编程方式(在 POJO 上没有注释)为特定类型(例如 Joda DateT
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
Moxie看起来很驼鹿,但标题信息量不大, Moxie - Not Another Moose Clone 看了一下,好像用了 B::CompilerPhase::Hook 额外的伏都教。这个库的最终
我有一个基类声明如下: package com.mystuff.surrogates; import java.io.Serializable; import java.util.UUID; publ
我正在使用 MOXy 2.5.1 以及 Jersey 2.4 和 Hibernate。我发现 MOXy 与一组特定的类有奇怪的编码行为。 我有一些与此类似的类(为简洁起见,删除了其他内容): publ
我正在使用 MOXy 来解码一个相对简单的 XML 文档,但我得到了不一致的行为。该文档由两个元素组成,其中包含基本信息(名称和日期),后跟记录列表。问题是名称和日期每次都正确解码,但是我经常得不到任
我按照指示here进行操作为了为我的带注释的类生成 XML 架构。我使用 MOXy 作为 JAXB 的底层实现,因为我需要它的某些功能,例如 @XmlPath 以及它如何处理 XmlAdapter 的
是否可以根据某些运行时信息有条件地仅输出元素(作为 XML 或 JSON)? 我自己找到了答案,并想与大家分享。 最佳答案 简单: return null 示例 我有一个列表“alertStems”和
我有一个非常简单的类,有两个字段,String sourceAddress 和 int port。 我希望它们映射到源/地址和源/端口节点而不是 jaxb 默认的 sourceAddress 和 so
使用EclipseLink MOXy JAXB实现,我试图使用@XmlPath批注基于元素的属性值获取元素值。我似乎无法正常工作。支持吗? XML摘录: ... 12345 blah POJO
我使用 moxy 来构建大型结构,在 95% 的情况下,它的效果就像 charme 一样。它快速且可靠。但我现在确实有一个具有相同类结构但数据不同的项目。现在我确实产生了很大的阅读影响。写完整的项目大
为了解决另一个问题,我已从使用 Jersey 转向使用 EclipseLink MOXy 从 JAXB 创建的对象模型(由 Sun JAXB 2.1.12 创建)生成 JSON。我注意到的一个区别是输
我有一个相当大的对象树,我想将其导出为 XML。名为 Person 的对象在多个地方使用(作为许多子实体的 userCreated、userModified、作为客户端等) 根据 Person 对象的
我正在使用 JAXB/MOXy 解码一个包含大约 50 个此类对象的 XML 文件: @XmlRootElement(name="Message") public class MyClass{ pri
我有一个使用 Jersey 和 MOXy 的 JAX-RS 服务。我有一个返回类型 Memo 的 JSON 或 XML(取决于 Accept: header )表示的处理程序,但如果找不到该项目,它应
我试图找到包含等同于 的类的 Maven 依赖项 import org.eclipse.persistence.oxm.annotations.XmlVariableNode; 这是我目前拥有的 PO
我正在定义一个静态工厂方法: @XmlType(factoryClass=DummyFactory.class, factoryMethod="createNew") public abstract
我的问题是 this 的后续问题评论。 我在同一个类上混合使用 JPA 和 JAXB (MOXy) 注释,大多数情况下效果很好。如链接线程中所述,@XmlInverseReference 在编码双向关
我似乎无法让@XmlCData 注释起作用,即使 MOXy 已正确设置。 我的代码,attached , 输出: 1
我正在编写一段代码,使用 MOXy 在运行时设置 XmlTransient。以下是改编自 http://blog.bdoughan.com/2011/06/moxy-extensible-models
我是一名优秀的程序员,十分优秀!