繁体   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