Ich bin neu in Rest API. Ich habe eine XML-Ausgabe, die ich entpacken muss. Unten ist die XML-Ausgabe:So entpacken Sie diese Art von XML in Java
<dsml>
<entries>
<entry dn="uid=7686,c=in,ou=pages,o=example.com">
<att name="uid">
<value>7568766</value>
</att>
<att name="email">
<value>[email protected]</value>
</att>
<att name="callname">
<value>John</value>
</att>
</entry>
<entry dn="uid=7689,c=in,ou=pages,o=example.com">
<att name="uid">
<value>7678766</value>
</att>
<att name="callname">
<value>Mike</value>
</att>
</entry>
<entry dn="uid=7690,c=in,ou=pages,o=example.com">
<att name="uid">
<value>75858766</value>
</att>
<att name="email">
<value>[email protected]</value>
</att>
<att name="callname">
<value>rahul</value>
</att>
</entry>
</entries>
</dsml>
Die tatsächliche XML-Ausgabe hat insgesamt 37 Einträge. Unten ist die Modellklasse:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@XmlElement(name = "uid")
private int uid;
@XmlElement(name = "callname")
private String callname;
@XmlElement(name = "email")
private String email;
public int getId() {
return uid;
}
public void setId(int uid) {
this.uid = uid;
}
public String getFirstName() {
return callname;
}
public void setFirstName(String callname) {
this.callname = callname;
}
public String getmail() {
return email;
}
public void setmail(String email) {
this.email = email;
}
}
Unten ist die Ruhe Api Klassencode:
public class UsingRestAPI {
public static void main(String[] args)
{
try
{
URL url = new URL("www.example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/xml");
if (conn.getResponseCode() != 200)
{
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
String apioutput="",temp="";
while ((apioutput = br.readLine()) != null) {
temp += apioutput;
System.out.println(apioutput);
}
JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
User user = (User) jaxbUnmarshaller.unmarshal(new StringReader(temp));
System.out.println(user.getId());
System.out.println(user.getFirstName());
System.out.println(user.getmail());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
Während dieser Code ausgeführt wird, erhalte ich Fehler
javax.xml.bind.UnmarshalException - mit verknüpfter Ausnahme: [org.xml.sax.SAXParseException; Zeilennummer: 1; Spaltennummer: 110; Externe DTD: Fehler beim Lesen der externen DTD 'dsml.dtd', da 'http' aufgrund der Einschränkung durch die Eigenschaft 'accessExternalDTD' nicht zulässig ist.]
Ich habe versucht, indem ich die Eigenschaft ACCESS_EXTERNAL_DTD auf true änderte, aber es gab ein weiterer Fehler:
javax.xml.bind.PropertyException: name: http://javax.xml.XMLConstants/property/accessExternalDTD value: true
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.setProperty(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.setProperty(Unknown Source)
at UsingRestAPI.main(UsingRestAPI.java:60)