我使用jaxb生成XML请求。以下是所有代码详细信息。我也尝试过package-info的东西,但它对我没用。就像我想在每个对象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)
}
答案 0 :(得分:2)
我想通过@MichaelKay向您推荐以下答案:
这不是同一个问题,但答案是一样的:
在XML应用程序中,原则应该是:
(a)接收应用程序不应该关心如何编写XML的无关紧要的词法细节。 (实现此目的的最佳方法是使用可敬的XML解析器来读取XML。)
(b)编写应用程序应该可以自由使用他们认为方便的任何词汇约定。 (这意味着您可以使用任何可敬的序列化库来编写XML。)
基本上,你不应该在意。如果这样做,那么处理XML的方式就会出现严重问题。无论如何声明命名空间都无关紧要。为什么要这样?
要回答您的问题,标准JAXB无法做到这一点。