#java #serialization #axis2
#java #сериализация #apache-axis
Вопрос:
Используя инструмент wsdl2java от axis2 и сторонний wsdl, я сгенерировал заглушку сервиса и вспомогательные классы (держатели данных). Поскольку существует необходимость выполнять постобработку загруженных данных из сервиса, существует необходимость сериализовать один из объектов-владельцев данных.
1) существует ли стандартный инструмент / подход axis2, который можно использовать для этой цели?
2) поскольку класс data holder не реализует сериализуемый интерфейс, каким был бы самый простой способ сериализации объекта в формате xml с возможностью восстановления исходного объекта?
Использовалась опция привязки данных (-d jaxbri), и каждое поле рассматриваемого класса помечено тегом @XmlElement, например:
@XmlElement(name = "ID", required = true)
protected String id;
Ответ №1:
Хорошо, вот как я это решил:
- сгенерированный axis2 набор классов java (на стороне клиента) содержал объект под названием ObjectFactory. Большинство его методов создают объекты JAXBElement со значениями полей владельца класса
- Мне пришлось реализовать сериализуемый класс-оболочку aSerializable для владельца класса, такой, чтобы он использовал ObjectFactory для создания объектов JAXBElement для всех полей.
- некоторый внешний код использует класс-оболочку для создания сериализуемого объекта и записывает его в выходной поток.
-
на принимающей стороне:
асериализуемый, aSerializable; A a; aSerializable= (асериализуемый)в.readObject(); a.setID((строка)асериализуемый.getId().GetValue());
-
это все еще выглядит как дополнительная работа для сериализации предварительно аннотированного класса, но лучше, чем сериализация в некоторый текстовый формат и ручная проверка типа во время десериализации.