gpt4 book ai didi

java - JAXB 和继承

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:48 25 4
gpt4 key购买 nike

我有这个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 应该是什么样子。

编码(marshal)示例

编码(marshal)演示

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 和继承的内容:

关于java - JAXB 和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23222179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com