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

时间:2015-03-25 18:42:14

标签: web-services spring-batch

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

1 个答案:

答案 0 :(得分:6)

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

SOAP部分:

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

    1. 我们实现了自己的ItemReader,其中@BeforeStep我们从SOAP服务器获取要处理的项目列表(我不确定这是否是最佳方法,但是具有足够强大的重试机制) ,我们的@Override读取方法没有什么特别之处,它一直在列表中,直到用尽
    2. 在处理器中,我们将SOAP项目转换为数据库实体
    3. 在作家中,我们将项目保存到我们自己的数据库
    4. 示例: 项目阅读器正在使用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;
          }
      }