Сопоставитель XML Джексона принудительно использует теги XML в нижнем регистре

Я пытаюсь преобразовать POJO с аннотациями XMLElement в строку XML. Я сделал имена переменных заглавными, и имена аннотаций тоже заглавными.

Когда я запускаю приведенный ниже фрагмент кода, я получаю приведенный ниже пример XML, все имена тегов в нижнем регистре. Я экспериментировал с включением/отключением функций, но не нашел ничего, что могло бы включить/выключить принудительный вывод XML-тега в нижнем регистре.

Value of String xml variable below:
ACTUAL OUTPUT:
<root><field1>value</field1><field2>value2<field2><field3>value3<field3><root>

EXPECTED OUTPUT:
<root><Field1>value</Field1><Field2>value2<Field2><Field3>value3<Field3><root>


public class Object1 {
    @XmlElement(name = "Field1", required = true)
    protected String Field1;
    @XmlElement(name = "Field2", required = true)
    protected String Field2;
    @XmlElement(name = "Field3", required = true)
    protected String Field3;
}

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.databind.*;

...


JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper xmlMapper = new XmlMapper(xmlModule);
xmlMapper.disable( MapperFeature.USE_STD_BEAN_NAMING );

// convert the object into xml string
// object1 is an instance of Object1 above with assigned values 
String xml = xmlMapper.writeValueAsString(object1);

person mba12    schedule 12.09.2019    source источник


Ответы (1)


Это решение, но, возможно, не тот ответ, который вы ищете.

Замените аннотации @XmlElement на аннотации @JacksonXmlProperty. Используйте атрибут localName, чтобы задать имя тега.

Вот пример: @JacksonXmlProperty(localName = "Field1")

person DwB    schedule 12.09.2019
comment
Это сработало. Спасибо, одно продолжение, если не возражаете. Поля сейчас оболваниваются, одно капитальное и одно верблюжье дело. Любые мысли о том, что может быть причиной этого? - person mba12; 12.09.2019
comment
LocalName, которое вы определяете в аннотации JacksonXmlProperty, является значением, которое использует Джексон. Я тестировал версию 2.9.9 jackson-dataformat-xml. - person DwB; 12.09.2019
comment
Спасибо, для будущих читателей. Оказывается, моя повторяющаяся проблема была похожа на ту, что обсуждается здесь: github. com/FasterXML/jackson-databind/issues/1609. Я использовал заглавные буквы в именах объектных переменных в качестве эксперимента, чтобы исправить большую проблему с заглавными буквами. Как только я вернул имена полей и положился на аннотацию JacksonXmlProperty, все было в порядке. - person mba12; 12.09.2019