我的项目正在与SOAP Web服务进行通信,并且有一堆来自wsdl
文件的自动生成的类。
当我进行webservice调用时,我想将响应中的信息保存到数据库中,但我想尽可能少地编写样板代码,并且我不想复制所有属性,getter和setter ,来自webservice类。
我想做的事情是这样的(过于简化):
WebserviceClass[] foo = WebserviceCall.getFoos();
for (WebserviceClass bar : foo){
db.save(bar);
}
我的项目是在Spring Boot中,所以我一直在看Spring Data,Hibernate等,但我找到的所有解决方案都要求我编写很多自己的类,然后从Webservice类中实例化(这需要一个很多重复的属性,getter和setter)。
有没有办法从自动生成的类或wsdl文件构建架构?我可以编写映射而不必基本上重写所有的Web服务类吗?
这似乎是一个已解决的问题,但我还没有找到解决方案。有什么我想念的吗?什么是最佳实践?
答案 0 :(得分:0)
您可以使用@AttributeOverride扩展生成的类并使用JPA映射它们。
@Entity(name="EVENT")
@AttributeOverrides( { @AttributeOverride( name="id", column=@Column(name="EVENT_ID",nullable=false)),
@AttributeOverride( name="name", column=@Column(name="EVENT_NAME",nullable=false,length =50)),
@AttributeOverride( name="date", column=@Column(name="EVENT_DATE_UTC", nullable=false)),
@AttributeOverride( name="dateLocal", column=@Column(name="EVENT_DATE_LOCAL", nullable=false)),
@AttributeOverride( name="state", column=@Column(name="STATE",nullable=false)),
@AttributeOverride( name="operator", column=@Column(name="OPERATOR")),
@AttributeOverride( name="deviceId", column=@Column(name="DEVICE_ID",nullable=false)),
@AttributeOverride( name="deviceType", column=@Column(name="DEVICE_TYPE")),
@AttributeOverride( name="deviceDescription", column=@Column(name="DEVICE_DESCRIPTION")),
@AttributeOverride( name="description", column=@Column(name="EVENT_DESCRIPTION")),
@AttributeOverride( name="priority", column=@Column(name="PRIORITY",nullable=false)),
@AttributeOverride( name="attachment", column=@Column(name="ATTACHMENT")),
@AttributeOverride( name="mimeType", column=@Column(name="MIME_TYPE")),
})
public class DbClass extends GeneratedClass {
public DbClass(GeneratedClass generatedClass) {
this.setName(generatedClass.getName());
this.setDateLocal(generatedClass.getDateLocal());
...
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Override
public long getId() {
return super.getId();
}
public void setId(long id) {
super.setId(id);
}
然后在DbClass上使用spring数据存储库:
springDataRepository.save(new DbClass(generatedClass));
这不是一个非常干净的方法,但它的工作原理。