jackson xml序列化异常

时间:2016-09-08 12:29:01

标签: java xml jackson jackson-dataformat-xml

我正在使用一个使用jackson库来处理xml的mavenized java项目。我有以下情况:

pom.xml我使用

    ...

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.8.2</version>
    </dependency>

    ...

要在xml中序列化的类是

public class Restaurant {
  public long id;
  public String name;
  public String address;
  public Double longitude;
  public Double latitude;
}

从java生成xml的Mapper类是

public class RestaurantMapper {
    static RestaurantMapper instance;

    public static RestaurantMapper instance() {
        if (instance == null)
            instance = new RestaurantMapper();

        return instance;
    }

    public void write(ToXmlGenerator generator, Restaurant source) throws IOException {
        generator.writeObjectFieldStart("restaturant");

        generator.writeFieldName("id");
        generator.writeNumber(source.id);

        generator.writeFieldName("name");
        generator.writeString(source.name);

        generator.writeFieldName("address");
        generator.writeString(source.address);

        generator.writeFieldName("longitude");
        generator.writeNumber(source.longitude);

        generator.writeFieldName("latitude");
        generator.writeNumber(source.latitude);

        generator.writeEndObject();
    }
}

最后是junit测试

@RunWith(JUnit4.class)
public class TestK {

    private Restaurant bean;

    @Before
    public void setup()
    {
        bean=new Restaurant();
        bean.id=-1;
        bean.address="dummy address";
        bean.latitude=24.0;
        bean.longitude=24.0;
        bean.name="dummy restaurant";
    }

    @Test
    public void testXML() throws IOException
    {
        File file=new File("src/test/result/restaurant.xml");
        XmlFactory jsonFactory = new XmlFactory(); // or, for data binding, org.codehaus.jackson.mapper.MappingJsonFactory 
        ToXmlGenerator generator = jsonFactory.createGenerator(file, JsonEncoding.UTF8); // or Stream, Reader
        generator.useDefaultPrettyPrinter();

        RestaurantMapper.instance().write(generator, bean, true);

        generator.close();
    }

使用此代码,我应该生成具有以下内容的restaurant.xml文件:

<restaurant>
   <id>-1</id>
   <name>dummy restaurant</name>
   <address>dummy address</address>
   <longitude>24.0</longitude>
   <latitude>24.0</latitude>
</restaurant>

但是行generator.writeObjectFieldStart("restaturant");会生成IllegalStateException: No element/attribute specified when trying to output element

当我将这段代码与JsonFactory一起使用时,它可以正常工作并生成

{
  "restaturant" : {
    "id" : -1,
    "name" : "dummy restaurant",
    "address" : "dummy address",
    "longitude" : 20.0,
    "latitude" : 24.0
  }
}

我知道有用于简化序列化/反序列化操作的映射器,但我需要使用低级api。

出了什么问题?

0 个答案:

没有答案
相关问题