Java JAXB与继承
我有这个xsd:Java JAXB与继承,java,xml,jaxb,xsd,unmarshalling,Java,Xml,Jaxb,Xsd,Unmarshalling,我有这个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=
<?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>
我如何获取数据,因为我尝试了一些解决方案,但它不起作用。我的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);
}
}
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());
}
}
}
更多信息
我在我的博客上写了更多关于JAXB和继承的内容:
TraitementDTO
或usilimateur
元素。好的,但是您已经为TraitementDTO的类检索了数据,但我无法捕获我的类“usilimateur”的数据?这是不可能的吗?@Hann-我已经更新了我的答案,以显示usilizateur
类中的信息。请注意Create
元素上xsi:type
属性的值,该属性指定类型为usilizateur
。您太棒了,它正在工作,非常感谢。您有一位JAxb方面的专家:)。谢谢布莱斯
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 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>
<?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>
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