axis2: сериализация объектов, сгенерированных wsdl2java

#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:

Хорошо, вот как я это решил:

  1. сгенерированный axis2 набор классов java (на стороне клиента) содержал объект под названием ObjectFactory. Большинство его методов создают объекты JAXBElement со значениями полей владельца класса
  2. Мне пришлось реализовать сериализуемый класс-оболочку aSerializable для владельца класса, такой, чтобы он использовал ObjectFactory для создания объектов JAXBElement для всех полей.
  3. некоторый внешний код использует класс-оболочку для создания сериализуемого объекта и записывает его в выходной поток.
  4. на принимающей стороне:

    асериализуемый, aSerializable; A a; aSerializable= (асериализуемый)в.readObject(); a.setID((строка)асериализуемый.getId().GetValue());

  5. это все еще выглядит как дополнительная работа для сериализации предварительно аннотированного класса, но лучше, чем сериализация в некоторый текстовый формат и ручная проверка типа во время десериализации.