Я использую 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>
Ниже мой родительский объектный класс Java JAXB
@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;
}
Ниже мой внутренний Java-класс объекта JAXB
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"acctChgRec"
})
@XmlRootElement(name = "CustomizedBundlesResponseMessage")
public class CustomizedBundlesResponseMessage {
@XmlElement(name = "AcctChgRec")
protected List<AcctChgRecType> acctChgRec;
}
Ниже мой класс объекта JAXB AcctChgRecType
@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)
}




Я хотел бы отослать вас к следующему ответу @MichaelKay:
Это не тот же вопрос, но это тот же ответ:
In XML applications the principle should be:
(a) Receiving applications shouldn't care about the insignificant lexical detail of how the XML is written. (The best way of achieving this is to use a respectable XML parser to read the XML.)
(b) Writing applications should be free to use whatever lexical conventions they find convenient. (Which means you can use any respectable serialization library to write the XML.)
В принципе, вам все равно. Если да, значит, что-то серьезно не так с тем, как вы обрабатываете XML. Не имеет значения, как объявлены пространства имен. Зачем это нужно?
Чтобы ответить на ваш вопрос, это невозможно со стандартным JAXB.