gpt4 book ai didi

java - 接口(interface)和 jaxb

转载 作者:行者123 更新时间:2023-12-01 04:17:26 25 4
gpt4 key购买 nike

我将向您展示我的代码,它会更清晰:

@XmlRootElement
FilePollerConf{

ArrayList<Directory> directoriesList = new ArrayList<Directory>();

}

Directory{

ArrayList<Match> matchList = new ArrayList<Match>();

}

Match{

ArrayList<Event> eventsList = new ArrayList<Event>();

}

Event{

ArrayList<IAction> actionsList = new ArrayList<IAction>();

}

IAction{

void send();

}

重点是,当我尝试使用 jaxb 解码时,出现错误:

IAction is an interface, and JAXB can't handle interfaces.

所以我寻找@XmlAdapter,但我没有看到像我这样的用例,所以我真的不知道我是否可以使用它?我继续搜索,但如果您有想法,我们会很欢迎!事实上我已经有了我的 xml,我希望 jaxb 生成它(给你 xml):

<?xml version="1.0" encoding="utf-8"?>
<FilePollerConfiguration>
<Directory path="C://Users//jmoreau040612//Desktop//Old">
<Match pattern="*.xml">
<Event name="create">
<FTPSend>
<FTPServer>toto.com</FTPServer>
<FTPPort>21</FTPPort>
<Login>toto</Login>
<Password>titi</Password>
<destinationPath>/root/src</destinationPath>
</FTPSend>
</Event>
</Match>
<Match pattern="*.csv">
<Event name="modify">
<MailSend>
<Name>MailSend</Name>
<SMTPServer>smtp.fr.gric</SMTPServer>
<SMTPPort>25</SMTPPort>
<MailTo>toto@rock.com</MailTo>
<MailFrom>titi@rock.com</MailFrom>
<Subject>tata</Subject>
<Body>blabla</Body>
</MailSend>
</Event>
</Match>
</Directory>
<Directory path="C://Users//jmoreau040612//Desktop//New">
<Match pattern="*.csv">
<Event name="create">
<ServerToServer>
<location>ergrthrhdrth</location>
<destination>ergergeg</destination>
</ServerToServer>
</Event>
</Match>
<Match pattern="*.csv">
<Event name="delete">
<SFTPSend>
<SFTPServer>toto.sgcib.com</SFTPServer>
<SFTPPort>21</SFTPPort>
<Login>toto</Login>
<Password>titi</Password>
<destinationPath>/root/src</destinationPath>
<PrivateKeyFile>C://Desktop/privatekey.prk</PrivateKeyFile>
</SFTPSend>
</Event>
</Match>
</Directory>
</FilePollerConfiguration>

重点是我的结构不会总是相同,所以我可以使用 jaxb 吗?

最佳答案

您可以使用@XmlElement注释来指定接口(interface)字段/属性的实现类型。

@XmlAccessorType(XmlAccessType.FIELD)
public class Event{

@XmlElement(type=ActionImpl.class)
ArrayList<IAction> actionsList = new ArrayList<IAction>();

}

了解更多信息

关于java - 接口(interface)和 jaxb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19291922/

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