【问题标题】:JAXB - namespace handling in XML outputJAXB - XML 输出中的命名空间处理
【发布时间】:2015-03-17 14:50:03
【问题描述】:

我正在尝试生成一个类似于我已有的 XML 文档。

所以我使用一些工具(我记得使用 Visual Studio 编译器附带的工具)为该 xml 生成 xsd,然后通过 Eclipse 生成 jaxb 类。现在,我能够成功编组 XML 输出,但与我引用的原始 xml 文档略有不同。一个区别是命名空间。 xml 输出中不存在所有命名空间元素。

原始文档具有如下命名空间结构:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<ClassPackage xmlns="http://www.example.com/in-CLASS/1.0" xmlns:name1="http://www.example.org/Schemas/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/in-CLASS/1.0 C:\schemas\in-class.xsd">

我在 编组输出 XML 中有以下标头:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<ClassPackage xmlns="http://www.example.com/in-CLASS/1.0">

我的 package-info.java 类生成如下:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.com/in-CLASS/1.0", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.test.xml;

请帮助我获取类似于原始文档的命名空间元素。

【问题讨论】:

  • 对我来说很奇怪,很长一段时间我都没有答案!当我在几个小时后出现时发布答案时非常自信...... :(

标签: java xml jakarta-ee jaxb xml-namespaces


【解决方案1】:

您可能缺少 name1 命名空间,因为它没有在 ClassPackage 对象的任何子元素中使用。

如果没有其他对象属于这些命名空间,它们将不会被打印。

您可以在 XmlSchema 注释中声明额外的命名空间:

@javax.xml.bind.annotation.XmlSchema(
elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
namespace = "http://www.example.com/in-CLASS/1.0", 
xmlns={@XmlNs(prefix="name1", namespaceURI="http://www.example.org/Schemas/XMLSchema"))

但是您应该检查您生成的 xsd 模式是否具有命名空间意识,因为 xml 有额外的命名空间声明但没有属于它的元素是可疑的。由于 xml 架构通常是为命名空间定义的,因此您应该为您的 name1 架构添加额外的 xsd 文档,该文档已导入到 man xsd 文档中。

如果没有看到整个 xml 文档,很难说命名空间是否是人工制品,或者它们是否应该被您的某些元素真正使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2013-04-11
    • 2011-07-07
    • 2014-05-31
    • 2011-09-05
    • 1970-01-01
    • 2013-02-13
    • 2015-04-21
    相关资源
    最近更新 更多