当前位置: 首页 > 知识库问答 >
问题:

使用Jackson解析XML时的MismatchedInputException

谭建章
2023-03-14

谁能帮我找出我在这里做错了什么。我必须解析下面的XML字符串

<?xml version="1.0" encoding="UTF-8"?>
<Person>
   <isActive>true</isActive>
   <id>A01222262</id>
   <name>Bob</name>
   <addresses>
      <address>
         <attributeName>NEWYORK_ADDRESS</attributeName>
         <attributeValue>NY 10003</attributeValue>
      </address>
      <address>
         <attributeName>CALIFORNIA_ADDRESS</attributeName>
         <attributeValue>CA 92336</attributeValue>
      </address>
   </addresses>
</Person>

为此,我有三个bean要映射,如下所示

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
        name = "",
        propOrder = {"isActive", "id", "name", "addresses"}
)
@XmlRootElement(
        name = "Person"
)
public class Person {
    protected boolean isActive;
    @XmlElement(
            name = "Id"
    )
    protected String id;
    protected String name;
    protected Addresses addresses;
// All Setter and Getter
}
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(
            name = "Addresses",
            propOrder = {"address"}
    )
    public class Addresses {
        @XmlElement(
                required = true
        )
        protected List<Address> address;
    //All Setter Getter 
}
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(
            name = "",
            propOrder = {"attributeName", "attributeValue"}
    )
    public class Address {
        @XmlElement(
                required = true
        )
        protected String attributeName;
        @XmlElement(
                required = true
        )
        protected String attributeValue;
    //All Setter Getter 
}

我试图像下面这样解析

XmlMapper xmlMapper=new XmlMapper();
xmlMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
Person p=xmlMapper.readValue(xmlString,Person.class);  // xmlSting 

我使用的是jackson-dataformat-xml版本2.9.8。

共有1个答案

谭建章
2023-03-14

我尝试了您的类,能够像下面这样解析它。我也检查了2.9.8版本以确认。干杯!!

public class StackOverFlowTest {
    public static void main(String[] args){
    JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);
    XmlMapper xmlMapper = new XmlMapper(module);
    String xmlString="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Person><isActive>true</isActive><id>A01222262</id><name>Bob</name><addresses><address><attributeName>NEWYORK_ADDRESS</attributeName><attributeValue>NY 10003</attributeValue></address><address><attributeName>CALIFORNIA_ADDRESS</attributeName><attributeValue>CA 92336</attributeValue></address></addresses></Person>";
        try {
        Person p=xmlMapper.readValue(xmlString,Person.class);
        System.out.println(p.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}
 类似资料:
  • 我正在一个大型企业平台上集成,供应商喜欢频繁更新其XML格式,尽管他们promise更改将继续向后兼容。我有一个可以工作的XSD…现在…但我想用我们的应用程序代码部署该模式,而不必为每个web服务更新重新部署。作为另一个推动力,(基于JVM的)配置语言具有非常好的XSD类型导入。 作为一种后备方法,我可以使用XPath查询提取特定元素,但这就不那么令人愉快了。 如何继续针对已过时但未过时的架构文件

  • 根据这一点,像XML这样的 但是,将Jackson XmlMapper(默认情况下)用于此类类: 给出一个错误: com.fasterxml.jackson.databind.exc.未识别属性异常:未识别字段""(类org.example.jackson.unwrap.TestIt1$根),未标记为可忽略(一个已知属性:"sub"])... 好的,我可以补充一下 除根文本“asdasda”外,我

  • Envelope.java 主ube.java Cube.java(直到这里它的工作) 货币ube.java

  • 我正在尝试使用Jackson解析JSON,这是我的类 还有跑步者 setName方法正在工作,但在客户中得到null。getName()。我不想用莫西