我为一些SOAP服务做了一个REST包装器。现在我想添加HATEOAS支持,但是对于资源,我使用自动创建的类和maven-jaxb2-plugin
库。例如,自动生成的类BookDetails
:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BookDetails", propOrder = {
"id",
"name",
"title",
"author"
})
public class BookDetails {
@XmlElement(required = true)
protected String id;>
...
}
我无法从ResourceSupport
扩展该类,因为如果.wsdl
更改了BookDetails
类,则会重新创建并覆盖。此外,如果创建的新类从BookDetails
延伸到BookDetailsResource
,那么我无法从ResourceSupport
延伸。任何想法或以前的问题类似吗?
如果有人需要实现它,那么这是一个如何创建包装器的教程。 https://howtodoinjava.com/spring/spring-boot/spring-soap-client-webservicetemplate/
答案 0 :(得分:0)
与其尝试创建一个可以同时映射到两者的域模型,不如为SOAP和HAL创建单独的域模型可能更好。
这样,您可以使用Spring Web Services部署其契约优先方法,并生成基于WSDL的BookDetails
域对象。
您可以在此处定义REST控制器,以及GET / POST / PUT等各种方法。
最后一步是定义一个利用您的REST控制器的ResourceAssembler<BookDetails, Resource<BookDetails>>
,最终将基于SOAP的BookDetails
对象转换为包含相关链接的HAL表示形式。
查看https://spring.io/guides/tutorials/rest/,了解如何构建应用程序的REST部分,然后将SOAP调用视为REST控制器可以调用的基础服务层。