我必须编写一个批处理(读取/处理/写入)来调用Web服务(SOAP)作为输入,然后处理结果(项目列表)以最终将它们写入数据库。我如何调用Web服务
答案 0 :(得分:6)
我们做了类似的事情,这是我们的方法:
SOAP部分:
marshalSendAndReceive
进行通信,它基本上将xml请求发送到某个url并返回xml响应Jaxb2Marshaller
进行序列化和反序列化以及从wsdl生成POJO 春季批次部分:
ItemReader
,其中@BeforeStep
我们从SOAP服务器获取要处理的项目列表(我不确定这是否是最佳方法,但是具有足够强大的重试机制) ,我们的@Override
读取方法没有什么特别之处,它一直在列表中,直到用尽 示例:强>
项目阅读器正在使用SoapClient
这是我的Web模板包装器,它正在进行肥皂调用,解组响应和返回项目列表。
@Component
@StepScope
public class CustomItemReader implements ItemReader<SoapItem> {
private List<SoapItem> soapItems;
@Autowired
private SoapClient soapClient;
@BeforeStep
public void beforeStep(final StepExecution stepExecution) throws Exception {
soapItems = soapClient.getItems();
}
@Override
public SoapItem read() {
if (!soapItems.isEmpty()) {
return soapItems.remove(0);
}
return null;
}
}