Pretty-Print-XML mit Jackson-Bibliothek
Ich bin versucht, Jackson-Bibliothek zum serialisieren von Java-Objekten in XML mit JAXB-Annotationen. Allerdings ich Gesicht, die ein Problem in pretty-Print die XML-Ausgabe.
Hier ist mein Beispielcode Verwendung:
ObjectMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String xml = mapper.writeValueAsString(person);
Und ich sehe das unten Ausnahme. Das Problem hier ist Jackson verwendet Stax2Writer als XML-writer und Stax2 scheint nicht die Unterstützung von raw-strings (in diesem Fall DefaultPrettyPrinter versucht zu schreiben, "\n" als raw-string).
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
Irgendwelche Gedanken auf, wie um ihn herum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der Stax2WriterAdapter Dokumentation thier default-Implementierung ist unvollständig. Auch Kommentare im code sagen, dass die writeRaw () - Methode nicht implementiert werden, Stax 1.0, das ist Standard für die Java-runtime.
Schalter sollte man verwenden, eine Stax2 Bibliothek wie vorgeschlagen auf diese wiki-Seite.
Nachdem ich noch folgende Maven-dependency zu meinem Projekt, dem Beispiel unten zu arbeiten begann wie erwartet:
Code Beispiel:
Ausgabe:
Habe ich die unten Abhängigkeiten zu Sortieren die oben genannten Problems. Hier ist die Liste derer:
1) jackson-annotations-2.9.8.jar
2) jackson-core-2.9.8.jar
3) jackson-databind-2.9.8.jar
4) jackson-dataformat-xml-2.9.8.jar
5) jackson-module-jaxb-annotations-2.9.8.jar
6) stax2-api-4.0.0.jar
7) woodstox-core-asl-4.4.1.jar
geben Sie eine Bild-Beschreibung hier
@Urosh T: Inhalt aktualisiert.
Seine verursacht, weil der java.lang.UnsupportedOperationException:
wenn Sie implementieren die implementierte Methode, dein code sollte funktionieren. um weitere Erkenntnisse über die Ausnahme, überprüfen Sie bitte diese
("java.lang.UnsupportedOperationException: noch Nicht unterstützt.").
Dank!!