我对 Castor 的 xml 映射文件有疑问。这里是我要解组的 xml 文件:
<message type="info_message">
<sensor type="cnr_fall_detector" id="1301">
<value type="fall">
<boolean>true</boolean>
</value>
<value type="confidence_index">
<double>0.3</double>
</value>
<timestamp>09-05-2013 11:00:00</timestamp>
</sensor>
</message>
这些是java类:
public class MetaalMessage {
public MessageType messageType;
public SensorType sensorType;
public Integer sensorId;
public List<MetaalValue> values;
public String timestamp;
}
public class MetaalValue {
public ValueType type;
public String unit;
public int integerValue;
public boolean booleanValue;
public double doubleValue;
public String stringValue;
public String timestamp;
}
有相对的 getter 和 setter。这是我写的映射文件:
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
<mapping>
<class name="metaal.messages.MetaalMessage">
<map-to xml="message" />
<field name="messageType" type="metaal.messages.utils.MessageType">
<bind-xml name="type" node="attribute" location="message" />
</field>
<field name="sensorType" type="metaal.messages.utils.SensorType">
<bind-xml name="type" node="attribute" location="sensor" />
</field>
<field name="sensorId" type="java.lang.Integer">
<bind-xml name="id" node="attribute" location="sensor" />
</field>
<field name="values" type="metaal.messages.MetaalValue" collection="arraylist">
<bind-xml name="value" node="element" location="sensor" />
</field>
<field name="timestamp" type="java.lang.String">
<bind-xml name="timestamp" node="element" location="sensor" />
</field>
</class>
<class name="metaal.messages.MetaalValue">
<field name="type" type="metaal.messages.utils.ValueType">
<bind-xml name="type" node="attribute" location="value" />
</field>
<field name="unit" type="java.lang.String" required="false">
<bind-xml name="unit" node="attribute" location="value" />
</field>
<field name="integerValue" type="integer" required="false">
<bind-xml name="integer" node="element" location="value" />
</field>
<field name="doubleValue" type="double" required="false">
<bind-xml name="double" node="element" location="value" />
</field>
<field name="stringValue" type="java.lang.String" required="false">
<bind-xml name="string" node="element" location="value" />
</field>
<field name="booleanValue" type="boolean" required="false">
<bind-xml name="boolean" node="element" location="value" />
</field>
<field name="timestamp" type="java.lang.String">
<bind-xml name="timestamp" node="element" location="value" />
</field>
</class>
</mapping>
最后,显示的错误是:
org.exolab.castor.xml.MarshalException: Unable to find FieldDescriptor for 'boolean' in ClassDescriptor of metaal-value.{File: [not available]; line: 4; column: 13}
有人可以帮忙吗?
S。