Java JAXB";如果类具有@XmlElement属性,则它不能具有@XmlValue属性;
我正在尝试使用JAXB定义XML到Java对象绑定。一切正常,除非我尝试生成XML,比如这个:Java JAXB";如果类具有@XmlElement属性,则它不能具有@XmlValue属性;,java,xml,xml-serialization,jaxb,Java,Xml,Xml Serialization,Jaxb,我正在尝试使用JAXB定义XML到Java对象绑定。一切正常,除非我尝试生成XML,比如这个: 获得价格 只读 从对象,该类定义类似于此: @XmlRootElement(name=“request”) 公共类请求{ @XmlValue 公共字符串getCommandID(){返回“获取价格”;}; @XmlElement 公共字符串getSessionID(){返回“只读”;}; } 我得到以下例外情况: 如果类具有@XmlElement属性,则它不能具有@XmlValue属性。 如果
获得价格
只读
从对象,该类定义类似于此:
@XmlRootElement(name=“request”)
公共类请求{
@XmlValue
公共字符串getCommandID(){返回“获取价格”;};
@XmlElement
公共字符串getSessionID(){返回“只读”;};
}
我得到以下例外情况:
如果类具有@XmlElement属性,则它不能具有@XmlValue属性。
如果我将“sessionId”元素更改为一个属性,那么一切正常,但我当然希望它成为一个元素
我认为JAXB应该是非常灵活的,我确信我遗漏了一些明显的东西
您能帮忙吗?将
commandId
也设为元素有什么问题吗?e、 g
<request>
<commandId>Get Price</commandId>
<sessionId>read-only</sessionId>
</request>
您希望映射的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
注释:
@XmlMixed
注释,它通常擅长生成有意义的错误消息另一方面,我应该先看说明书;-)Blaise,您能否详细介绍一下如何使用@XmlMixed注释来实现问题中描述的输出?我有完全相同的要求。我无法控制输出是什么,我只需要匹配它。一个第三方程序接受XML作为输入,格式是混合的,所以我的手被束缚住了……//顺便问一下,为什么这是一个常量?>我不是故意搞混的,只是为了说明一下。谢谢
<request sessionId="read-only">Get Price</request>