【问题标题】:How to fix this JsonMappingException: N/A during XML deserialization如何修复此 JsonMappingException:在 XML 反序列化期间不适用
【发布时间】:2018-02-14 13:10:34
【问题描述】:

这是我的 bean 类:

package request;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

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

@JacksonXmlRootElement
public class Employee {



        private List<String> roles= new ArrayList<String>();


        private String name;


        public Employee(){}

        @JacksonXmlProperty
        public String getName ()
        {
            return name;
        }

        public void setName (String name)
        {
            this.name = name;
        }

        @JacksonXmlElementWrapper(useWrapping=false)
        @JacksonXmlProperty
        public List<String> getRoles ()
        {
            return roleCodes;
        }

        public void setRoles (String role)
        {
            this.roles.add(role);
        }

        }   

和,

package request;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

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


public class Employees
{

@JacksonXmlElementWrapper(localName="employees")
@JacksonXmlProperty(localName="employee")
private ArrayList<Employee> emps;
//Employee Employee ;

public Employees(){}

@JacksonXmlProperty(localName="employee")
public ArrayList<Employee> getEmployees ()
{

    return emps;
}
public void setEmployees(Employee emp){

    this.emps.add(emp);
}



@Override
public String toString()
{
    if(emps.isEmpty()!=true)
    for (Employee e:emps)
        return "this is  [employee = "+e ;
    return "none there";
}


public ArrayList<Employee> addingEmployee(Employee e){
    this.emps.add(e);
    return emps;
}
}

这里是将xml解析成POJO的代码:

package testPkg4;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import request.Bean;
import request.Employee;
import request.Employees;

public class Test4 {

    public static void main(String[] args) {
        XmlMapper xmlMapper = new XmlMapper();
        //Bean value = new Bean();

        Employees emps=new Employees();


        try {
            emps = xmlMapper.readValue(new File("D:\\workspace\\test\\src\\test\\resources\\employee.xml"),
                    Employees.class);
        } catch (IOException ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
       System.out.println(emps.getEmployees().get(0).getFirstName());
       //System.out.println(e.getFirstName());
       //System.out.println(emps.getEmployees().get(0).getThirdElement());
    }


    }

现在这是我得到的错误:

com.fasterxml.jackson.databind.JsonMappingException: N/A at [Source: D:\workspace\test\src\test\resources\employee.xml;行:5,列: 12](通过引用链:request.Employees["employee"])在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:277) 在 com.fasterxml.jackson.databind.deser.SettableBeanProperty._throwAsIOE(SettableBeanProperty.java:551) 在 com.fasterxml.jackson.databind.deser.SettableBeanProperty._throwAsIOE(SettableBeanProperty.java:532) 在 com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:108) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2756) 在 testPkg4.Test4.main(Test4.java:23) 引起: java.lang.NullPointerException 在 request.Employees.setEmployees(Employees.java:31) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:106) ...线程“主”java.lang.NullPointerException 中还有 5 个异常 在 testPkg4.Test4.main(Test4.java:29)

当我在解析 thsi xml 文件时:

<employees>
<employee>
<name>ASHISH</name>
<roles>MD</roles>
</employee>
<employee>
<name>BAHADUR</name>
<roles>CO</roles>
<roles>TM</roles>
</employee>
</employees>

谁能帮我找出问题所在!

【问题讨论】:

    标签: java xml data-binding jaxb jackson


    【解决方案1】:

    找到了一个有用的教程来创建自定义的无类型 xml 反序列化器,它帮助我克服了它。 在序列化的情况下,使用 jaxb2-maven-pluging 作为构建插件从模式创建 java 类。

    org.codehaus.mojo jaxb2-maven-插件 1.5 xjc -extension -npa -b ${project.basedir}/src/main/xsd/global.xjb

    ** 如果您使用的是 jackson 库,则将注释替换为 jaxb annotaions 的 jackson 替代品。或将 jaxbannotation 模块注册到您的序列化程序中。

    这是帮助我的gist 的链接。

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多