我在將xStream解析爲xml到對象時遇到問題。操作的屬性值從不設置爲我的ImportItem對象中的字段操作。對於包含屬性的其他元素,我使用自定義轉換器,但我不希望爲用戶使用客戶轉換器。這是可能的,我該怎麼做才能將操作綁定到Item對象?無法使用XStream將屬性綁定到對象Java lib
XML:
<persons>
<person operation="insert">
<personNumber>196211065104</personNumber>
<startDate>2011-04-13T00:00:00.000+02:00</startDate
<expireDate>2012-04-14T00:00:00.000+02:00</expireDate
<orderDate>2011-04-12T00:00:00.000+02:00</orderDate>
<contact type="name">Joe</name>
<contact type="email">[email protected]</contact>
<contact type="landLine">12345678</contact>
</person>
</persons>
我廠是這樣的:
public class XStreamFactory {
public static XStream instace() {
XStream xs = new XStream();
xs.aliasType("person", ImportItem.class);
xs.useAttributeFor(ImportItem.class, "operation"); <-------
xs.aliasType("persons", ImportBatch.class);
xs.aliasType("contact", ImportContactData.class);
xs.registerConverter(new ImportContactConverter());
xs.registerConverter(new DateConverter());
xs.registerConverter(new ImportOperationConverter()); <-------
xs.addImplicitCollection(ImportBatch.class, "items");
xs.addImplicitCollection(ImportItem.class, "contactData", ImportContactData.class);
return xs;
}
}
批次:
@SuppressWarnings({"UnusedDeclaration"})
public class ImportBatch {
private List<ImportItem> items;
public List<ImportItem> getItems() {
return items;
}
@Override
public String toString() {
return "ImportBatch{" +
"items=\n " + StringUtils.join(items, "\n ") +
"\n}";
}
}
ImportItem:
@SuppressWarnings({"UnusedDeclaration"})
public class ImportItem {
private ImportOperation operation;
private String personNumber;
private Date startDate;
private Date expireDate;
private Date orderDate;
private List<ImportContactData> contactData;
public ImportOperation getOperation() {
return operation;
}
public void setOperation(ImportOperation operation) {
this.operation = operation;
}
public String getCompanyName() {
return companyName;
}
public String getOrganisationNumber() {
return organisationNumber;
}
public String getItescoID() {
return itescoID;
}
public String getAdID() {
return adID;
}
public Date getStartDate() {
return startDate;
}
public Date getExpireDate() {
return expireDate;
}
public String getContactEmail() {
return contactDataFor(email);
}
public String getContactPerson() {
return contactDataFor(businessPerson);
}
public String getContactPhone() {
return contactDataFor(landLine);
}
}
新ImportOperation代碼:< ------
public class ImportOperation {
public enum OperationType{insert, update, delete}
private OperationType operation;
public ImportOperation(OperationType operation) {
this.operation = operation;
}
public OperationType getOperation() {
return operation;
}
public void setOperation(OperationType operation) {
this.operation = operation;
}
}
新的轉換代碼:< ------
public class ImportOperationConverter implements SingleValueConverter {
public String toString(Object obj) {
return ((ImportOperation)obj).getOperation().toString();
}
public Object fromString(String str) {
return new ImportOperation(ImportOperation.OperationType.valueOf(str));
}
public boolean canConvert(Class clazz) {
return clazz == ImportOperation.class;
}
}
ImportContactConverter的外觀如何? – 2011-05-02 13:28:35
我很高興幫助你。但是當你更新你的問題時請小心。因爲一個有同樣問題的人如果他讀到這個問題,就不會知道問題是什麼,並且會接受這個問題。 – Ralph 2011-05-03 07:03:54
我同意,請留下您的問題沒有你自己<---在它的答案。這很混亂 – jule64 2014-02-14 10:38:00