Java 使用JaxB解析类层次结构

Java 使用JaxB解析类层次结构,java,xml-parsing,jaxb,Java,Xml Parsing,Jaxb,我有等级制度 interface Intf {} Class A implements Intf{} Class B implements Intf{} 现在,我使用上面的classa和classb使用JaxB的elp读取两个不同的XML文件。有谁能建议我如何在JaxB中配置和使用上述结构吗?对于您的用例,接口没有考虑在内。如果您想将A和B映射到不同的XML结构,您可以继续这样做,下面我将用一个示例演示 JAVA模型 IntF A B 演示代码 演示 输出 你好,世界 您能提供一些其他信

我有等级制度

interface Intf {}

Class A implements Intf{}

Class B implements Intf{}

现在,我使用上面的
classa
classb
使用JaxB的elp读取两个不同的XML文件。有谁能建议我如何在JaxB中配置和使用上述结构吗?

对于您的用例,接口没有考虑在内。如果您想将
A
B
映射到不同的XML结构,您可以继续这样做,下面我将用一个示例演示

JAVA模型

IntF

A

B

演示代码

演示

输出


你好,世界

您能提供一些其他信息吗?现在的问题是,接口没有被考虑进去,因为它将被忽略。另外,您将使用哪个JAXB提供程序?F.e.Jackson支持良好的多态类型处理,它是大量技术的典型JAXB提供者:CXF、RestEasy等。@n1ckolas-Jackson不是JAXB(JSR-222)提供者。虽然有几个JAX-RS实现使用Jackson作为JSON绑定的方法,但我不知道有哪一个使用它进行XML绑定。请检查这个项目:我不是说它是默认的,而是说它是典型的,也就是说,非常广泛,因为它非常快,而且可以自定义。特别是,它对多态类型有很好的支持。F.e.我个人将Jackson用于JSON和XML REST-API,并使用相同的注释集和重用相同的JAX-RS服务(Apache CXF)。嗨,Blaise,在
类A
中,我有另一个类SubA,在这个类中有属性。B类的情况也一样。这个配置我不能按照你的建议去做。否则我该怎么办?@Navnath-你能编辑你的问题以包含模型的简化版本吗?我已经扩展了这个问题
public interface IntF {

    public String getFoo();

    public void setFoo(String foo);

}
import javax.xml.bind.annotation.*;

@XmlRootElement
public class A implements IntF {

    private String foo;

    @Override
    @XmlElement(name="renamed-foo")
    public String getFoo() {
        return foo;
    }

    @Override
    public void setFoo(String foo) {
        this.foo = foo;
    }

}
import javax.xml.bind.annotation.*;

@XmlRootElement
public class B implements IntF {

    private String foo;

    @Override
    @XmlAttribute
    public String getFoo() {
        return foo;
    }

    @Override
    public void setFoo(String foo) {
        this.foo = foo;
    }

}
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(A.class, B.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        A a = new A();
        a.setFoo("Hello World");
        marshaller.marshal(a, System.out);

        B b = new B();
        b.setFoo("Hello World");
        marshaller.marshal(b, System.out);
    }

}