微软使用Spring Boot来消费SOAP

时间:2017-10-25 14:20:55

标签: java rest spring-boot soap microservices

我需要创建一个首先使用SOAP的REST服务。最好的方法是什么?

我想使用Spring Boot创建一个微服务,但对于有经验的人我有一些问题:

  • 我应该使用哪些其他架构或技术 (带弹簧靴)?
  • 这是否有标准的技术堆栈?
  • 我应该注意哪些陷阱?

3 个答案:

答案 0 :(得分:0)

我应该使用哪些其他架构或技术(使用spring boot)?

  

我的回答是,如果您只想提供RESTful服务   没有Spring Cloud,那么我认为你可以参考以下2   Spring官方网站上的教程实现了这个目标:

     

Building a RESTful Web Service
  Consuming a SOAP web service

是否有标准的技术堆栈?

  

目前,我建议您使用Spring Boot作为首选。因为它们是网络上丰富的资源,并且确实减少了开发工作量。

我应该注意哪些陷阱?

  

如果您最终选择Spring Boot,请熟悉其组件,您可以从Guides开始实现它的工作原理。或者你可以将Spring Boot与传统的Spring框架混合起来。

答案 1 :(得分:0)

在我们的项目中有类似的情况,我们使用弹簧组件。据我所知,您希望打开一个最可能接受json对象的REST端点,并且您希望在该请求中发出soap Web服务请求,然后您希望返回包含soap响应信息的响应。要发出soap请求,可以使用spring Web服务 - WebServiceTemplate。它会将您的对象编组为xml并为您提供soap请求。当然你可以使用一些其他的web服务框架,比如apache cxf,它可能最适合某些特殊情况,但我会首先尝试使用一个来自Spring系列的框架,同时使用Spring。您应该在webservicetemplate对象上设置超时值,以便在外部系统运行不正常或网络出现问题时不要等待太长时间。因为它直接影响您的系统性能。此外,我建议您实施断路器模式,以使您的系统更加健壮。您应始终将系统性能与集成的其他系统隔离开来,在这种情况下,您可以通过执行上述操作来实现此目的。

答案 2 :(得分:0)

据我所知,您应该使用Maven构建的Spring启动应用程序。 为了向SOAP Web服务发送REST调用并返回JSON响应,您需要按顺序执行所有这些步骤:

  1. 业务逻辑:将JSON字段(如headers,query-param,body变量)映射到XML请求必填字段(使用pojo类或object-mapper)原因:由于SOAP端点只接受XML请求

  2. Service Broker Logic:导入“org.springframework.web.client.RestTemplate”并使用

    **ResponseEntity<String> responseEntity=RestTemplate.exchange(endPointURL, HttpMethod.GET/POST/PUT/DELETE, HttpEntity/headers, uriVariables)**
    
    **endpointURL** -- SOAP End point URL ,that the REST service has to consume.
    
     **HTTPMethod** -- Method Type such as GET ,PUT ,POST ,DELETE etc.
    
     **HTTPEntity** -- Soap requires for mandatory sender/headers/{a}.Make sure that you set your header name and value as key-Valye pair in HTTP headers.
    
     **uriVariables** -- (Object... urivariables) such as String.class ,Integer.class
    
     You should also put the **connectTimeout** ,**isSSLDisabled**,**responseCached** elements while generating request to restTemplate.
    
  3. responseEntity.getBody()是解组后的XML响应。可以使用mapper提取它。

         XML_BaseResponse response=mapper.readValue(responseEntity.getBody(), XML_BaseResponse.class);
    
  4. 业务逻辑:从XML_BaseResponse中提取必要的字段并使用setter或getter的函数,在响应中设置必填字段。

         baseResponse.setName(xml_baseResponse.getPersonsName());
         baseResponse.setAddress(xml_baseResponse.getAddress());
         baseResponse.setCity(xml_baseResponse.getcityName());