Maven Jackson XML解析不匹配InputException

Maven Jackson XML解析不匹配InputException,maven,jackson,xml-parsing,jackson-databind,jackson-dataformat-xml,Maven,Jackson,Xml Parsing,Jackson Databind,Jackson Dataformat Xml,我想使用Jackson将下面的XML文件解析为Java对象。但它显示不匹配的InputException消息变为空。我在Employee类中指定了我需要的feld。使用这些字段,我需要创建Employee对象 d、 xml->输入xml文件 Message.java Parser.java 当执行此错误时显示 maven依赖项 朱尼特 朱尼特 4.11 测试 com.fasterxml.jackson.dataformat jackson数据格式xml 2.11.2 com.fasterxml

我想使用Jackson将下面的XML文件解析为Java对象。但它显示不匹配的InputException消息变为空。我在Employee类中指定了我需要的feld。使用这些字段,我需要创建Employee对象

d、 xml->输入xml文件

Message.java

Parser.java

当执行此错误时显示

maven依赖项


朱尼特
朱尼特
4.11
测试
com.fasterxml.jackson.dataformat
jackson数据格式xml
2.11.2
com.fasterxml.jackson.core
杰克逊核心
2.11.2
org.apache.commons
commons-lang3
3.5
com.fasterxml.jackson.core
杰克逊数据绑定
2.11.2
com.fasterxml.jackson.core
杰克逊注释
2.11.2

您当前的代码告诉Jackson,您的消息应该包装到包装器标记中,因此它需要类似以下内容的XML:

<Messages>
    <Message> <!-- this is the wrapper -->
        <Message>
            <Uumid>...</Uumid>
            ...
         </Message>
         <Message>
             ...
         </Message>
    </Message>
</Messages>

(顺便说一句,为什么不调用此字段
messages
?)

您当前的代码告诉Jackson您的消息应该包装到包装器标记中,因此它需要类似以下内容的XML:

<Messages>
    <Message> <!-- this is the wrapper -->
        <Message>
            <Uumid>...</Uumid>
            ...
         </Message>
         <Message>
             ...
         </Message>
    </Message>
</Messages>

(顺便说一句,为什么不调用此字段
messages
?)

useWrapping
应设置为
false
useWrapping
应设置为
false
package org.example;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import javax.xml.bind.annotation.XmlAccessorOrder;


public class Message {
    @JacksonXmlProperty(localName = "Uumid")
    private String uumid;
    @JacksonXmlProperty(localName = "UumidSuffix")
    private String uumidSuffix;
    @JacksonXmlProperty(localName = "CreationDate")
    private String creationDate;

    public Message() {}
    public Message(String uumid,String uumidSuffix,String creationDate){
        this.uumid=uumid;
        this.uumidSuffix=uumidSuffix;
        this.creationDate=creationDate;
    }

    public String getUumid() {
        return uumid;
    }

    public void setUumid(String uumid) {
        this.uumid = uumid;
    }

    public String getUumidSuffix() {
        return uumidSuffix;
    }

    public void setUumidSuffix(String uumidSuffix) {
        this.uumidSuffix = uumidSuffix;
    }

    public String getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
    }

    @Override
    public String toString() {
        return "Message{" +
                "uumid='" + uumid + '\'' +
                ", uumidSuffix='" + uumidSuffix + '\'' +
                ", CreationDate='" + creationDate + '\'' +
                '}';
    }
}
package org.example;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Parser {
    public static void main(String[] args) throws IOException {
        ObjectMapper objectMapper=new XmlMapper();

        Messages messages=objectMapper.readValue(StringUtils.toEncodedString(Files.readAllBytes(Paths.get("disk/d.xml")), StandardCharsets.UTF_8),Messages.class);
        System.out.println(messages);
    }
}
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.example.Message` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('asdf')
 at [Source: (StringReader); line: 3, column: 20] (through reference chain: org.example.Messages["Message"]->java.lang.Object[][0])
    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1455)
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1081)
    at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371)
    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1408)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:176)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:166)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:195)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:21)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:293)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4524)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3466)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3434)
    at org.example.Parser.main(Parser.java:17)

Process finished with exit code 1
<dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.dataformat</groupId>
          <artifactId>jackson-dataformat-xml</artifactId>
          <version>2.11.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.11.2</version>
        </dependency>
        <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.5</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.11.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.11.2</version>
        </dependency>
      </dependencies>
<Messages>
    <Message> <!-- this is the wrapper -->
        <Message>
            <Uumid>...</Uumid>
            ...
         </Message>
         <Message>
             ...
         </Message>
    </Message>
</Messages>
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "Message")
private Message[] message;