2016-05-24 8 views
0

Ich versuche, XML mit Jackson zu parsen. Ich kann jedoch nicht herausfinden, wie ich mit dem Element beim Parsen beginnen soll. Dieser API-Aufruf wird nie mehr zurückkehren als ein:XML-Deserialisierung mit Kindelement unter Verwendung von Jackson

<return_data api_call="get"> 
<users> 
<user> 
<username>jdoe</username> 
<firstname>John</firstname> 
<lastname>Doe</lastname> 
<account_expiration_date>0000-00-00</account_expiration_date> 
<signup_date>2015-01-01 15:00:36</signup_date> 
<deleted>0</deleted> 
<account_name>my account</account_name> 
</user> 
</users> 
</return_data> 

ich folgende versucht, aber ist der Fehler ‚Nicht erkennen Feld‚Benutzer‘... nicht als ignorable markiert‘ zu bekommen.

@JacksonXmlRootElement(localName = "user") 
@JsonIgnoreProperties(value = { "api_call" }) 
public class User { 

@JsonProperty("username") 
private String userName; 

@JsonProperty("firstname") 
private String firstName; 

@JsonProperty("lastname") 
private String lastName; 

@JsonProperty("account_expiration_date") 
private Date expirationDate; 

@JsonProperty("deleted") 
private boolean deleted; 

@JsonProperty("signup_date") 
private Date signupDate; 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public Date getExpirationDate() { 
    return expirationDate; 
} 

public void setExpirationDate(Date expirationDate) { 
    this.expirationDate = expirationDate; 
} 

public Date getSignupDate() { 
    return signupDate; 
} 

public void setSignupDate(Date signupDate) { 
    this.signupDate = signupDate; 
} 
} 

Update: Ich konnte es durch die Verwendung mehrerer Wrapper zum Laufen bringen, aber ich hoffe es eine einfachere Lösung.

@JsonIgnoreProperties(value = { "api_call" }) 
public class ReturnDataWrapper { 

@JacksonXmlElementWrapper(localName = "users") 
@JsonProperty("users") 
private UserWrapper userWrapper; 

public UserWrapper getUserWrapper() { 
    return userWrapper; 
} 

public void setUserWrapper(UserWrapper userWrapper) { 
    this.userWrapper = userWrapper; 
} 
} 

@JacksonXmlRootElement(localName = "users") 
@JsonRootName("users") 
public class AlertAccountWrapper { 

@JacksonXmlElementWrapper(localName = "user") 
@JsonProperty("user") 
public User account; 

public User getUser() { 
    return account; 
} 

public void setUser(User account) { 
    this.account = account; 
} 

} 

ich auch entfernt @JacksonXmlRootElement (local = "user") und @JsonIgnoreProperties (Wert = { "api_call"}) von der Benutzerklasse.

Antwort

1

Der übliche Weg, dies zu debuggen, wäre, das Gegenteil zu versuchen: Erstelle ein Objekt, das deiner Meinung nach übereinstimmen sollte, serialisiere es als XML, sieh, wie es sich von dem unterscheidet, was du erwartest. Dies sollte Ihnen einen Hinweis geben, wo Diskrepanz liegt.

Verwandte Themen