Я использую JAXB для управления данными из XML файла и вставки этих значений в базу данных. У меня проблема с извлечением данных из определенного тега XML. Этот тег XML содержит буквенно-цифровые значения, но около 95% (если не 99%) того времени, значения, которые он содержит, являются целыми числами. Поэтому я рассматриваю эти значения как String
.
<reference>12345</reference>
Более того, соответствующий столбец в базе данных является varchar
. Я создал файл XSD
убедившись, что reference
на элемент имеет тип xsd:string
<xs:element name="reference" type="xs:string" />
Проблема в том, что я могу иметь XML файл, где некоторые ссылки имеют такой формат:
<reference>012345</reference>
<reference>0012345</reference>
Извлечение значения этих ссылок удаляет ведущие нули, дающие мне 12345
в качестве результирующего значения. Я не понимаю, почему. Я чувствую, что JAXB обрабатывает значения как целые числа.
Как я могу получить правильные значения?
Изменить:
Здесь соответствующий POJO @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "", propOrder = {"referenceOrDescriptionOrEnseignes"}) public static class Program {
@XmlElementRefs({
@XmlElementRef(name = "reference", type = JAXBElement.class, required = false),
/** other @XmlElementRef */
})
protected List<JAXBElement<?>> referenceOrDescriptionOrEnseignes;
Самое забавное, что в методе get вышеупомянутой переменной JAXB указывает объекты, которые разрешены к списку. Разрешены только String
и другие POJO-объекты, созданные JAXB с использованием файлов XSD. Нет упоминания о допустимых Integers
.
/**
* Gets the value of the referenceOrDescriptionOrEnseignes property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the referenceOrDescriptionOrEnseignes property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getReferenceOrDescriptionOrEnseignes().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link JAXBElement }{@code <}{@link String }{@code >}
* ...
* ...
* ...
*/
public List<JAXBElement<?>> getReferenceOrDescriptionOrEnseignes() {
if (referenceOrDescriptionOrEnseignes == null) {
referenceOrDescriptionOrEnseignes = new ArrayList<JAXBElement<?>>();
}
return this.referenceOrDescriptionOrEnseignes;
}
Необычно, когда я печатаю тип класса ссылочного элемента, он печатает Integer
.
Благодарю!
Не могли бы вы попытаться распечатать это значение перед вставкой в базу данных.
Перекрестите свой POJO.
reference
?