2011-10-20 63 views
3

我用Jaxb生成了一些XML,看起來不錯。這裏有一個snipit:Jaxb:通過xmlns屬性代替元素前綴的本地namspacing?

<?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屬性開始命名元素?

回答

0

有幾種方法可以解決這個問題。它可能與this一樣簡單,或者您可能需要採用名稱空間前綴的complete control。 (順便說一下,第二個xml不是「不正確的」,它只是使用默認的名稱空間。但是,不正確,但是,系統需要xml的特定前綴)。

2

您可以通過在包級別利用@XmlSchema註釋來設置默認名稱空間。這是利用一個package-info類(下面的例子)來完成:

com.example.package-信息

@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; 

更多信息