gpt4 book ai didi

java - JAXB "If a class has @XmlElement property, it cannot have @XmlValue property."

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:36 59 4
gpt4 key购买 nike

我正在尝试使用 JAXB 定义 XML 到 Java 对象的绑定(bind)。一切正常,除非我尝试生成 XML,如this:

<request>
Get Price
<sessionId>read-only</sessionId>
</request>

来自 类定义为this 的对象:

@XmlRootElement(name="request")
public class Request {

@XmlValue
public String getCommandID() { return "Get Price"; };

@XmlElement
public String getSessionID() { return "read-only"; };

}

我收到以下异常:

If a class has @XmlElement property, it cannot have @XmlValue property.

如果我将“sessionId”元素更改为一个属性,一切正常,但我当然希望它成为一个元素。

我认为 JAXB 应该非常灵活,我确信我遗漏了一些明显的东西。

你能帮忙吗?

最佳答案

您要映射的 XML 文档类型称为具有“混合内容”。相应的 XML 架构如下所示:

<xs:element name="request">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="sessionId" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

这意味着文本节点可以与元素节点混合出现。虽然转换示例文档的规则看似微不足道,但以下文档也有效且规则不太明确。

<request>
Get Price
<sessionId>read-only</sessionId>
More Text
</request>

混合文本有其用途,但通常不受欢迎。首选方法是使用问题中所述的 XML 属性:

<request sessionId="read-only">Get Price</request>

要了解 JAXB 如何处理混合文本,请参阅 @XmlMixed 注释:

关于java - JAXB "If a class has @XmlElement property, it cannot have @XmlValue property.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515375/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com