8

http://xmlgw.companieshouse.gov.uk/からの応答をアンマーシャリングしています。これはマーシャルに送信されるテキストです:

<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>

CoSearchItemのモデルは次のようになります。

@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モデルの構造は次のとおりです。

@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

}

パッケージには次の注釈があります。

@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;

アンマーシャリングは、アイテムのリスト内のNode、より大きなものから最初に抽出されたものから行われます。ただし、xmlを解析すると、CoSearchItemのすべてのフィールドがnullに設定され、理由を理解できません。Documentany

4

3 に答える 3

15

@XmlSchemaモデルの名前空間修飾を指定するには、パッケージ レベルの注釈を使用する必要があります。

@XmlSchema(
    namespace = "http://xmlgw.companieshouse.gov.uk/v1-0/schema",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

@XmlRootElementこれにより、およびクラスで名前空間 URI を指定する必要がなくなり@XmlTypeます。NameSearch

詳細については


アンマーシャリングは、アイテムの任意のリスト内で、より大きなドキュメントから抽出された最初のノードから行われます。

ノードの作成に使用される DOM パーラーが名前空間に対応していることを確認してください。

documentBuilderFactory.setNamespaceAware(true);
于 2013-02-26T09:59:03.477 に答える
2

@BlaiseDoughanのおかげで正解がわかりました。パッケージの名前空間の資格を調べたところ、次のことを指していることがわかりました。

"http://xmlgw.companieshouse.gov.uk/v1-0"

そしてそれは次のことを指しているはずです:

"http://xmlgw.companieshouse.gov.uk/v1-0/schema"

それがどのように見当違いになったのかわからない。

于 2013-02-26T10:11:00.823 に答える