当前位置: 首页 > 知识库问答 >
问题:

每个xml标记上的JAXB命名空间

籍昱
2023-03-14

Im使用jaxb生成XML请求。下面是所有的代码细节。我也尝试过包信息的东西,但它不适合我。就像我想在每个对象XML标记上添加命名空间一样。

希望你们明白我的意思。我是做错了什么还是遗漏了什么?或者这种事情在JAXB Java中是可能的。

所需输出

<ns0:CustomizedBundlesSubscriptionPortalResultMsg xmlns:ns0="http://www.herman.com/schemas/SubscriptionCustomizedBundles.xsd">
 <ns1:ResultHeader xmlns:ns1="http://www.herman.pk/eil/common_service/types/common_types/v1">
    <ns1:RequestID>1</ns1:RequestID>
    <ns1:Timestamp>20180518160833</ns1:Timestamp>
 </ns1:ResultHeader>
 <ns0:CustomizedBundlesResponseMessage>
    <ns0:AcctChgRec>
       <ns1:AccountType xmlns:ns1="http://www.herman.com/bme/cbsinterface/common">2000</ns1:AccountType>
       <ns1:BalanceId xmlns:ns1="http://www.herman.com/bme/cbsinterface/common">999000000016059109</ns1:BalanceId>
    </ns0:AcctChgRec>
 </ns0:CustomizedBundlesResponseMessage>
</ns0:CustomizedBundlesSubscriptionPortalResultMsg>

我得到了什么

<ns0:CustomizedBundlesSubscriptionPortalResultMsg xmlns:ns1="http://www.herman.pk/eil/common_service/types/common_types/v1" xmlns:ns0="http://www.herman.com/schemas/SubscriptionCustomizedBundles.xsd" xmlns:ns3="http://www.herman.com/bme/cbsinterface/common">
    <ns1:ResultHeader>
        <ns1:RequestID>1</ns1:RequestID>
        <ns1:Timestamp>20180518160833</ns1:Timestamp>
    </ns1:ResultHeader>
    <ns0:CustomizedBundlesResponseMessage>
        <ns0:AcctChgRec>
            <ns3:AccountType>2000</ns3:AccountType>
            <ns3:BalanceId>999000000016059109</ns3:BalanceId>
        </ns0:AcctChgRec>
    </ns0:CustomizedBundlesResponseMessage>
</ns0:CustomizedBundlesSubscriptionPortalResultMsg>

下面是我的JAXB父Java对象类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "resultHeader",
    "customizedBundlesResponseMessage"
})
@XmlRootElement(name = "CustomizedBundlesSubscriptionPortalResultMsg")
public class CustomizedBundlesSubscriptionPortalResultMsg {

    @XmlElement(name = "ResultHeader", namespace = "http://www.herman.pk/eil/common_service/types/common_types/v1")
    protected ResultHeaderType resultHeader;
    @XmlElement(name = "CustomizedBundlesResponseMessage")
    protected CustomizedBundlesResponseMessage customizedBundlesResponseMessage;
}

下面是我的内部JAXB对象Java类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "acctChgRec"
})
@XmlRootElement(name = "CustomizedBundlesResponseMessage")
public class CustomizedBundlesResponseMessage {

    @XmlElement(name = "AcctChgRec")
    protected List<AcctChgRecType> acctChgRec;
}

下面是我的AcctChgRecType JAXB对象类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AcctChgRecType", propOrder = {

})
public class AcctChgRecType {

    @XmlElement(name = "AccountType", required = true, nillable = true)
    protected String accountType;
    @XmlElement(name = "BalanceId", required = true, type = Long.class, nillable = true)
}

共有1个答案

唐声
2023-03-14

我想让你参考@MichaelKay的以下回答:

这不是同一个问题,但答案是一样的:

在XML应用程序中,原则应该是:

接收应用程序不应该关心如何编写XML的无关紧要的词汇细节。实现这一点的最好方法是使用一个受人尊敬的XML解析器来读取XML。)

(b) 编写应用程序应该可以自由使用他们认为方便的任何词汇约定。(这意味着您可以使用任何值得尊敬的序列化库来编写XML。)

基本上,你不应该在意。如果这样做,那么处理XML的方式就会出现严重问题。名称空间的声明方式必须无关紧要。为什么要这么做?

要回答您的问题,这在标准JAXB中是不可能的。

 类似资料:
  • 供应商提供的XML如下: 请注意,没有声明,供应商也没有提供模式。这不能更改,供应商将来会继续这样发布XML。 为了生成JAXB绑定,我创建了如下模式: 请注意,我已经声明了一个或多或少有意义的命名空间(“http://acme.com/schema”),以便它可以用于元素引用等。XJC 生成以下: 然后,我尝试解组XML文档: 我得到的例外是: 显然,这是因为XML元素属于一个空的名称空间,而J

  • 我陷入了一个棘手的问题,我应该使用JAXB库取消marshaX输入流,除了XML结构没有帮助。 我的问题是:标记用于值为>的的

  • 主要内容:命名冲突,使用前缀来避免命名冲突,XML 命名空间 - xmlns 属性,统一资源标识符(URI,全称 Uniform Resource Identifier),默认的命名空间,实际使用中的命名空间XML 命名空间提供避免元素命名冲突的方法。 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。 这个 XML 携带 HTML 表格的信息: <table> <tr> <td>Apples</td> <td>Bananas</td> <

  • 我刚开始在xml中使用名称空间,所以我有点困惑,希望得到一些澄清。我有一个java服务,我正在接收具有许多不同名称空间的xml文档,当我开始工作时,我觉得我肯定做错了什么,所以我想检查一下。在我的包裹信息中。java我有我的模式注释,例如: 我有一辆火车.java在班级级别上注释如下: 并且类中的每个字段都注释为: 列车包含乘客列表,因此有一个属性 并且该集合被注释为: 然后在乘客体内。java类

  • 我试图从通过JAXB生成的类序列化XML。 班级: 文件“package-info.java”: 编组器(简化,无需错误处理): 此代码生成: 我期待这样的事情: 我有一个类似的代码并且工作正常,但是我不明白为什么这个代码不显示命名空间。有线索吗?谢谢!

  • 我有情况, 有一个sample.xsd(旧版本-没有命名空间)。为同一个XSD文件使用XJC生成JAXB类。我得到了一个使用JAXB类基于XSD解封XML数据文件的示例。sample.xsd文件已更改(新版本-添加的命名空间)。再次为新的XSD文件使用XJC生成JAXB类。该示例已更新,现在可以用于新的XSD文件 现在我有一个情况,我正在获取基于旧XSD的XML数据文件,我想使用更新的示例文件来解