Как создать class Java, который реализует интерфейс Serializable из xsd с помощью JAXB?

Я хотел бы ввести кэширование в существующий проект Spring, который использует JAXB для публикации WebServices. Кэширование будет выполняться на уровне конечных точек. Для того, чтобы эти classы, созданные из XSD, используя JAXB, необходимо реализовать интерфейс Serializable и переопределить метод toString() Object .

Как проинструктировать инструмент xjc с помощью XSD для генерации источника с необходимыми свойствами?

Сериализуемый

Используйте xjc:serializable в файле настраиваемых привязок, чтобы добавить интерфейс java.io.Serializable к вашим classам вместе с serialVersionUID :

       

нанизывать()

Используйте суперclass (см. xjc:superClass ), из которого наследуются все ваши связанные classы. Этот class не будет генерироваться xjc, поэтому вы можете его создать, как вам угодно (здесь с реализацией toString() ):

        

Это сработало для меня:

       

Надеюсь, поможет.

Другой способ генерации метода toString() – плагины JAXB2 Basics . Этот способ выглядит лучше, потому что не использует reflection. Пример, как это сделать с maven ниже.

    org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.8.2    generate      ${project.basedir}/src/main/resources   ${project.basedir}/src/main/java  true  -XtoString    org.jvnet.jaxb2_commons jaxb2-basics 0.6.4         org.jvnet.jaxb2_commons jaxb2-basics-runtime 0.6.4   

В результате вы получите такой код.

 public String toString() { final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE; final StringBuilder buffer = new StringBuilder(); append(null, buffer, strategy); return buffer.toString(); } public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { strategy.appendStart(locator, this, buffer); appendFields(locator, buffer, strategy); strategy.appendEnd(locator, this, buffer); return buffer; } public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { { String theName; theName = this.getName(); strategy.appendField(locator, this, "name", buffer, theName); } { String theBank; theBank = this.getBank(); strategy.appendField(locator, this, "bank", buffer, theBank); } return buffer; } 

я использую этот код и работаю для меня

       

чтобы получить интерфейс Serializable, добавьте следующую информацию привязки в xsd-файл:

xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" > .....

И вот пример с использованием CXF 3.1.10. Не забудьте включить группу компиляции: ‘org.apache.cxf.xjc-utils’, имя: ‘cxf-xjc-runtime’, версия: ‘3.1.0’

      
  • Удалить 'standalone = "yes" из созданного XML
  • В чем разница между XML и XSD?
  • SchemaFactory не поддерживает XML-схему W3C на уровне платформы 8?
  • Проверка XML в отношении XSD с ссылкой на C #
  • XML-атрибут и элемент XML
  • Как выбрать DTD и XSD
  • Каковы наилучшие методы для версий XML-схем?
  • Как сделать тип зависимым от значения атрибута с помощью присвоения условного типа
  • Инструмент проверки XML-схемы (XSD)?
  • Рекурсия в XML-схеме?
  • Пространства имен XML и атрибуты
  • Давайте будем гением компьютера.