我正在使用一个使用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。
出了什么问题?