我正在尝试解锁以下xml
<?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 & MMS</setting>
<setting>MMS</setting>
<setting>WAP</setting>
</settings>
</InfoResult>带标头
Content-Type →application/vnd.mobilethink.setting-v1+xml如果首先restTemplate将其解释为json,则会出现问题,因此我试图使用以下代码强制使用内容处理程序:使用EclipseLink MOXy解组时忽略DTD
但我会搞错的。因此,我钻到了混搭,并手动完成了:
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();
}但我还是有一种令人厌恶的感觉:
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)--请帮我指出这里的坏代码.
发布于 2018-03-14 11:10:18
我最近也有类似的问题。
从发布的代码来看,Jaxb2Marshaller似乎没有被正确初始化。必须设置contextPath或文档中提到的classesToBeBound属性。
示例正确的代码以初始化:
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(RootEntity.class);
marshaller.afterPropertiesSet();https://stackoverflow.com/questions/39516227
复制相似问题