JAXB - unmarshallt Felder sind null
Sind wir unmarshalling eine Antwort von http://xmlgw.companieshouse.gov.uk/. Dies ist der text geschickt auf den marshall:
<NameSearch xmlns="http://xmlgw.companieshouse.gov.uk/v1-0/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema http://xmlgw.companieshouse.gov.uk/v1-0/schema/NameSearch.xsd">
<ContinuationKey>...</ContinuationKey>
<RegressionKey>...</RegressionKey>
<SearchRows>20</SearchRows>
<CoSearchItem>
<CompanyName>COMPANY NAME</CompanyName>
<CompanyNumber>23546457</CompanyNumber>
<DataSet>LIVE</DataSet>
<CompanyIndexStatus>DISSOLVED</CompanyIndexStatus>
<CompanyDate></CompanyDate>
</CoSearchItem>
//more CoSearchItem elements
</NameSearch>
Dem Modell der CoSearchItem ist wie folgt:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CoSearchItem", propOrder = {
"companyName",
"companyNumber",
"dataSet",
"companyIndexStatus",
"companyDate",
"searchMatch"
})
public class CoSearchItem {
@XmlElement(name = "CompanyName", required = true)
protected String companyName;
@XmlElement(name = "CompanyNumber", required = true)
protected String companyNumber;
@XmlElement(name = "DataSet", required = true)
protected String dataSet;
@XmlElement(name = "CompanyIndexStatus")
protected String companyIndexStatus;
@XmlElement(name = "CompanyDate")
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar companyDate;
@XmlElement(name = "SearchMatch")
protected String searchMatch;
//getters and setters
}
NameSearch-Modell hat diese Struktur:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "NameSearch", namespace = "http://xmlgw.companieshouse.gov.uk/v1-0/schema", propOrder = {
"continuationKey",
"regressionKey",
"searchRows",
"coSearchItem"
})
@XmlRootElement(name = "NameSearch", namespace = "http://xmlgw.companieshouse.gov.uk/v1-0/schema")
public class NameSearch {
@XmlElement(name = "ContinuationKey", required = true)
protected String continuationKey;
@XmlElement(name = "RegressionKey", required = true)
protected String regressionKey;
@XmlElement(name = "SearchRows", required = true)
protected BigInteger searchRows;
@XmlElement(name = "CoSearchItem")
protected List<CoSearchItem> coSearchItem;
//setters and getters
}
Paket hat, diese Anmerkungen:
@XmlSchema(namespace = "http://xmlgw.companieshouse.gov.uk/v1-0", elementFormDefault = XmlNsForm.QUALIFIED, //
xmlns = {
@XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
}
)
package uk.gov.companieshouse;
Den unmarshaling erfolgt von der ersten Node
extrahiert aus einem größeren Document
in any
Liste der Elemente. Wenn wir zum Parsen der xml-allerdings alle Felder in CoSearchItem auf null gesetzt und kann nicht herausfinden, der Grund.
this helfen?
Es zeigt auf der @XmlSchema wie Blaise war, so irgendwie. Ich fand heraus, die Frage nach der Realisierung der falschen namespace Qualifikation.
Es zeigt auf der @XmlSchema wie Blaise war, so irgendwie. Ich fand heraus, die Frage nach der Realisierung der falschen namespace Qualifikation.
InformationsquelleAutor pablisco | 2013-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie mit einer Paket-level -
@XmlSchema
Anmerkung zu den namespace anzugeben, der die Qualifikation für Ihr Modell.Dieser angegeben, die Sie nicht benötigen, um geben Sie die namespace-URI auf die
@XmlRootElement
und@XmlType
auf IhreNameSearch
Klasse.Weitere Informationen
Stellen Sie sicher, dass der DOM parer verwendet um die Knoten namespace bewusst.
Es gab eine änderung in java um 1.8.0_100 machen, dass diese Antwort die einzig richtige Art schema für alle Felder. Vor dieser version @XmlRootElement war auch arbeiten.
InformationsquelleAutor Blaise Doughan
Dachte ich, die richtige Antwort Dank @Blaise Doughan. Nach einem Blick auf die Paket-namespace Qualifikation fand ich, dass es zeigen:
und es sollte wurden zeigt auf:
Nicht sicher, wie Sie Sie bekam fehl am Platz.
@XmlElement
Anmerkungen im falschen Namensraum, so dass Sie nicht übereinstimmten, wenn Deserialisieren und so die Daten immer auf den Boden fallen gelassen. (JAXB ignoriert unbekannte Elemente standardmäßig.)InformationsquelleAutor pablisco
Ich dies Problem gelöst, indem
elementFormDefault="unqualified"
im xsd-vor der Generierung der stubs, sonst machen Sie die änderung manuell in package-info.javaInformationsquelleAutor Prateek Mehta