Jaké by měly být JAXB anotace pro tento soubor XML?

hlasů
1

Mám xml souborů instalačních balíků, které chci unmarshal pomocí JAXB, jsem vytvořil třídu POJO pro unmarshalling a jsem definovány atributy XML a prvky v tomto POJO, ale já jsem trochu zmatená o jmenných prostorů, jak opatřit jim?

Můj 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>

Můj JAXB komentovaný POJO je:

@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;

, , , pokračuje

Začínám následující výjimce, zatímco unmarshalling:

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)]

Nemyslím si, že jsem definoval jmenných správně, protože i dosud definovány jmenné prostory jako i‘stále zmateni, nějaké nápady?

EDIT: To je moje směrování pro unmarshalling

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

    from(direct:xmlread).streamCaching()
    .doTry().unmarshal(xmlDataFormat)
    .process(readAndInsertXml)
    .to(mock:result).end();
}
Položena 20/10/2018 v 12:53
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Jmenné prostory se podobají zabalit jmen v Javě. Ho použít mít jedinečný název pro prvky XML, které vytvoříte tak, že nejsou v rozporu s jinými prvky XML. Můžete definovat výchozí obor názvů XML, jako jsou:

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

Můžete definovat více XML jmenný prostor s předponami jako jsou:

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

Ve výše uvedeném ns0 a NS1 jsou prefixy, které jste vytvořili.

Ve vašem xml, jste nedefinovali žádnou výchozí jmenný prostor. Takže, myslím, že se snažíte použít prefixů ns0 a NS1 identity prvky. V takovém případě jste použili NS1 pro ContractLinkElement ale ne <záhlaví>, <ContractLink> nebo cokoliv jiného. Nicméně, NS0 není použit kdekoliv a není-li to nutné, můžete odstranit, že. Zkontrolujte, zda to je to, co jste chtěli dělat.

Také neexistuje žádný končí tag:

<ns1:ContractLinkEvent 
xmlns:ns0="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB" 
xmlns:ns1="http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB">
Odpovězeno 20/10/2018 v 13:48
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more