JAXB ek açıklamalarını kullanarak Java nesnelerini XML'ye serileştirmek için Jackson kütüphanesini kullanmaya çalışıyorum. Ancak, XML çıktısını güzel yazdırırken bir sorunla karşılaşıyorum. Ben aşağıda istisna görüyorum,Güzel Jackson kütüphanesiyle XML yazdırma
ObjectMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String xml = mapper.writeValueAsString(person);
Ve:
İşte benim örnek kod kullanımıdır. Buradaki sorun, Jackson'ın XML yazıcısı olarak Stax2Writer'i kullanması ve Stax2'nin ham dizeleri yazmayı desteklemediği görülüyor (bu durumda DefaultPrettyPrinter, ham dizgisi olarak "\ n" yazmayı deniyor).
com.fasterxml.jackson.databind.JsonMappingException: Not implemented (through reference chain: xml.serialization.jackson.dto.Person["name"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:187)
at com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializer.serializeFields(XmlBeanSerializer.java:174)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider.serializeValue(XmlSerializerProvider.java:92)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2818)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2275)
at xml.serialization.jackson.SerializationTest.main(SerializationTest.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.UnsupportedOperationException: Not implemented
at org.codehaus.stax2.ri.Stax2WriterAdapter.writeRaw(Stax2WriterAdapter.java:380)
at org.codehaus.stax2.ri.Stax2WriterAdapter.writeRaw(Stax2WriterAdapter.java:373)
at com.fasterxml.jackson.dataformat.xml.util.DefaultXmlPrettyPrinter$Lf2SpacesIndenter.writeIndentation(DefaultXmlPrettyPrinter.java:498)
at com.fasterxml.jackson.dataformat.xml.util.DefaultXmlPrettyPrinter.writeLeafElement(DefaultXmlPrettyPrinter.java:271)
at com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator.writeString(ToXmlGenerator.java:489)
at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:39)
at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:21)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)
at com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializer.serializeFields(XmlBeanSerializer.java:161)
... 10 more
Etrafında nasıl çalışılacağı hakkında bir fikrin var mı?
I beklendiği gibi
Projemde için aşağıdaki Maven bağımlılık eklendi sonra Aşağıdaki örnek çalışmaya başladı Stax2Writer'in "\ n" gibi ham karakterleri yazmayı desteklemediğini daha önce belirtmiştim. Sorumluluk, desteklendiğini belgelediklerinden, Jackson ile nasıl güzel bir şekilde yazdırılabileceğiyle ilgili daha fazla soru. – Buchi