Единственной альтернативой является использование XStream annotations:
package com.my.incredibly.long.package.name;
@XStreamAlias("dic")
public class Dic {
...
Затем в коде, где можно настроить XStream:
xstream.processAnnotations(Dic.class);
// OR
xstream.autodetectAnnotations(true);
Проблема, однако, заключается в том, что для того, чтобы десериализации классы XStream должен знать свои псевдонимы уже, поэтому autodetectAnnotations(true)
НЕ поможет, если вы не можете гарантировать, что вы сериализуете класс перед десериализацией. Плюс (и это может или не может быть для вас проблемой) вы вводите явную зависимость XStream с вашими объектами.
Я пометил все классы, которые мне нужны, сериализованы (здесь несколько вариантов: аннотируйте их через XStream или свою собственную аннотацию, попросите их реализовать интерфейс маркера, возьмите все классы из определенных пакетов (ов)), автоопределяя их при загрузке и явно настраивая экземпляр XStream для псевдонима как имя класса без имени пакета.
Это будет отлично работать, если у вас есть уникальный двунаправленный способ сопоставления классов с псевдонимами (например, если все сопоставленные классы находятся в одном и том же известном пакете). В противном случае это добавит еще один уровень косвенности, так как вам все равно нужно сообщить вашему картографу, как сопоставить псевдонимы классам. Я применяю это к моему сценарию, однако - это может отлично справиться с обстоятельствами OP. – ChssPly76
Мне просто нужно превратить объекты (не мои) в xml, так что это может сработать. – IAdapter