当前位置: 首页 > 知识库问答 >
问题:

Spring Boot:Mocking SOAP Web服务

翟嘉志
2023-03-14

谢了!

共有1个答案

寇靖
2023-03-14

我使用WireMock来模拟外部SOAP服务器依赖项。

测试类本身使用@springboottest注释来确保具有与实际环境相似的上下文。

private WireMockServer wireMockServer = new WireMockServer(wireMockConfig().port(8089));

@Autowired
SoapClient soapClient;

@Test
@DisplayName("Retrieve SOAP message")
void retrieveMessage() {
    wireMockServer.start();
    WireMock.configureFor("localhost", 8089);
    WireMock.reset();
    stubFor(post(urlEqualTo("/ECPEndpointService"))
            .willReturn(
                    aResponse()
                            .withStatus(200)
                            .withHeader("Content-Type",
                                    "Multipart/Related; boundary=\"----=_Part_112_400566523.1602581633780\"; type=\"application/xop+xml\"; start-info=\"application/soap+xml\"")
                            .withBodyFile("RawMessage.xml")
            )
    );
    soapClient.retrieveActivations();
    wireMockServer.stop();
}

rawmessage.xml的内容是消息响应。在我的例子中,它是一个多部分消息(简化):

------=_Part_112_400566523.1602581633780
Content-Type: application/xop+xml; charset=utf-8; type="application/soap+xml"

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
    <env:Header/>
    <env:Body>
        <ns5:ReceiveMessageResponse xmlns:ns3="http://mades.entsoe.eu/" xmlns:ns4="http://mades.entsoe.eu/2/" xmlns:ns5="http://ecp.entso-e.eu/" xmlns:ns6="http://ecp.entsoe.eu/endpoint">
        <receivedMessage>
            ...
        </receivedMessage>
        <remainingMessagesCount>0</remainingMessagesCount>
        </ns5:ReceiveMessageResponse>
    </env:Body>
</env:Envelope>
------=_Part_112_400566523.1602581633780
Content-Type: application/octet-stream
Content-ID: <7a2f354f-dc52-406b-a4b1-9d89aa29cb2d@null>
Content-Transfer-Encoding: binary

<?xml version="1.0" encoding="UTF-8"?>
<edx:Message
    xmlns:edx="http://edx.entsoe.eu/internal/messaging/message"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <edxMetadata>
        ...
    </edxMetadata>
    <content v="PEFjdGl2YXRpb25"/>

</edx:Message>
------=_Part_112_400566523.1602581633780--
 类似资料:
  • 在 Serenity 中,服务终结点是 ASP.NET MVC 控制器的一个子类。 这是 Northwind 的 OrderEndpoint 摘录: namespace Serene.Northwind.Endpoints { [RoutePrefix("Services/Northwind/Order"), Route("{action}")] [ConnectionKey("N

  • 服务发现服务[架构概述]。 { "cluster": "{...}", "refresh_delay_ms": "{...}" } cluster (required, object) 承载服务发现服务的上游群集的标准定义。该群集必须实现和运行SDS HTTP API的REST服务。 refresh_delay_ms (required, integer) 每次访问SDS群集的API延迟

  • 服务器端提供了比较多的关于推送的 API,包括广播,多播和单播方式的推送,还有超时,心跳,推送事件等设置。 Timeout 字段 该字段用于设置推送空闲超时。默认值为 120 秒,即 2 分钟。 当服务器发布了推送主题后(后面会专门介绍推送),客户端会跟服务器端保持一个长连接,如果达到超时时间,仍然没有任何消息推送给客户端,则返回 nil,此时,如果客户端仍然在线的话,则会立即再次发送获取推送主题

  • 主要内容:1.RPC 架构,2.同步调用与异步调用,3.流行的 RPC 框架,4.HTTP 服务,5.总结1.RPC 架构 2.同步异步调用 3.流行的 RPC 框架 1.RPC 架构 先说说 RPC 服务的基本架构吧。我们可以很清楚地看到,一个完整的 RPC 架构里面包含了四个核心的组件。 Client Server Client Stub Server Stub(这个Stub大家可以理解为存根) 客户端(Client),服务的调用方。 服务端(Server),真正的服务提供者。 客户端存根,

  • 主要内容:1.RPC 架构,2.同步调用与异步调用,3.流行的 RPC 框架,4.HTTP 服务,5.总结1.RPC 架构 先说说 RPC 服务的基本架构吧。我们可以很清楚地看到,一个完整的 RPC 架构里面包含了四个核心的组件。 Client Server Client Stub Server Stub(这个Stub大家可以理解为存根) 客户端(Client),服务的调用方。 服务端(Server),真正的服务提供者。 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后

  • 服务定义了访问后端Pod的访问方式。 服务(Service)定义了访问后端Pod的访问方式,服务的详细介绍内容,请参考kubernets官方文档-Service。目前支持两种访问方式。 内部:即Service的ClusterIP模式,自动分配集群内部IP地址,仅供集群内部访问。 外部:即Service的Loadbalance模式,配合外部 云联壹云 提供的负载均衡服务使用,通过负载均衡实例的服务地

  • 如何包含Eureka服务器 要在项目中包含Eureka服务器,请使用组org.springframework.cloud和工件id spring-cloud-starter-eureka-server的启动器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面。 如何运行Eureka服务器 示例eureka服务器; @SpringBoot

  • 在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'