我想将命名空间 urn:com.workday/bsvc 添加到我生成的 xml 中的第二个元素。 这就是我想要生成的:
此 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 项目的维护者。