- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好的。我是 JAXB 新手,在 XmlID 和 XmlIDREF 方面遇到一些麻烦,其中 ID 位于抽象类中。
这是我的问题:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(EntityImpl.class)
public abstract class AbstractEntity {
@XmlID
private String id;
public AbstractEntity() {
this.id = generateStringId();
}
private static String generateStringId() {
return "urn:uuid:" + UUID.randomUUID().toString();
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public class EntityImpl extends AbstractEntity {
private String variabel_l = "1";
private String variabel_2 = "2";
private String variabel_3 = "3";
private String variabel_4 = "4";
}
该类包含一个 AbstractEntity,在本例中包含一个 String。
@XmlAccessorType(XmlAccessType.FIELD)
public class SomeClass {
@XmlIDREF
private AbstractEntity ae;
private String status;
private SomeClass() {
}
public SomeClass(AbstractEntity ae, String status) {
this.ae= ae;
this.status = status;
}
}
该类包含两个列表,一个列表包含“SomeClass”的实例,另一个列表包含“EntityImpl”的实例
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Root {
@XmlElementWrapper
@XmlElement(name = "result")
private List<SomeClass> someClassList = new ArrayList<>();
@XmlElementWrapper
@XmlElement(name = "entityImpl")
private List<EntityImpl> entityImplList = new ArrayList<>();
public void addResult(SomeClass someClass) {
this.someClassList.add(someClass);
}
public void addEntityImpl(EntityImpl EntityImpl) {
this.entityImplList.add(EntityImpl);
}
impl 被添加到 res,并且 res 和 impl 都被添加到 root 上各自的列表中。
public static void main(String[] args) throws JAXBException {
Root root = new Root();
EntityImpl impl = new EntityImpl();
SomeClass res = new SomeClass(impl, "something");
root.addEntityImpl(impl);
root.addResult(res);
JAXBContext JAXB_CONTEXT;
JAXB_CONTEXT = JAXBContext.newInstance(Root.class);
StringWriter writer = new StringWriter();
JAXB_CONTEXT.createMarshaller().marshal(root, writer);
System.out.println(writer.getBuffer().toString());
}
我想要的结果是对 SomeClass 实体中 impl 的 Id 的引用,但结果是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<someClassList>
<result>
<ae xsi:type="entityImpl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>urn:uuid:b8a4c0e4-330d-4ed7-9b68-1517d2eb4c2a</id>
<variabel_l>1</variabel_l>
<variabel_2>2</variabel_2>
<variabel_3>3</variabel_3>
<variabel_4>4</variabel_4>
<variabel_5>5</variabel_5>
</ae>
<status>something</status>
</result>
</someClassList>
<entityImplList>
<entityImpl>
<id>urn:uuid:b8a4c0e4-330d-4ed7-9b68-1517d2eb4c2a</id>
<variabel_l>1</variabel_l>
<variabel_2>2</variabel_2>
<variabel_3>3</variabel_3>
<variabel_4>4</variabel_4>
<variabel_5>5</variabel_5>
</entityImpl>
</entityImplList>
</root>
如果我将@XmlIDREF移动到根实体中的entityImplList,那么引用工作正常,我得到这个:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<someClassList>
<result>
<ae xsi:type="entityImpl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>urn:uuid:46d0681f-4ec6-49ac-8c22-4954eaa5c680</id>
<variabel_l>1</variabel_l>
<variabel_2>2</variabel_2>
<variabel_3>3</variabel_3>
<variabel_4>4</variabel_4>
<variabel_5>5</variabel_5>
</ae>
<status>something</status>
</result>
</someClassList>
<entityImplList>
<entityImpl>urn:uuid:46d0681f-4ec6-49ac-8c22-4954eaa5c680</entityImpl>
</entityImplList>
</root>
当 REF 位于“SomeClass”中时,是否可以让 XmlID/XmlIDREF 工作,或者这是不可能的?
有什么想法吗?
最佳答案
当我完全按照您的问题中的方式运行代码时,我得到以下信息,这不是您得到的输出吗?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<someClassList>
<result>
<ae>urn:uuid:b34f3b9e-1086-4dfc-852f-4bc55b5d5a6e</ae>
<status>something</status>
</result>
</someClassList>
<entityImplList>
<entityImpl>
<id>urn:uuid:b34f3b9e-1086-4dfc-852f-4bc55b5d5a6e</id>
<variabel_l>1</variabel_l>
<variabel_2>2</variabel_2>
<variabel_3>3</variabel_3>
<variabel_4>4</variabel_4>
</entityImpl>
</entityImplList>
</root>
更新
根据我和 Ørjan Johansen 的调查,Windows 的 JDK 1.7.0_21 中包含的 JAXB 实现中似乎存在与此用例相关的错误。该用例在适用于 Mac 的 JDK 1.7.0_21 和适用于 Windows 的 jdk1.6.0_45 中正常工作。当 EclipseLink MOXy 时,此用例也可以正常工作。用作 JAXB (JSR-222)提供商。
关于java - JAXB 抽象类和 XmlID/XmlIDREF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687792/
我不太明白 @XmlIDREF 和 @XmlID 如何协同工作。通过使用 XmlIDREF,我只创建对实际元素的引用。但是 XmlID 的用例是什么。 我想创建对 Publication 类的引用。使
我有以下层次结构: public class Small { private String xmlId; @XmlID @XmlAttribute public Str
如果有一些带有相同值的@XmlID 注释属性,即使它们属于不同类型,JAXB 也无法成功解码对象,但是编码很好。 这是一个错误吗? 否则,如何支持该功能? 代码: package xml; impor
好的。我是 JAXB 新手,在 XmlID 和 XmlIDREF 方面遇到一些麻烦,其中 ID 位于抽象类中。 这是我的问题: 抽象类 @XmlAccessorType(XmlAccessType.F
jaxb @XmlIDREF @XmlID 工作惊人 我的 xml 输入是 1
我有以下类(class): @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Employee {
我正在使用 Hibernate 和 RESTeasy,我尽量避免与这些实体形成循环,因为我在 Artiste 和 Oeuvre 实体之间存在 OneToMany (ManyToOne) 双向关系: O
我有两个类,如下所示,带有 JAXB 注释。我查过有关应对周期的信息,但我仍然不明白。在示例中,@XmlID 和@XmlIDREF 在这两个类中如何相互协作?为什么两个类中都有@XmlDREF?有人可
我正在尝试将两个不同的 XML 文件编码/取消编码到 POJOS。第一个 XML 文件如下所示: --Network.xml--
根据 https://gist.github.com/VineetReynolds/5108580 ,JAXB 规范要求用 @XmlID 注释的元素是 String。 MOXy 在 2.5.x 版
我正在尝试将两个不同的 XML 文件编码/取消编码到 POJOS。第一个 XML 文件如下所示: --Network.xml--
我正在使用 CXF 公开 Web 服务。我使用 @XmlID 和 @XmlIDREF JAXB 注释来在编码/解码期间维护对象图的引用完整性。 WSDL 正确地包含具有 xs:id 和 xs:idre
您好,我在使用网络服务时遇到问题我有一个包含许多角色的用户对象。 当我从包含一个角色的网络服务中获取一个用户(Id:3)时,该角色包含许多用户(id:3和id 2)。我收到一个错误 由以下原因引起:j
我已经实现了一个基于 JPA 和 JAXB 的 REST API。 我有一个大致像这样的类(非常简化): @Entity @XmlRootElement ... public class Thing
我有这样两个实体: @XmlRootElement(name = "provider") @XmlAccessorType(XmlAccessType.PROPERTY) @Entity pub
我正在使用@XmlID 和@XmlIDREF 标记从一个对象引用另一个对象。即使使用继承类,它在 Java 6 中也能正常工作。我创建的示例代码如下所示。基类使用的标签: @XmlRootElemen
我是一名优秀的程序员,十分优秀!