@@ XMLELement:JAXB编组中的命名空间标记不起作用

问题描述 投票:0回答:1

即使在结算单类中设置了命名空间标签之后,JAXB命名空间也不以XML呈现。

-XML注释类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "urn:v4.requestsubmitbillingorder.cob.objects.bgc",name = "BillingOrderType", 
    propOrder = {...})
    public class BillingOrderType {
        @XmlElement(required = true)
        protected CustomerIdentifierType customerIdentifier;
        protected List<BillingOrderRelationshipType> relationship;
        @XmlElement(required = true)
        protected BillingOrderIdentifierType identifier;

--Expected XML

<?xml version="1.0" encoding="UTF-8"?>
<ns1:RequestDataSubmitBillingOrder xmlns:ns1="urn:v4.billingordermanagement.cob.services.bgc">
    <ns2:billingOrder xmlns:ns1="urn:v4.requestsubmitbillingorder.cob.objects.bgc" xmlns:ns2="urn:v4.billingordermanagement.cob.services.bgc">
        <ns1:customerIdentifier>
--Currently generated XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:requestDataSubmitBillingOrderType xmlns:ns2="urn:v4.requestsubmitbillingorder" xmlns:ns1="urn:v4.billingordermanagement">
    <ns1:billingOrder>
        <ns2:customerIdentifier>

Please see that this is little complex XML that the JAXB itself has created 72 classes in total. and some inner elements in the xmls are also expected to have namespaces. But here as of now in my result only the root element has the namespace getting populated and not the sub elements
java jaxb xml-namespaces
1个回答
0
投票

名称空间似乎是正确的。

这里是预期的输出:

<ns1:RequestDataSubmitBillingOrder xmlns:ns1="urn:v4.billingordermanagement.cob.services.bgc">
    <ns2:billingOrder xmlns:ns1="urn:v4.requestsubmitbillingorder.cob.objects.bgc" xmlns:ns2="urn:v4.billingordermanagement.cob.services.bgc">
        <ns1:customerIdentifier>
        </ns1:customerIdentifier>
    </ns1:billingOrder>
</ns1:RequestDataSubmitBillingOrder>

元素“ RequestDataSubmitBillingOrder”属于名称空间“ urn:v4.billingordermanagement.cob.services.bgc”。

元素“ billingOrder”属于命名空间“ urn:v4.billingordermanagement.cob.services.bgc”(因为命名空间声明在元素级别被覆盖)。

这里是当前输出:

<ns1:requestDataSubmitBillingOrderType xmlns:ns2="urn:v4.requestsubmitbillingorder.cob.objects.bgc" xmlns:ns1="urn:v4.billingordermanagement.cob.services.bgc">
    <ns1:billingOrder>
        <ns2:customerIdentifier>
        </ns2:customerIdentifier>
    </ns1:billingOrder>
</ns1:requestDataSubmitBillingOrderType>

元素“ requestDataSubmitBillingOrderType”属于名称空间“ urn:v4.billingordermanagement.cob.services.bgc”。

元素“ billingOrder”属于名称空间“ urn:v4.billingordermanagement.cob.services.bgc”。

问题似乎仅在于根元素名称:RequestDataSubmitBillingOrder与requestDataSubmitBillingOrderType。

错误的名称错误方法是按如下方式更改注释(因为当您重新生成JAXB类时,更改将被覆盖):

@XmlRootElement(name="RequestDataSubmitBillingOrder", namespace = "urn:v4.billingordermanagement.cob.services.bgc") 

正确的方法是提供JAXB绑定文件,该文件将在将xsd文件转换为JAXB类时自定义类的名称。

© www.soinside.com 2019 - 2024. All rights reserved.