簡體   English   中英

JAXB和繼承

[英]JAXB and Inheritance

我有這個xsd:

    <?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.example.org/XsdMath2" 
        xmlns:tns="http://www.example.org/XsdMath2" 
        elementFormDefault="qualified">


    <complexType name="Utilisateur">
        <complexContent>
            <extension base="tns:TraitementDTO">
                <sequence>
                    <element name="nomUtilisateur" type="string"></element>
                    <element name="passUtilisateur" type="string"></element>
                </sequence>
            </extension>
        </complexContent>
    </complexType>

 <complexType name="TraitementDTO">
        <sequence>
            <element name="CodeTraitement" type="int"></element>
        </sequence>
    </complexType>


    <element name="Create" type="tns:TraitementDTO"></element>
</schema>

我想知道我的類“ Utilisateur”上的數據,但是有我的xml:

 <Create xmlns="http://www.example.org/XsdMath2">
       <TraitementDTO>
          <CodeTraitement>0</CodeTraitement>
            <Utilisateur>
               <nomUtilisateur>nomok</nomUtilisateur>
               <passUtilisateur>passok</passUtilisateur>
             </Utilisateur>
       </TraitementDTO>
    </Create>

我無法使(實例化)我的類“ TraitementDTO”,或者我無法對我的類“ Utilisateur”或Cast使用函數。 但它不起作用。 我的代碼java:

 StringReader sr = new StringReader(this.message);
    JAXBContext context = JAXBContext.newInstance("ActionMathML");
    Unmarshaller decodeur = context.createUnmarshaller();
     msgObject = decodeur.unmarshal(sr);  

         System.out.println(" action" + msgObject);

     if (msgObject instanceof TraitementDTO)
    {
         System.out.println(" action");
    }

我如何獲取數據,因為我嘗試了一些解決方案但無法正常工作。 我的Xsd是否正確檢索我的數據? 問候

您的XML與您的XML模式不匹配。 如果填充對象模型然后將其編組,您將看到XML的外觀。

元帥的例子

MarshalDemo

package ActionMathML;

import javax.xml.bind.*;

public class MarshalDemo {

    public static void main(String[] args) throws Exception {
        JAXBContext context = JAXBContext.newInstance("ActionMathML");

        ObjectFactory objectFactory = new ObjectFactory();

        Utilisateur utilisateur = objectFactory.createUtilisateur();
        utilisateur.setCodeTraitement(0);
        utilisateur.setNomUtilisateur("nomok");
        utilisateur.setPassUtilisateur("passok");

        JAXBElement<TraitementDTO> jaxbElement = objectFactory.createCreate(utilisateur);

        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(jaxbElement, System.out);
    }

}

產量

以下是基於XML模式的XML外觀。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Create xmlns="http://www.example.org/XsdMath2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Utilisateur">
    <CodeTraitement>0</CodeTraitement>
    <nomUtilisateur>nomok</nomUtilisateur>
    <passUtilisateur>passok</passUtilisateur>
</Create>

解組例子

input.xml中

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Create xmlns="http://www.example.org/XsdMath2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Utilisateur">
    <CodeTraitement>0</CodeTraitement>
    <nomUtilisateur>nomok</nomUtilisateur>
    <passUtilisateur>passok</passUtilisateur>
</Create>

UnmarshalDemo

package ActionMathML;

import java.io.File;
import javax.xml.bind.*;

public class UnmarshalDemo {

    public static void main(String[] args) throws Exception {
        JAXBContext context = JAXBContext.newInstance("ActionMathML");

        Unmarshaller unmarshaller = context.createUnmarshaller();
        File xml = new File("src/ActionMathML/input.xml");
        JAXBElement<TraitementDTO> jaxbElement = (JAXBElement<TraitementDTO>) unmarshaller.unmarshal(xml);

        TraitementDTO traitementDTO = jaxbElement.getValue();
        System.out.println(traitementDTO.getCodeTraitement());

        if(traitementDTO instanceof Utilisateur) {
            Utilisateur utilisateur = (Utilisateur) traitementDTO;
            System.out.println(utilisateur.getNomUtilisateur());
            System.out.println(utilisateur.getPassUtilisateur());
        }
    }

}

產量

0
nomok
passok

欲獲得更多信息

我已經在我的博客上寫了有關JAXB和繼承的更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM