簡體   English   中英

JSON 字符串到 JAXB java ZA8CFDE6331BD59EB2AC96F8911C4B666

[英]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>

https://github.com/FasterXML/jackson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM