我正在使用一个使用 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的映射器类是
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。
怎么了?