gpt4 book ai didi

namespaces - 在 JAXB 中编码/解码时匹配命名空间

转载 作者:行者123 更新时间:2023-12-04 16:58:19 29 4
gpt4 key购买 nike

在 JAXB 中编码/解码时匹配命名空间

我使用 JAXB 来编码/解码 XML。如果我编码这样的 XML 文件:


<om:RequestCreateEvent xmlns:om="http://ossj.org/xml/OrderManagement/v1-0" xmlns:v1="http://ossj.org/xml/Common/v1-5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v11="http://ossj.org/xml/Common-CBECore/v1-5" xmlns:v12="http://ossj.org/xml/Common-CBEBi/v1-5">
<om:event>
<v1:applicationDN>System/JSR264/ApplicationType/OrderManagement/Application/1-0;1-0-2;ReferenceImplementation/</v1:applicationDN>
<v1:eventTime>2008-11-12T07:39:34.896+01:00</v1:eventTime>
<om:requestValue xmlns:v1="http://ossj.org/xml/om/ri/omimpl/v1-0" xsi:type="v1:ProductOrderImplValue">
<v13:key xmlns:v1="http://ossj.org/xml/OrderManagement/v1-0" xmlns:v13="http://ossj.org/xml/Common/v1-5" xsi:type="v1:ProductOrderKey">
<v13:type>http://ossj.org/xml/om/ri/omimpl/v1-0#ProductOrderImplValue</v13:type>
<v13:primaryKey>12</v13:primaryKey>
</v13:key>
<v1:requestState>open.not_running.not_started</v1:requestState>
<v12:description xsi:nil="true"/>
</om:requestValue>
</om:event>
</om:RequestCreateEvent>

然后随后尝试解码它,我得到了这个:

<ns4:RequestCreateEvent xmlns="http://ossj.org/xml/Common/v1-5" xmlns:ns2="http://ossj.org/xml/Common-CBECore/v1-5" xmlns:ns3="http://ossj.org/xml/Common-CBEBi/v1-5" xmlns:ns4="http://ossj.org/xml/OrderManagement/v1-0" xmlns:ns5="http://ossj.org/xml/om/ri/omimpl/v1-0" xmlns:ns6="http://ossj.org/xml/Common-CBEDatatypes/v1-5" xmlns:ns7="http://ossj.org/xml/Common-CBELocation/v1-5" xmlns:ns8="http://ossj.org/xml/Common-CBEResource/v1-5" xmlns:ns9="http://ossj.org/xml/Common-CBEService/v1-5" xmlns:ns10="http://ossj.org/xml/Common-CBEProduct/v1-5" xmlns:ns11="http://ossj.org/xml/Common-CBEProductOffering/v1-5" xmlns:ns12="http://ossj.org/xml/Common-CBEParty/v1-5">
<ns4:event>
<applicationDN>System/JSR264/ApplicationType/OrderManagement/Application/1-0;1-0-2;ReferenceImplementation/</applicationDN>
<eventTime>
2008-11-12T07:39:34.896+01:00</eventTime>
<ns4:requestValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns5:ProductOrderImplValue">
<key xsi:type="ns4:ProductOrderKey">
<type>
http://ossj.org/xml/om/ri/omimpl/v1-0#ProductOrderImplValue</type>
<primaryKey/>
</key>
<ns5:requestState>open.not_running.not_started</ns5:requestState>
<ns3:description xsi:nil="true"/>
</ns4:requestValue>
</ns4:event>
</ns4:RequestCreateEvent>

当我编码 jaxb 生成的 pojo 以创建 XML 文件时,我需要确保命名空间中使用的前缀与使用的前缀相匹配
我解码同一个文件。

当我进行编码时,可能有一个使用 NamespaceContext 的解决方案。但是,我无法在实现中对前缀及其 uri 进行硬编码
NamespaceContext ,因为我没有这些信息可用(我使用了很多模式等)。因此,如果我要尝试使用 NamespaceContext,我将需要能够
从我似乎无法获得的 JAXB 解码器获取前缀和它们的 uri。

因此,如果有人对 NamespaceContext 解决方案或其他一些方法有任何建议,我将不胜感激。

最佳答案

快速浏览一下您的 XML 文档,这些文档似乎是命名空间限定的,但使用了不同的前缀。不同的 JAXB 实现提供了不同的机制来控制所使用的前缀,但会涉及到您的交互:

JAXB RI/地铁JAXB

JAXB RI/Metro 提供了一个名为 NamespacePrefixMapper 的扩展。 :

  • http://jaxb.java.net/guide/Changing_prefixes.html

  • EclipseLink JAXB (MOXy)

    MOXy (我是技术负责人)将使用 @XmlSchema 中指定的前缀注解。在下面的示例中 atom前缀将用于 http://www.w3.org/2005/Atom命名空间 URI。
    javax.xml.bind.annotation.XmlSchema(  
    xmlns = {
    @javax.xml.bind.annotation.XmlNs(prefix = "atom", namespaceURI = "http://www.w3.org/2005/Atom")
    })
    package org.example.domain;
  • How to customize namespace prefixes on Jersey(JAX-WS) (相关问题)
  • 关于namespaces - 在 JAXB 中编码/解码时匹配命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7980583/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com