[英]JSON String to JAXB java object unmarshalling
簡單的 Spring 啟動應用程序。
I have a JSON String which needs to be converted to XML and that XML needs to be un marshalled to a java pojo which has JAXB annotations.
String response = "JSON FORMATTED STRING";
JSONObject json = new JSONObject(response);
String xml = XML.toString(json);//prints valid XML. no UTF stmt.
Unmarshaller jaxbUnmarshaller =
JAXBContext.newInstance(JAXBPOJO.class).createUnmarshaller();
jaxbUnmarshaller.unmarshal(new StringReader(xml));
我得到的錯誤如下。 試圖了解為什么我會收到此錯誤。
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Message"). Expected elements are <{http://SOAP_WSDL_URL}JAXb_POJO_NAME>
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:714)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:232)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:227)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:94)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1119)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:544)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:526)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:138)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
The SOAP WSDL URL in the error is another web service int he spring boot APp. 試圖理解為什么這會出現在錯誤中。
javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“消息”)。 預期的元素是 < {http://SOAP_WSDL_URL}JAXb_POJO_NAME >
Instead of going from json to xml to pojo you can go directly from json to the pojo using jackson:
ObjectMapper objectMapper = new ObjectMapper();
JAXBPOJO pojo = objectMapper.readValue(response, JAXBPOJO.class);
如果您想忽略未知屬性,請將此注釋添加到您的 pojo class:
@JsonIgnoreProperties(ignoreUnknown = true)
如果您無法將其添加到 pojo,那么您可以添加此設置:
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
如果使用 maven,請確保添加依賴項:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.