Какими должны быть аннотации jaxb для этого XML-файла? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть полезная нагрузка XML-файла, которую я хочу разархивировать с помощью jaxb, я создал класс pojo для демаршаллинга и определил атрибуты и элементы xml для этого pojo, но я немного запутался в пространствах имен,как их комментировать?

Мой xml-файл:

<ns1:ContractLinkEvent xmlns:ns0="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB" xmlns:ns1="http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB">

<Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

</Header>

<ContractLink xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<ContractLinkId>1509148</ContractLinkId>

<BillingProfile>

<BillingProfileId>173886</BillingProfileId>

<BillingProfileCode xsi:nil="true"/>

</BillingProfile>

</ContractLink>

</ns1:ContractLinkEvent>

Мой Pojs с комментариями в Jaxb:

@XmlRootElement(name = "ContractLinkEvent", namespace="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB")
@XmlAccessorType(XmlAccessType.FIELD)
public class ContractLinkPojo { 

    @XmlElement(name="Header")
    private String Header;

    @XmlElement(name="ContractLink")
    private String ContractLink;

.,,продолжается

Я получаю следующее исключение во время демаршаллинга:

java.io.IOException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 1; unexpected element (uri:"http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB", local:"ContractLinkEvent"). Expected elements are (none)]

Не думаю, что я определил пространства имен правильно, потому что я еще не определил пространства имен как i 'все еще в замешательстве, есть идеи?

РЕДАКТИРОВАТЬ: Это мой маршрут для unmarshalling

rest("/readXml")
    .consumes("application/xml")
    .post()
    .to("direct:xmlread");

    from("direct:xmlread").streamCaching()
    .doTry().unmarshal(xmlDataFormat)
    .process(readAndInsertXml)
    .to("mock:result").end();
}

1 Ответ

0 голосов
/ 20 октября 2018

Пространства имен похожи на имена пакетов в Java.Вы используете это, чтобы иметь уникальное имя для создаваемых вами элементов XML, чтобы они не конфликтовали с другими элементами XML.Вы можете определить пространство имен XML по умолчанию как:

xmlns="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB"

Вы можете определить несколько пространств имен XML с префиксами как:

   xmlns:ns0="..." 
   xmlns:ns1="..."

В приведенных выше ns0 и ns1 - префиксы, которые вы создали.

В вашем xml вы не определили пространство имен по умолчанию.Итак, я думаю, вы пытаетесь использовать префиксы пространства имен ns0 и ns1 для идентификаторов элементов.В таком случае вы использовали ns1 для ContractLinkElement, но не

, или что-либо еще.Однако ns0 нигде не используется и, если не требуется, вы можете удалить это.Пожалуйста, убедитесь, что это именно то, что вы намеревались сделать.

Кроме того, нет конечного тега:

<ns1:ContractLinkEvent 
xmlns:ns0="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB" 
xmlns:ns1="http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB">
...