Я использую полезную нагрузку XML, которая выглядит примерно так (для более полного примера посмотрите: http://api.shopify.com/product.html).
<products type="array">
<product>
...
</product>
<product>
...
</product>
</products>
Сейчас мой код работает, ноон делает что-то, что кажется действительно «неправильным», а именно - связывает «продукты» с List.class.Таким образом, соответствующий код выглядит следующим образом:
xstream.alias( "products", List.class );
xstream.alias( "product", ShopifyProduct.class );
Это хорошо, за исключением того, что когда я иду на экстернализацию любого объекта с этим экземпляром xstream, он всегда использует «продукты», что, конечно, не то, что я хочу.
Я хотел бы либо иметь возможность сопоставить родовые коллекции с тегом:
xstream.alias( "products", ( List<ShopifyProduct> ).class ); // way too easy
Или заставить работать следующий фрагмент кода, который на данный момент не работает:
ClassAliasingMapper mapper = new ClassAliasingMapper( xstream.getMapper( ) );
mapper.addClassAlias( "product", ShopifyProduct.class );
xstream.registerLocalConverter( ShopifyProductResponse.class, "products", new CollectionConverter( mapper ) );
Я создал класс ShopifyProductResponse, чтобы попытаться обернуть ShopifyProduct, но мне об этом ничего не сказано:
com.thoughtworks.xstream.mapper.CannotResolveClassException: products: products at com.thoughtworks.xstream.mapper.DefaultMapper.realClass (DefaultMapper.java:68) в com.thoughtworks.xstream.mapper.MapperWrapper.realClass (MapperWrapper.java:38)
Если я добавлю:
xstream.alias( "products", List.class );
тогда он уходит ... так что мне кажется, что mapperwrapper здесь не держится - вероятно, потому что он ищет объект ShopifyProductResponse и вместо этого находит список - я действительно не знаю.