gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:39:51 26 4
gpt4 key购买 nike

我有多个带有类似 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 例如,因为这些类没有实现接口(interface)。

有没有办法动态定义包名称?

最佳答案

也许您可以使用 JAXB 绑定(bind)文件将部分 XSD 生成到某个包。

下面显示了从命名空间到包的绑定(bind)。根据 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>

关于java - 在两个不同的 JAVA 包下使用相同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44560789/

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