Джексон FasterXML не дает сбой для недопустимого XML

Код ниже не выдает ошибки, возможно, он не может проанализировать, но возвращает поля appConfig как null. Я пробовал JAXB, в отличие от того, что JAXB выдает ошибку. Мне нужно, чтобы мой код не мог анализировать, когда xml недействителен. Как я могу это сделать?

Пожо:

import lombok.Data;
import com.fasterxml.jackson.annotation.JsonRootName;

@Data
@JsonRootName("app-config")
public class Config {
    private String type;
    private String body;
}

XML (config-invalid.xml):

<?xml version="1.0" encoding="UTF-8"?>
<invalid></invalid>

Десериализовать XML:

...
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
xmlMapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Config appConfig = xmlMapper.readValue(new File("config-invalid.xml"), Config.class);
...



Он выдает только xml, как показано ниже: XML(config-invalid.xml):

<?xml version="1.0" encoding="UTF-8"?>
<app-config>
    <invalid></invalid>
</app-config>

person nikli    schedule 10.09.2019    source источник


Ответы (1)


Добавьте строку ниже, иначе Jackson XML игнорирует корневой элемент.

xmlMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

Я привожу ниже фрагмент кода, вы можете проверить.

........
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
xmlMapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
........
person Sambit    schedule 10.09.2019