I am trying to unmarshall the following 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>
with header
Content-Type →application/vnd.mobilethink.setting-v1+xml
Problem if first of all restTemplate interprets as json so i tried to force content handler using code found here: Ignoring DTDs when unmarshalling with EclipseLink MOXy
but i am getting mashalling error. So i drilled down to mashalling and done it manually:
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();
}
but i am still getting a mashalling exeption:
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)
Please help point out the bad code here.