У меня проблемы с удалением xml с помощью XStream для объекта.Значение атрибута для операции никогда не устанавливается на полевую операцию в моем объекте ImportItem.Для других моих элементов, которые содержат атрибуты, я использую пользовательские конвертеры, но я бы предпочел не использовать конвертер клиента для человека.Возможно ли это и как мне сделать это, чтобы привязать операцию к объекту Item?
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">test@test.com</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: <------ </p>
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;
}
}
Новый код преобразователя: <----- </p>
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;
}
}