JAXB:将命名空间添加到第二级

问题描述 投票:0回答:1

我想将命名空间 urn:com.workday/bsvc 添加到我生成的 xml 中的第二个元素。 这就是我想要生成的:

但我不知道如何在课堂上指定它。 我将其添加到我的类 Put_Absence_Input_Request 中:

java xml jaxb
1个回答
0
投票

download (zip) 包含一个独立的 Maven 项目,用于将给定的 XML workday-01.xml 文件解组为 JAXB 对象,然后将对象编组回 XML,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:wd="urn:com.workday/bsvo">
    <wd:Put_Absence_Input_Request wd:version="v39.2">
        <wd:Absence_Input_Data>
            <wd:Batch_ID>Import 15022023</wd:Batch_ID>
            <wd:Worker_Reference>
                <wd:ID wd:type="Employee_ID">1741538</wd:ID>
            </wd:Worker_Reference>
            <wd:Absence_Component_Reference>
                <wd:ID wd:type="Accrual_Code">FRA_Shadow_Accrual_for_Time_Offs_Impacting_Accrual_of_Paid_Annual_Leave_CP</wd:ID>
            </wd:Absence_Component_Reference>
            <wd:Start_Date>2023-01-01</wd:Start_Date>
            <wd:End_Date>2023-01-31</wd:End_Date>
            <wd:Reference_Date>2023-01-15</wd:Reference_Date>
            <wd:Hours>2.08</wd:Hours>
            <wd:Adjustment>false</wd:Adjustment>
        </wd:Absence_Input_Data>
    </wd:Put_Absence_Input_Request>
</root>

root
元素为自身声明命名空间,但它为子元素声明命名空间。

方法如下

"urn:com.workday/bsvo"
命名空间的配置在 JAXB 上下文中使用以下方式声明:

com/workday/bsvo/package-info.java

@jakarta.xml.bind.annotation.XmlSchema
(
    namespace = "urn:com.workday/bsvo",
    elementFormDefault = jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns =
    {
        @jakarta.xml.bind.annotation.XmlNs
        (
            prefix = "wd",
            namespaceURI = "urn:com.workday/bsvo")
    }
)
package com.workday.bsvo;

此外,命名空间前缀可以选择配置为

wd:
以覆盖通用
ns1
前缀。

Maven 项目从这些 XML 模式和绑定文件生成 Java (JAXB) 类:

HiSrc HighJAXB Maven 插件用于生成 JAXB 类:

注意:这是“模式优先”的设计模式;但是,您可以使用生成的 Java 类作为“代码优先”方法的模型。

target
└── generated-sources
    └── xjc
        ├── com
        │   └── workday
        │       ├── bsvo
        │       │   ├── AbsenceComponentReference.java
        │       │   ├── AbsenceInputData.java
        │       │   ├── ID.java
        │       │   ├── ObjectFactory.java
        │       │   ├── package-info.java
        │       │   ├── PutAbsenceInputRequest.java
        │       │   └── WorkerReference.java
        │       ├── ObjectFactory.java
        │       ├── package-info.java
        │       └── Root.java
        ├── JAXBDebug.java
        └── META-INF
            └── sun-jaxb.episode

root.xjb 绑定文件自定义无命名空间

root
类的 Java 包路径和
workday
类的子路径,以保持秩序。 wd.xsd 声明其自己的目标命名空间,而 root.xsd 故意省略目标命名空间。

此外,root.xjb绑定文件自定义工作日级别

package-info.java
以使用更友好的前缀
wd:
HiSrc HyperJAXB Annox XJC Plugin 用于自定义前缀。这是可选的。如果省略此自定义,JAXB 将根据需要声明
"urn:com.workday/bsvo"
命名空间,但前缀是任意的(即
ns1
)。

此外,HiSrc BasicJAXB XJC Plugin 用于为

hashCode
equals
toString
生成特定于值的方法。这些方法的生成是可选的,但它为示例
Main.java
应用程序提供了人类可读的 toString 输出。

免责声明:我是 HiSrc 项目的维护者。

© www.soinside.com 2019 - 2024. All rights reserved.