以下是我的java类
public class CRM
{
private String phone[];
private String email;
public String[] getPhone()
{
return phone;
}
public void setPhone(String[] phone)
{
this.phone = phone;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
}
以下是我的XML。
<Crm>
<Phone>123456789</Phone>
<email>a@a.com</email>
</Crm>
以下是我得到的堆栈跟踪:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: array element type mismatch : array element type mismatch
---- Debugging information ----
message : array element type mismatch
cause-exception : java.lang.IllegalArgumentException
cause-message : array element type mismatch
class : [Ljava.lang.String;
required-type : [Ljava.lang.String;
converter-type : com.thoughtworks.xstream.converters.collections.ArrayConverter
path : /crm/phone
line number : 4
class[1] : com.CRM
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version : null
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1052)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1036)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:912)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:903)
at com.Parser.main(Parser.java:29)
Caused by: java.lang.IllegalArgumentException: array element type mismatch
at java.lang.reflect.Array.set(Native Method)
at com.thoughtworks.xstream.converters.collections.ArrayConverter.unmarshal(ArrayConverter.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
... 16 more
我错过了什么或做了一些根本错误的事情吗?
我正在使用xstream-1.4.2.jar和Java 1.6。
我将一直尝试将xmls转换为java对象。
答案 0 :(得分:1)
如果没有看到用于实例化XStream的代码,我无法100%确定,但问题似乎是因为在XML中你提供了一个字符串,其中xstream期待一个字符串数组。
一个简单的解决方法是将xml文件更改为以下行:
<Crm>
<phone>
<string>123456789</string>
</phone>
<email>a@a.com</email>
</Crm>
另一种选择是调整xstream并定义implicit array,并为String
类定义alias:
XStream xstream = new XStream();
xstream.alias("Crm", CRM.class);
xstream.addImplicitArray(CRM.class, "phone");
xstream.alias("phone", String.class);
然后,这将能够将以下XML解析为CRM实例:
<Crm>
<phone>12345</phone>
<phone>123456</phone>
<phone>12345678</phone>
<email>a@a.com</email>
</Crm>