Jaxb:通过 xmlns 属性而不是元素前缀进行本地命名空间?

发布于 12-11 12:07 字数 1419 浏览 0 评论 0 原文

我正在使用 Jaxb 生成一些 XML,看起来相当不错。这是一个片段:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ns2:oval_system_characteristics xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5 oval-system-characteristics-schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx esx-system-characteristics-schema.xsd" 
xmlns:ns2="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5" xmlns="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:ns3="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

...

<ns3:visdkmanagedobject_item id="1">
    <ns3:property>isolation.tools.diskWiper.disable</ns3:property>
    <ns3:value datatype="boolean">true</ns3:value>
</ns3:visdkmanagedobject_item>

这是符合标准的 XML。不幸的是,我受到下游系统的限制,它只接受以下格式的 XML:

<visdkmanagedobject_item id="1" xmlns="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx">
    <property>isolation.tools.diskWiper.disable</property>
    <value datatype="boolean">true</value>
</visdkmanagedobject_item>

其中某些元素通过 xmlns 属性命名。 现在的问题是,如何让 Jaxb 停止(做正确的事情)使用前缀命名元素并开始使用 xmlns 属性命名元素?

I'm generating some XML with Jaxb that looks pretty good. Here's a snipit:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ns2:oval_system_characteristics xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5 oval-system-characteristics-schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx esx-system-characteristics-schema.xsd" 
xmlns:ns2="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5" xmlns="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:ns3="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

...

<ns3:visdkmanagedobject_item id="1">
    <ns3:property>isolation.tools.diskWiper.disable</ns3:property>
    <ns3:value datatype="boolean">true</ns3:value>
</ns3:visdkmanagedobject_item>

This is standards compliant XML. Unfortunately the I'm limited by the constraints of the downstream system, it only accepts XML formatted this way:

<visdkmanagedobject_item id="1" xmlns="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx">
    <property>isolation.tools.diskWiper.disable</property>
    <value datatype="boolean">true</value>
</visdkmanagedobject_item>

Where certain elements are namespaced through the xmlns attribute.
Now for the question, how do I get Jaxb to stop (doing the right thing) namespacing the elements with a prefix and start namespacing the elements with the xmlns attribute?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深居我梦 2024-12-18 12:07:42

您可以通过在包级别利用 @XmlSchema 注释来设置默认命名空间。这是通过利用 package-info 类(如下例)来完成的:

com.example.package-info

@XmlSchema(
    namespace = "http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx",
    elementFormDefault = XmlNsForm.QUALIFIED)
package com.example;

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

了解更多信息

  • =“nofollow”="">http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

You can setup a default namespace by leveraging the @XmlSchema annotation at the package level. This is done by leveraging a package-info class (example below):

com.example.package-info

@XmlSchema(
    namespace = "http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#esx",
    elementFormDefault = XmlNsForm.QUALIFIED)
package com.example;

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

For More Information

相守太难 2024-12-18 12:07:42

有几种方法可以解决这个问题。它可能像这个一样简单,或者您也可以需要完全控制命名空间前缀。 (顺便说一句,第二个 xml 并不是“不正确”,它只是使用了默认命名空间。但是,对于需要 xml 特定前缀的系统来说,它是不正确的)。

there are a couple of ways to attack this problem. it might be as simple as this, or you may need to take complete control of the namespace prefixes. (btw, that second xml is not "incorrect", it's just using a default namespace. it would be incorrect, however, for a system to require a specific prefix for the xml).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文