首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.springframework.oxm.UnmarshallingFailureException: NPE在解编组时。使用和jaxb

org.springframework.oxm.UnmarshallingFailureException: NPE在解编组时。使用和jaxb
EN

Stack Overflow用户
提问于 2016-09-15 16:38:36
回答 1查看 2.1K关注 0票数 1

我正在尝试解锁以下xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<InfoResult>
    <resultCode>OK</resultCode>
    <msisdn>263771222608</msisdn>
    <make>Samsung</make>
    <model>Galaxy Grand Neo Plus I9060I</model>
    <settings>
        <setting>Internet</setting>
        <setting>Internet &amp; MMS</setting>
        <setting>MMS</setting>
        <setting>WAP</setting>
    </settings>
</InfoResult>

带标头

代码语言:javascript
复制
Content-Type →application/vnd.mobilethink.setting-v1+xml

如果首先restTemplate将其解释为json,则会出现问题,因此我试图使用以下代码强制使用内容处理程序:使用EclipseLink MOXy解组时忽略DTD

但我会搞错的。因此,我钻到了混搭,并手动完成了:

代码语言:javascript
复制
private Jaxb2Marshaller marshaller=new Jaxb2Marshaller();

public Object unmarshal(String xmlString) {
    return marshaller.unmarshal(new StreamSource(new StringReader(xmlString)));
}

public InfoResult getSettingsInfo(String msisdn) {
    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
    headers.add("Accept", "application/vnd.mobilethink.setting-v1+xml");
    HttpEntity<String> entity = new HttpEntity<>(headers);
    ResponseEntity<String> infoResultResponseEntity = restTemplate.exchange(INFO_REQUEST_URL, HttpMethod.GET, entity, String.class, msisdn);
    String data = infoResultResponseEntity.getBody();
    Object o = unmarshal(data);
    return new InfoResult();
}

但我还是有一种令人厌恶的感觉:

代码语言:javascript
复制
org.springframework.oxm.UnmarshallingFailureException: NPE while unmarshalling. This can happen on JDK 1.6 due to the presence of DTD declarations, which are disabled.; nested exception is java.lang.NullPointerException
        at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:777)
        at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:753)

--请帮我指出这里的坏代码.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 11:10:18

我最近也有类似的问题。

从发布的代码来看,Jaxb2Marshaller似乎没有被正确初始化。必须设置contextPath文档中提到的classesToBeBound属性。

示例正确的代码以初始化:

代码语言:javascript
复制
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(RootEntity.class);
marshaller.afterPropertiesSet();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39516227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档