我需要编写一个弹簧批来调用Web服务有任何例子

RAJ*_*RAJ 1 web-services spring-batch

我必须编写一个批处理(读取/处理/写入)来调用Web服务(SOAP)作为输入,然后处理结果(项目列表)以最终将它们写入数据库.我如何调用Web服务

Nen*_*zic 6

我们做了类似的事情,这是我们的方法:

SOAP部分:

  1. 我们使用WebServiceTemplate与SOAP服务器和方法进行通信,marshalSendAndReceive该服务器和方法基本上将xml请求发送到某个url并返回xml响应
  2. 我们使用Spring重试机制,因为SOAP通信并不总是可靠的,所以我们设置了每次SOAP调用至少5次,直到我们放弃并失败作业执行
  3. 我们Jaxb2Marshaller用于序列化和反序列化以及从wsdl生成POJO

弹簧批次部分:

  1. 我们实现自己ItemReader在哪里@BeforeStep获取要从SOAP服务器处理的项目列表(我不确定这是否是最好的方法,但是具有足够强大的重试机制),我们@Override的read方法没什么特别的,它是走过来的列表直到筋疲力尽
  2. 在处理器中,我们将SOAP项目转换为DB实体
  3. 在编写器中,我们将项目保存到我们自己的DB中

示例: 项目阅读器正在使用SoapClient哪个是我的Web模板包装器,它正在进行soap调用,解组响应和返回项目列表.

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)