在JAXB解组和编组之间保持相同的XML名称空间前缀

时间:2019-08-05 19:27:53

标签: java xml namespaces jaxb

我正在使用JAXB从SOAP请求中反序列化xml元素,进行一些修改(例如,更新标签中的某些属性),然后对更新后的消息进行序列化。 问题是当我收到SOAP消息时,我具有“核心”前缀,但是在序列化JAXB之后,对于相同的名称空间,将“核心”前缀替换为“ ns2”

是否有一种方法可以让我在输入请求中收到原始名称空间前缀? 我不能在package-info.java中使用带有硬编码前缀的名称空间@XmlSchema,因为输入前缀可能与“ core”不同,并且序列化后我需要使用相同的名称空间前缀

原始

<PlacementRequest
        xmlns="http://www.scte.org/schemas/130-3/2008a/adm"
        xsi:schemaLocation="http://www.scte.org/schemas/130-3/SCTE_130-3_2008a.xsd"
        messageId="00000000-0000-0000-0000-000000000000"
        version="1.1"
        identity="CHT_ADM_XXX"
        system="ADM-CCOR"
        xmlns:core="http://www.scte.org/schemas/130-2/2008a/core"
        xmlns:xsi="http://www.w3.org/XMLSchema-instance">
    <Entertainment>
        <core:Content id="http://cdnassist.vod/http_client_file_transfer/fxm.com!MFXM1021874420170601">
            <core:AssetRef assetID="ASST0000000000000000" providerID="provider.com"/>
            <core:Ext>
                <TargetCode key="rating">TV-MA</TargetCode>
            </core:Ext>
        </core:Content>
    </Entertainment>
    <Client>
        <core:CurrentDateTime>2018-01-01T00:00:00.000-05:00</core:CurrentDateTime>
    </Client>
</PlacementRequest>

由JAXB序列化(http://www.scte.org/schemas/130-3/2008a/adm名称空间为“ ns2”,但我希望为“核心”)

<PlacementRequest 
        xmlns="http://www.scte.org/schemas/130-3/2008a/adm"
        xsi:schemaLocation="http://www.scte.org/schemas/130-3/SCTE_130-3_2008a.xsd"
        messageId="00000000-0000-0000-0000-000000000000"
        version="1.1"
        identity="CHT_ADM_XXX" 
        system="ADM-CCOR" 
        xmlns:ns2="http://www.scte.org/schemas/130-2/2008a/core"
        xmlns:xsi="http://www.w3.org/XMLSchema-instance" 
        >
    <Entertainment>
        <ns2:Content id="http://cdnassist.vod/http_client_file_transfer/fxm.com!MFXM1021874420170601">
            <ns2:AssetRef providerID="provider.com" assetID="ASST0000000000000000"/>
            <ns2:Ext>
                <TargetCode key="rating">TV-MA</TargetCode>
            </ns2:Ext>
        </ns2:Content>
    </Entertainment>
    <Client>
        <ns2:CurrentDateTime>2018-01-01T00:00:00.000-05:00</ns2:CurrentDateTime>
    </Client>
</PlacementRequest>

0 个答案:

没有答案