Использование JAXB сгенерированного classа для элемента, для которого требуется целое число с шаблоном

У меня есть элемент в моей XML-схеме, который определяется следующим образом:

     

Где NumberCodeValueType:

      

То есть мой номер может начинаться с ведущих 0. Я НЕ могу изменить эту схему. Я использую JAXB для генерации моих classов Java. К сожалению, аксессуар для элемента Code принимает список целых чисел в качестве аргумента, который означает, что все ведущие 0s удаляются (потому что из того, что я могу сказать, нет способа сохранить ведущие 0s в Java при использовании целочисленного типа)!

Есть ли способ исправить это?

Спасибо за вашу помощь!

Вы можете сделать следующее:

NumberFormatter

Вы можете сделать это, написав собственный форматтер:

 package forum7182533; public class NumberFormatter { public static String printInt(Integer value) { String result = String.valueOf(value); for(int x=0, length = 7 - result.length(); x 

XMLSchema (format.xsd)

Затем, когда вы собираетесь создавать свои classы из своей XML-схемы:

                

bindings.xml

Вы будете использовать файл привязок JAXB для ссылки на ваш форматтер:

             

XJC Call

Файл привязок ссылается на вызов XJC как:

 xjc -d out -p forum7182533 -b bindings.xml format.xsd 

Adapter1

Это приведет к созданию XmlAdapter , который использует ваш форматтер:

 package forum7182533; import javax.xml.bind.annotation.adapters.XmlAdapter; public class Adapter1 extends XmlAdapter { public Integer unmarshal(String value) { return (forum7182533.NumberFormatter.parseInt(value)); } public String marshal(Integer value) { return (forum7182533.NumberFormatter.printInt(value)); } } 

корень

XmlAdapter будет ссылаться на ваш объект домена с @XmlJavaTypeAdapter annotations @XmlJavaTypeAdapter :

 package forum7182533; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "number" }) @XmlRootElement(name = "root") public class Root { @XmlElement(required = true, type = String.class) @XmlJavaTypeAdapter(Adapter1 .class) protected Integer number; public Integer getNumber() { return number; } public void setNumber(Integer value) { this.number = value; } } 

демонстрация

Теперь, если вы запустите следующий демо-код:

 package forum7182533; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Root root = new Root(); root.setNumber(4); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } } 

Вывод

Вы получите желаемый результат:

   0000004  
  • что такое xsi: schemaLocation?
  • Проверка Xml с использованием схемы XSD
  • Как связать XML с XSD с помощью schemaLocation или noNamespaceSchemaLocation?
  • Проверка XML с помощью XSD в среде Visual Studio IDE
  • Создание classа JAXB, который реализует интерфейс
  • Как проверить файл XML с помощью Java с XSD с включенным?
  • Атрибут minOccurs не может присутствовать
  • Проверка файла XML с использованием нескольких схемных определений
  • Как создать схему XSD из classа?
  • SchemaFactory не поддерживает XML-схему W3C на уровне платформы 8?
  • Как ограничить значение элемента XML с помощью xsi: type в XSD?
  • Interesting Posts

    Возвращает значение при использовании jQuery.each ()?

    Почему Hibernate больше не работает (Windows 7)?

    Эмуляторы / симуляторы мобильных телефонов

    Как заставить gcc встроить функцию?

    Разница между sys.stdout.write и печатью?

    Как разрешить пользователям проверять последнюю версию приложения внутри приложения?

    Regex: Определите, могут ли два регулярных выражения совпадать для одного входа?

    Чтение файлов cookie через HTTPS, которые были установлены с использованием HTTP

    Как использовать переменную одного метода в другом методе?

    Как заставить мою программу C # Winforms запускаться как администратор на любом компьютере?

    Удаление дубликатов из NSMutableArray

    Убить слишком много для драйверов ATI?

    Ajax / jQuery – загрузить содержимое веб-страницы в div на загрузку страницы?

    Что может привести к тому, что изображения не будут отображаться в справке HTML (chm-файлы), если UAC включен?

    fstream не создаст файл

    Давайте будем гением компьютера.