当前位置: 首页 > 面试题库 >

JAXB-未编组的字段为null

景宏盛
2023-03-14
问题内容

我们正在整理来自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提取从一个更大的Document,内部any的产品清单。但是,当我们解析xml时,CoSearchItem中的所有字段都设置为null,无法找出原因。


问题答案:

您需要使用包级@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@XmlType上指定名称空间URI NameSearch

想要查询更多的信息

  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

从任何项目列表中的较大文档提取的第一个节点开始进行拆组。

确保用于创建节点的DOM解析器可识别名称空间。

documentBuilderFactory.setNamespaceAware(true);


 类似资料:
  • 问题内容: 我正在尝试与JAXB进行封送处理。 我的输出就像 但是我需要像这样的输出 我正在使用以下代码来执行此操作。如果我取消注释代码,则会出现属性绑定异常。没有它,我可以编译,但无法获得所需的确切输出。 和我的豆lo 转接器类别 问题答案: 您可以执行以下操作: 适配器CDATA 根 该注释用于指定的应该被使用。 演示版 我必须包装一个以获得所需的效果。另请注意,设置方法意味着它负责该操作的所

  • 问题内容: 所以这是我的问题。给了我生成的XML文件应符合的XSD。使用maven插件和外部绑定文件,我生成了源代码。但是,当我尝试编组对象时,生成的XML不符合我的要求。 我的XSD包含以下内容: 生成的XML片段如下所示: 当我期望它是: 有没有一种方法可以彻底解决此问题? 我不想为每一个写几个适配器,组合。由于XSD可能会发生变化,因此我想保持生成的源代码不变。 问题答案: 您将需要使用此用

  • 问题内容: 我有一些对象被JAXB从XML文件中解组。JAXB可以告诉我还是以某种方式找出每个对象来自XML文件(行和列)的位置? 该信息有时可用,因为JAXB在模式验证错误期间将其提供给我。但我也想将其用于经过验证的对象。 问题答案: 您可以在JAXB中利用an 和an 来做到这一点: 演示版 input.xml 输出量 顾客 地址 想要查询更多的信息 http://blog.bdoughan.

  • ..循环引用解决方案来自这里:JAXB注释-如何使XmlIDRef元素列表具有id值作为属性而不是元素正文? 下面是我的解决方案: 这是需要(un)编组的类: 我还在其中添加了一些调试行:在ConnectionAdapter中,在unmarshal()方法中,它表示:“unmarshal:1”for the first room。在RoomModel中,在afterUnmarshal()处,它表示

  • 问题内容: 我在使用Marshaller.JAXB_FRAGMENT属性成功编组时遇到了一些麻烦。这是我尝试输出的XML的简单版本。 的和元件基本上围住了大量的只是容器元素&元件。我目前正在尝试在马歇尔(Marshall)上编组。 是否有可能先将and 元素编组,然后再将其编组到element 上,然后将输出包含在标记中? 当我在WorkSet级别进行封送处理时,它将属性附加到WorkSet标记中

  • 问题内容: 我有2节课: 和 默认情况下,如果我改变类的实例到XML,我将所有的字段()和引用类字段(,,)是这样的: 是否可以修改引用的类的 哪些 字段包含在该类的XML中?例如,我想说的是,当我转换类的实例时,我只想从该类中获取(否和字段),所以我想要获得: 我并不想永久注释类(使用或)来实现它,因为有我在其中要导出整个案件类的是(与,和)。 我只是不想导出所有这些领域时在类是从引用。 JAX