Java JAXB2绑定工作不正常
考虑以下绑定(代码段):Java JAXB2绑定工作不正常,java,jaxb,Java,Jaxb,考虑以下绑定(代码段): 以及以下XML模式(代码段): 和以下输入: <OPERAND> <CONSTANT>Test1</CONSTANT> </OPERAND><OPERATOR>myOperator</OPERATOR> <OPERAND> <CONSTANT>Test2</CONSTANT> </OPERAND> 测试1 肌肉操作者 测试2 有人能解释为
以及以下XML模式(代码段):
和以下输入:<OPERAND>
<CONSTANT>Test1</CONSTANT>
</OPERAND><OPERATOR>myOperator</OPERATOR>
<OPERAND>
<CONSTANT>Test2</CONSTANT>
</OPERAND>
测试1
肌肉操作者
测试2
有人能解释为什么“GetSecondOperator”返回null,为什么“GetFirstOperator”实际上包含“Test2”的常量值吗
使用:-JAXB 2.2.4u1
-Java 1.6.0_23
-ApacheMaven 3.0.1
-maven-jaxb2-plugin版本0.8.0
编辑:JAXB生成(已删除访问器/变异器的JavaDoc:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="OPERAND" type="{}OPERANDType"/>
* <element name="OPERATOR" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="OPERAND" type="{}OPERANDType"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"firstOperand",
"operator",
"secondOperand"
})
@XmlRootElement(name = "CONDITION")
public class CONDITION {
@XmlElement(name = "OPERAND", required = true)
protected OPERANDType firstOperand;
@XmlElement(name = "OPERATOR", required = true)
protected String operator;
@XmlElement(name = "OPERAND", required = true)
protected OPERANDType secondOperand;
public OPERANDType getFirstOperand() {
return firstOperand;
}
public void setFirstOperand(OPERANDType value) {
this.firstOperand = value;
}
public String getOPERATOR() {
return operator;
}
public void setOPERATOR(String value) {
this.operator = value;
}
public OPERANDType getSecondOperand() {
return secondOperand;
}
public void setSecondOperand(OPERANDType value) {
this.secondOperand = value;
}
}
import javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入javax.xml.bind.annotation.XmlType;
/**
*匿名复杂类型的Java类。
*
*以下架构片段指定此类中包含的预期内容。
*
*
*complexType>
*complexContent>
*限制基数=”{http://www.w3.org/2001/XMLSchema}任何类型“>
*序列>
*element name=“OPERAND”type=“{}操作数类型”/>
*元素名称=“运算符”类型=”{http://www.w3.org/2001/XMLSchema}字符串“/>
*element name=“OPERAND”type=“{}操作数类型”/>
*/顺序>
*/限制>
*/complexContent>
*/complexType>
*
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=),比例={
“第一个操作数”,
“操作员”,
“第二个操作数”
})
@XmlRootElement(name=“CONDITION”)
公共阶级状况{
@XmlElement(name=“OPERAND”,必需=true)
受保护操作数类型第一个操作数;
@xmlement(name=“OPERATOR”,required=true)
受保护字符串运算符;
@XmlElement(name=“OPERAND”,必需=true)
受保护操作数类型第二个操作数;
公共操作数类型GetFirstOperator(){
返回第一个操作数;
}
public void setFirstOperator(操作数类型值){
this.firstOperator=值;
}
公共字符串getOPERATOR(){
返回运算符;
}
公共void设置运算符(字符串值){
这个操作符=值;
}
公共操作数类型GetSecondOperator(){
返回第二个操作数;
}
public void setSecondOrand(操作数类型值){
this.second操作数=值;
}
}
您的绑定导致XJC生成了无法工作的代码。您最终得到了两个绑定到名为操作数
的元素的Java字段,位,因为Java类中没有隐式定义的字段顺序(源代码顺序没有任何意义),绑定到每个字段的数据将是不可预测的
默认情况下,我假设XJC生成了一个绑定到条件
元素的Java列表
。由于Java缺乏表达能力,这是绑定传入XML时唯一真正有效的配置
我建议您要么接受这种情况,并在运行时用自己的代码将运算符和操作数分离,要么尝试非标准JAXB实现,如,它具有增强的执行此类操作的能力。查看绑定没有帮助。我们需要查看生成的代码。@skaffman:添加了生成的代码。让我来看看知道还有什么可以帮助你。我所做的是基于。避免列表确实是我想要的。因此,链接问题中的人所做的也被破坏了?我刚刚删除了此部分的绑定,并像以前一样使用列表,谢谢你的帮助!
<OPERAND>
<CONSTANT>Test1</CONSTANT>
</OPERAND><OPERATOR>myOperator</OPERATOR>
<OPERAND>
<CONSTANT>Test2</CONSTANT>
</OPERAND>
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="OPERAND" type="{}OPERANDType"/>
* <element name="OPERATOR" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="OPERAND" type="{}OPERANDType"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"firstOperand",
"operator",
"secondOperand"
})
@XmlRootElement(name = "CONDITION")
public class CONDITION {
@XmlElement(name = "OPERAND", required = true)
protected OPERANDType firstOperand;
@XmlElement(name = "OPERATOR", required = true)
protected String operator;
@XmlElement(name = "OPERAND", required = true)
protected OPERANDType secondOperand;
public OPERANDType getFirstOperand() {
return firstOperand;
}
public void setFirstOperand(OPERANDType value) {
this.firstOperand = value;
}
public String getOPERATOR() {
return operator;
}
public void setOPERATOR(String value) {
this.operator = value;
}
public OPERANDType getSecondOperand() {
return secondOperand;
}
public void setSecondOperand(OPERANDType value) {
this.secondOperand = value;
}
}