有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在两个不同的JAVA包下使用相同对象的xml?

我有多个带有类似JAXB JAVA对象的包。java对象是从不同的XSD自动生成的,似乎具有相似的结构,但我不能假设没有差异,也不能将两个相似的XML文档封送到相同的java类,尽管它们有很多相似之处

我试图找到一种减少代码重复的方法,在从相似的对象但不同的包中获取数据时,不要为每个具有相同对象的包再次编写相同的代码

public void function1(JAXBElement documentJAXB)
{
    ObjType obj =  new ObjType ();

    // parse the document
    path.to.package1.Document doc = (path.to.package1.Document) documentJAXB.getValue();
    obj.setMsgid(doc.getFIToFIPmtStsRpt().getGrpHdr().getMsgId());
    obj.setCredtm(Util.getSqlDate(doc.getFIToFIPmtStsRpt().getGrpHdr().getCreDtTm()));
    ....
}

第二个函数将相同的行为应用于package2下的类似对象

public void function2(JAXBElement documentJAXB)
{
    ObjType obj =  new ObjType ();

    // parse the document
    path.to.package2.Document doc = (path.to.package2.Document) documentJAXB.getValue();
    obj.setMsgid(doc.getFIToFIPmtStsRpt().getGrpHdr().getMsgId());
    obj.setCredtm(Util.getSqlDate(doc.getFIToFIPmtStsRpt().getGrpHdr().getCreDtTm()));
    ....
}

有没有办法把这些代码结合起来?我想到了泛型,但它无法编译函数调用getFIToFIPmtStsRpt,例如,因为这些类没有实现接口

有没有办法动态定义包名


共 (1) 个答案

  1. # 1 楼答案

    也许可以使用JAXB绑定文件将生成的XSD的一部分生成到特定的包中

    下面显示了从命名空间到包的绑定。根据xsd结构的不同,您可能需要选择不同的内容(complextype、element等)

    <jaxb:bindings 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:version="2.1">
    <jaxb:bindings schemaLocation=" schemalocation here ">
        <jaxb:bindings node="//xs:schema[@targetNamespace=' namespace here ']">
            <jaxb:schemaBindings>
                <jaxb:package name=" packagename here " />
            </jaxb:schemaBindings>
        </jaxb:bindings>
    </jaxb:bindings>