- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类(class)
@XmlRootElement(name = "entity")
public class Entity {
@XmlElementRef
protected AtomLink first;
@XmlElementRef
protected AtomLink second;
public Entity() {
}
public Entity(AtomLink first, AtomLink second) {
this.first = first;
this.second = second;
}
}
这是我的测试代码:
Entity entity = new Entity(new AtomLink("first", "http://test/first"), new AtomLink("second", "http://test/second"));
JAXBContext context;
try {
context = JAXBContextFactory.createContext(new Class[] { Entity.class } , null);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(entity, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
MOXy 的输出是错误的,因为缺少第一个链接:
<entity xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="second" href="http://test/second"/>
</entity>
Java JAXB RI 的输出是正确的:
<entity xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="first" href="http://test/first"/>
<atom:link rel="second" href="http://test/second"/>
</entity>
它是 MOXy 中的错误吗?
最佳答案
注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组。
Is it a bug in MOXy?
不,不是真的。问题在于,同时使用 @XmlElementRef
注释的相同类型的两个属性是无效的。如果您使用 JAXB RI 解码:
<entity xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="first" href="http://test/first"/>
<atom:link rel="second" href="http://test/second"/>
</entity>
然后像 MOXy 一样将其编码出来,您将得到:
<entity xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="second" href="http://test/second"/>
</entity>
解决方法 - 任何 JAXB (JSR-222) 实现
在 JAXB 中,重复元素应该在集合属性中表示:
@XmlRootElement
public class Entity {
@XmlElementRef
protected List<AtomLink> first;
public Entity() {
}
}
使用 MOXy 的 @XmlPath
下面是一个示例,说明如何利用 MOXy 的 @XmlPath
扩展来支持此用例。
包信息
假设您在 @XmlSchema
注释中指定了以下命名空间信息。
@XmlSchema(
xmlns={
@XmlNs(prefix="atom", namespaceURI="http://www.w3.org/2005/Atom")
}
)
package forum14998000;
import javax.xml.bind.annotation.*;
实体
然后您可以使用@XmlPath
将字段映射到具有特定属性值的元素。因为我们匹配的不仅仅是元素名称/URI,所以我们不会遇到原来的问题。
package forum14998000;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name = "entity")
public class Entity {
@XmlPath("atom:link[@rel='first']")
protected AtomLink first;
@XmlPath("atom:link[@rel='second']")
protected AtomLink second;
public Entity() {
}
public Entity(AtomLink first, AtomLink second) {
this.first = first;
this.second = second;
}
}
AtomLink
既然 rel
属性包含在 @XmlPath
注释中,我们就不会将它作为一个字段包含在 AtomLink
类中。
import javax.xml.bind.annotation.*;
@XmlRootElement(namespace="http://www.w3.org/2005/Atom", name="link")
@XmlAccessorType(XmlAccessType.FIELD)
public class AtomLink {
@XmlAttribute
private String href;
}
了解更多信息
关于java - 只有一个 XMLElementRef 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14998000/
有人可以给我解释一下吗 @XmlElementRefs 和 @XmlElementRef 注解在 Java 中的含义及其用途.. EDIT: @skaffman 好吧,假设我有一个这样的 Collec
当我尝试在 SpringToolSuite 中进行调试时。它有时会引发异常 Invalid XmlElementRef on property expression on class org.open
我正在为来自 xsd 模式的 JAXB 注释类使用 XJC 实用程序,我有点惊讶并且不明白为什么会生成 @XmlElementRefs。一切都发生在以下 xsd 片段中(此处省略命名空间)
我使用以下带注释的类通过 MOXy 2.4.0 进行解码。解码到该对象中效果很好 @XmlElementRefs({ @XmlElementRef(name = "a", namesp
我有以下类(class) @XmlRootElement(name = "entity") public class Entity { @XmlElementRef protected
您好,有人可以解释一下如何解决以下问题吗?我有这样的类结构.. public class RequestWrapper implements Seriallizable { private
我有一些类(class),例如... @XmlRootElement(name="Predicate") @XmlAccessorType(XmlAccessType.FIELD) public ab
我对 Web 服务请求和响应 XML 使用相同的 @XmlElementRef 元素,例如: 请求: @XmlElementRef(name = "elementId", namespace = "b
我没有将名称作为 @XmlElementRef 的标记名称。 父elemnet中的元素声明: @XmlElementRef(name = "Agents", type = JAXBElement.c
是否可以在使用@XmlElementRef 注释的引用对象上使用@XmlValue 注释?目标是生成以下 XML 输出: Blah 给定以下示例 JAXBContex
这个问题已经以不同的方式被问过多次,但我在这里从不同的角度提出疑问。那么让我们来看下面的例子: 对于 XSD 中的上一行,JAXB 生成以下代码: @XmlElementRef(name = "Ri
我在使用 jdk 1.6 时遇到以下错误,但它在 1.7 中工作 cannot find symbol method required() javax.xml.bind.annotation.XmlE
我有 4 个类(class)。 Person 类,以及抽象的 ContactInformation,Phone 和 Address 类对其进行扩展。 @XmlRootElement @XmlAcces
我正在尝试使用 maven-jaxb2-plugin 编译位于 http://www.aptatcip.com/APTA-TCIP-S-01%204.0_files/Schema%20Set.zip
我是一名优秀的程序员,十分优秀!