gpt4 book ai didi

integration-testing - spring ws MockWebServiceClient 响应的有效负载源

转载 作者:行者123 更新时间:2023-12-02 06:48:53 24 4
gpt4 key购买 nike

我正在使用 spring-ws 2.0.2 和 spring-ws-test 来运行 SOAP 服务器的集成测试。我使用的方法与 http://static.springsource.org/spring-ws/site/apidocs/org/springframework/ws/test/server/MockWebServiceClient.html 中的方法完全相同

这是我正在运行的代码,为了简洁起见,省略了预期的响应 XML,因为它与问题无关。

我希望能够在响应负载中看到 xml,但不知道如何访问它。如果我在设置响应后设置断点并检查它,我可以看到它有一个 SaajSoapMessage 类型的私有(private) messageContext.response,但我不知道如何访问它,或者是否有更好的方法来查看响应 XML。

package com.example.integration;                                                                     

import static org.springframework.ws.test.server.RequestCreators.*;
import static org.springframework.ws.test.server.ResponseMatchers.*;
import static org.testng.AssertJUnit.*;

import javax.xml.transform.Source;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.ws.test.server.MockWebServiceClient;
import org.springframework.ws.test.server.ResponseActions;
import org.springframework.xml.transform.StringSource;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

@ContextConfiguration(locations={"/transaction-test-context.xml", "/spring-web-services-servlet.xml"})
public class BaseWebServiceIntegrationTest {

@Autowired
private ApplicationContext applicationContext;

private MockWebServiceClient mockClient;

@BeforeClass(groups="integration")
public void createClient() {
assertNotNull("expected applicationContext to be non-null", applicationContext);
mockClient = MockWebServiceClient.createClient(applicationContext);
}

@Test(groups="integration")
public void proofOfConcept() {

assertNotNull("expected mockClient to be non-null", mockClient);

Source requestPayload = new StringSource(
"<s0:ListDevicesRequest " +
"xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' " +
"xmlns:xs='http://www.w3.org/2001/XMLSchema' " +
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +
"xmlns:s0='urn:com:example:xmlschema:service:v1.1:DeviceManager.xsd'>" +
"<s0:MacID>66:bb:be:ee:00:00:01:00</s0:MacID>" +
"</s0:ListDevicesRequest>"
);

Source responsePayload = new StringSource("<!-- response omitted for the post, not relevant -->");

ResponseActions response = mockClient.sendRequest(withPayload(requestPayload));
response.andExpect(noFault())
.andExpect(payload(responsePayload));

}
}

编辑以根据要求添加应用程序上下文文件。我们有一些,但下面的是肥皂专用的。

<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<sec:global-method-security pre-post-annotations="disabled" jsr250-annotations="disabled" />

<tx:annotation-driven/>
<context:component-scan base-package="com.example.integration"/>
<context:component-scan base-package="com.example.signal"/>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

<bean id="faultService" class="com.example.webservice.fault.FaultService"/>

<bean id="soapDeviceService" class="com.example.webservice.device.SoapDeviceServiceImpl"/>


<!-- 1.1 Endpoints -->
<bean id="deviceManagerEndpoint_v1_1" class="com.example.webservice.spring.DeviceManagerEndpoint">
<property name="soapDeviceService" ref="soapDeviceService"/>
</bean>



<bean class="com.example.webservice.spring.PayloadMethodMarshallingEndpointAdapter">
<property name="marshaller" ref="marshaller"/>
<property name="unmarshaller" ref="marshaller"/>
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="mtomEnabled" value="false"/>
<property name="contextPath" value="com.example.xmlschema.service.v1_0.devicemanager"/>
</bean>

<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
<property name="interceptors">
<list>
<bean class="com.example.webservice.interceptor.LoggingInterceptor"/>
<ref bean="validatingInterceptor"/>
</list>
</property>
</bean>

<bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="schemas">
<list>
<value>/WEB-INF/wsdl/*Types_v*.xsd</value>
</list>
</property>
<property name="validateRequest" value="true"/>
<property name="validateResponse" value="true"/>
</bean>

<bean class="com.example.webservice.spring.SpringWebserviceFaultMappingExceptionResolver">
<property name="order" value="1"/>
<property name="marshaller" ref="marshaller"/>
</bean>

</beans>

最佳答案

好吧,晚了 4 年,但这是我的答案,我对此感到既自豪又感到羞愧:-

.andExpect(
new ResponseMatcher()
{
@Override
public void match(WebServiceMessage request, WebServiceMessage response)
throws IOException, AssertionError
{
response.writeTo(System.out);
}
})

从 Java 8 开始:

.andExpect((request, response) -> response.writeTo(System.out))

关于integration-testing - spring ws MockWebServiceClient 响应的有效负载源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com