我们在包含嵌入式Jetty服务器的应用程序中运行了遗留系统的组件。这个遗留系统有几个JavaBeans (DTO),它们包含我们的HTTP客户端所需的信息。这些bean没有任何JSON/XML序列化注释,我们不想对遗留系统代码进行任何修改。我们也不希望我们的客户端依赖于旧的遗留系统或它的JavaBeans。
最后,这些bean之间有许多复杂的引用,以及彼此的集合。一些bean的对象图具有循环和非平凡的继承,因此简单的JSON或XML序列化会导致循环堆栈溢出错误。
我想找个好办法来解决这个问题。
一个想法是在XSD中描述所有这些bean,并使用它生成具有所需JAXB注释的新类,用于序列化为JSON/XML。我们将从遗留系统中的对象结构实例中手工组装带有这些新bean的对象结构,然后能够通过HTTP将其发送到仅依赖于新类的客户端。但这似乎是很多工作。
另一个想法是对每个遗留bean进行子类,以添加所需的XML/ JAXB注释。这可能比编写XSD更容易吗??但是,我们仍然需要从遗留bean的对象图中组装bean实例的新对象图。并且它将对遗留JavaBeans的客户端具有运行时依赖关系。
我搜索了一些关于从现有Java类自动生成XSD的内容。看起来这方面有一些工具,但是它需要我们修改XSD,所以当生成新的类时,它将具有所需的注释。
有更好的办法吗?
发布于 2014-08-28 09:27:38
JAXB不需要注释。它可以在外部配置。
考虑:http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html
此外,我发现在许多情况下,默认的(即没有注释)工作得很好。因此,您可能不会有一个很大的负担引导带您的代码。
如果您使用的是一个常见的“根”对象,那么一个XmlRootElement启动整个引擎,即使这也不是完全必需的。
您需要小心bean中的循环图,但是使用JAXB也可以对这些图进行管理。
https://stackoverflow.com/questions/25553113
复制相似问题