Use XMLUnit 2 for RequestMatcher and ResponseMatcher.
Implement newer versions of PayloadDiffMatcher and SoapEnvelopematcher based on XMLUnit 2. Deprecate the prior versions of these supporting types so they can be removed in a future release. XMLUnit 2 eases the testing of MockWebServiceServer. Resolves #1193.
This commit is contained in:
committed by
Greg L. Turnquist
parent
43b6ecf13f
commit
c39d3d1cf0
2
pom.xml
2
pom.xml
@@ -122,7 +122,7 @@
|
|||||||
<xmlsec.version>2.3.1</xmlsec.version>
|
<xmlsec.version>2.3.1</xmlsec.version>
|
||||||
<xml-schema-core.version>2.2.2</xml-schema-core.version>
|
<xml-schema-core.version>2.2.2</xml-schema-core.version>
|
||||||
<xmlunit1.version>1.6</xmlunit1.version>
|
<xmlunit1.version>1.6</xmlunit1.version>
|
||||||
<xmlunit.version>2.7.0</xmlunit.version>
|
<xmlunit.version>2.9.0</xmlunit.version>
|
||||||
<xws-security.version>3.0</xws-security.version>
|
<xws-security.version>3.0</xws-security.version>
|
||||||
<xom.version>1.2.5</xom.version>
|
<xom.version>1.2.5</xom.version>
|
||||||
<spring-asciidoctor-backends.version>0.0.3</spring-asciidoctor-backends.version>
|
<spring-asciidoctor-backends.version>0.0.3</spring-asciidoctor-backends.version>
|
||||||
|
|||||||
@@ -40,6 +40,12 @@
|
|||||||
<version>${xmlunit1.version}</version>
|
<version>${xmlunit1.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.xmlunit</groupId>
|
||||||
|
<artifactId>xmlunit-core</artifactId>
|
||||||
|
<version>${xmlunit.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-test</artifactId>
|
<artifactId>spring-test</artifactId>
|
||||||
@@ -76,4 +82,4 @@
|
|||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import org.springframework.ws.transport.WebServiceConnection;
|
|||||||
*/
|
*/
|
||||||
class MockSenderConnection implements WebServiceConnection, ResponseActions {
|
class MockSenderConnection implements WebServiceConnection, ResponseActions {
|
||||||
|
|
||||||
private final List<RequestMatcher> requestMatchers = new LinkedList<RequestMatcher>();
|
private final List<RequestMatcher> requestMatchers = new LinkedList<>();
|
||||||
|
|
||||||
private URI uri;
|
private URI uri;
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,10 @@ import javax.xml.transform.Source;
|
|||||||
|
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.ws.WebServiceMessage;
|
|
||||||
import org.springframework.ws.test.support.matcher.PayloadDiffMatcher;
|
|
||||||
import org.springframework.ws.test.support.matcher.SchemaValidatingMatcher;
|
import org.springframework.ws.test.support.matcher.SchemaValidatingMatcher;
|
||||||
import org.springframework.ws.test.support.matcher.SoapEnvelopeDiffMatcher;
|
|
||||||
import org.springframework.ws.test.support.matcher.SoapHeaderMatcher;
|
import org.springframework.ws.test.support.matcher.SoapHeaderMatcher;
|
||||||
|
import org.springframework.ws.test.support.matcher.xmlunit2.PayloadDiffMatcher;
|
||||||
|
import org.springframework.ws.test.support.matcher.xmlunit2.SoapEnvelopeDiffMatcher;
|
||||||
import org.springframework.xml.transform.ResourceSource;
|
import org.springframework.xml.transform.ResourceSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,9 +48,7 @@ public abstract class RequestMatchers {
|
|||||||
* @return the request matcher
|
* @return the request matcher
|
||||||
*/
|
*/
|
||||||
public static RequestMatcher anything() {
|
public static RequestMatcher anything() {
|
||||||
return new RequestMatcher() {
|
return (uri, request) -> {};
|
||||||
public void match(URI uri, WebServiceMessage request) throws IOException, AssertionError {}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Payload
|
// Payload
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.springframework.ws.test.server;
|
package org.springframework.ws.test.server;
|
||||||
|
|
||||||
import static org.springframework.ws.test.support.AssertionErrors.*;
|
import static org.springframework.ws.test.support.AssertionErrors.fail;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -30,10 +30,10 @@ import org.springframework.util.Assert;
|
|||||||
import org.springframework.ws.FaultAwareWebServiceMessage;
|
import org.springframework.ws.FaultAwareWebServiceMessage;
|
||||||
import org.springframework.ws.WebServiceMessage;
|
import org.springframework.ws.WebServiceMessage;
|
||||||
import org.springframework.ws.soap.SoapVersion;
|
import org.springframework.ws.soap.SoapVersion;
|
||||||
import org.springframework.ws.test.support.matcher.PayloadDiffMatcher;
|
|
||||||
import org.springframework.ws.test.support.matcher.SchemaValidatingMatcher;
|
import org.springframework.ws.test.support.matcher.SchemaValidatingMatcher;
|
||||||
import org.springframework.ws.test.support.matcher.SoapEnvelopeDiffMatcher;
|
import org.springframework.ws.test.support.matcher.SoapEnvelopeDiffMatcher;
|
||||||
import org.springframework.ws.test.support.matcher.SoapHeaderMatcher;
|
import org.springframework.ws.test.support.matcher.SoapHeaderMatcher;
|
||||||
|
import org.springframework.ws.test.support.matcher.xmlunit2.PayloadDiffMatcher;
|
||||||
import org.springframework.xml.transform.ResourceSource;
|
import org.springframework.xml.transform.ResourceSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.springframework.ws.test.support.matcher;
|
package org.springframework.ws.test.support.matcher;
|
||||||
|
|
||||||
import static org.springframework.ws.test.support.AssertionErrors.*;
|
import static org.springframework.ws.test.support.AssertionErrors.assertTrue;
|
||||||
|
|
||||||
import org.custommonkey.xmlunit.Diff;
|
import org.custommonkey.xmlunit.Diff;
|
||||||
import org.springframework.ws.WebServiceMessage;
|
import org.springframework.ws.WebServiceMessage;
|
||||||
@@ -26,6 +26,7 @@ import org.springframework.ws.WebServiceMessage;
|
|||||||
*
|
*
|
||||||
* @author Arjen Poutsma
|
* @author Arjen Poutsma
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
|
* @deprecated Migrate to {@link org.springframework.ws.test.support.matcher.xmlunit2.DiffMatcher}.
|
||||||
*/
|
*/
|
||||||
public abstract class DiffMatcher implements WebServiceMessageMatcher {
|
public abstract class DiffMatcher implements WebServiceMessageMatcher {
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.springframework.ws.test.support.matcher;
|
package org.springframework.ws.test.support.matcher;
|
||||||
|
|
||||||
import static org.springframework.ws.test.support.AssertionErrors.*;
|
import static org.springframework.ws.test.support.AssertionErrors.fail;
|
||||||
|
|
||||||
import javax.xml.transform.Source;
|
import javax.xml.transform.Source;
|
||||||
import javax.xml.transform.TransformerException;
|
import javax.xml.transform.TransformerException;
|
||||||
@@ -34,6 +34,7 @@ import org.w3c.dom.Document;
|
|||||||
* @author Arjen Poutsma
|
* @author Arjen Poutsma
|
||||||
* @author Lukas Krecan
|
* @author Lukas Krecan
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
|
* @deprecated Migrate to {@link org.springframework.ws.test.support.matcher.xmlunit2.PayloadDiffMatcher}.s
|
||||||
*/
|
*/
|
||||||
public class PayloadDiffMatcher extends DiffMatcher {
|
public class PayloadDiffMatcher extends DiffMatcher {
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
|
|
||||||
package org.springframework.ws.test.support.matcher;
|
package org.springframework.ws.test.support.matcher;
|
||||||
|
|
||||||
import static org.springframework.ws.test.support.AssertionErrors.*;
|
import static org.springframework.ws.test.support.AssertionErrors.assertTrue;
|
||||||
|
import static org.springframework.ws.test.support.AssertionErrors.fail;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ import org.w3c.dom.Document;
|
|||||||
*
|
*
|
||||||
* @author Alexander Shutyaev
|
* @author Alexander Shutyaev
|
||||||
* @since 2.1.1
|
* @since 2.1.1
|
||||||
|
* @deprecated Migrate to {@link org.springframework.ws.test.support.matcher.xmlunit2.SoapEnvelopeDiffMatcher}.
|
||||||
*/
|
*/
|
||||||
public class SoapEnvelopeDiffMatcher extends AbstractSoapMessageMatcher {
|
public class SoapEnvelopeDiffMatcher extends AbstractSoapMessageMatcher {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005-2022 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.ws.test.support.matcher.xmlunit2;
|
||||||
|
|
||||||
|
import static org.springframework.ws.test.support.AssertionErrors.assertTrue;
|
||||||
|
|
||||||
|
import org.springframework.ws.WebServiceMessage;
|
||||||
|
import org.springframework.ws.test.support.matcher.WebServiceMessageMatcher;
|
||||||
|
import org.xmlunit.diff.Diff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link WebServiceMessageMatcher} based on XMLUnit's {@link Diff}.
|
||||||
|
*
|
||||||
|
* @author Greg Turnquist
|
||||||
|
* @since 3.1
|
||||||
|
*/
|
||||||
|
public abstract class DiffMatcher implements WebServiceMessageMatcher {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void match(WebServiceMessage message) throws AssertionError {
|
||||||
|
|
||||||
|
Diff diff = createDiff(message);
|
||||||
|
assertTrue("Messages are different, " + diff.toString(), !diff.hasDifferences(), "Payload",
|
||||||
|
message.getPayloadSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link Diff} for the given message.
|
||||||
|
*
|
||||||
|
* @param message the message
|
||||||
|
* @return the diff
|
||||||
|
* @throws Exception in case of errors
|
||||||
|
*/
|
||||||
|
protected abstract Diff createDiff(WebServiceMessage message);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005-2022 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.ws.test.support.matcher.xmlunit2;
|
||||||
|
|
||||||
|
import static org.springframework.ws.test.support.AssertionErrors.fail;
|
||||||
|
|
||||||
|
import javax.xml.transform.Source;
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
|
import javax.xml.transform.dom.DOMResult;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.ws.WebServiceMessage;
|
||||||
|
import org.springframework.xml.transform.TransformerHelper;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.xmlunit.builder.DiffBuilder;
|
||||||
|
import org.xmlunit.diff.Diff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches {@link Source} payloads.
|
||||||
|
*
|
||||||
|
* @author Greg Turnquist
|
||||||
|
* @since 3.1
|
||||||
|
*/
|
||||||
|
public class PayloadDiffMatcher extends DiffMatcher {
|
||||||
|
|
||||||
|
private final Source expected;
|
||||||
|
|
||||||
|
private final TransformerHelper transformerHelper = new TransformerHelper();
|
||||||
|
|
||||||
|
public PayloadDiffMatcher(Source expected) {
|
||||||
|
Assert.notNull(expected, "'expected' must not be null");
|
||||||
|
this.expected = expected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final Diff createDiff(WebServiceMessage message) {
|
||||||
|
Source payload = message.getPayloadSource();
|
||||||
|
if (payload == null) {
|
||||||
|
fail("Request message does not contain payload");
|
||||||
|
}
|
||||||
|
return createDiff(payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Diff createDiff(Source payload) {
|
||||||
|
Document expectedDocument = createDocumentFromSource(expected);
|
||||||
|
Document actualDocument = createDocumentFromSource(payload);
|
||||||
|
return DiffBuilder.compare(expectedDocument) //
|
||||||
|
.withTest(actualDocument) //
|
||||||
|
.checkForSimilar() //
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Document createDocumentFromSource(Source source) {
|
||||||
|
try {
|
||||||
|
DOMResult result = new DOMResult();
|
||||||
|
transformerHelper.transform(source, result);
|
||||||
|
return (Document) result.getNode();
|
||||||
|
} catch (TransformerException ex) {
|
||||||
|
fail("Could not transform source to DOMResult" + ex.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005-2022 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.ws.test.support.matcher.xmlunit2;
|
||||||
|
|
||||||
|
import static org.springframework.ws.test.support.AssertionErrors.assertTrue;
|
||||||
|
import static org.springframework.ws.test.support.AssertionErrors.fail;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.xml.transform.Source;
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
|
import javax.xml.transform.dom.DOMResult;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.ws.soap.SoapMessage;
|
||||||
|
import org.springframework.ws.test.support.matcher.AbstractSoapMessageMatcher;
|
||||||
|
import org.springframework.xml.transform.TransformerHelper;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.xmlunit.builder.DiffBuilder;
|
||||||
|
import org.xmlunit.diff.Diff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches {@link Source} SOAP envelopes.
|
||||||
|
*
|
||||||
|
* @author Greg Turnquist
|
||||||
|
* @since 3.1
|
||||||
|
*/
|
||||||
|
public class SoapEnvelopeDiffMatcher extends AbstractSoapMessageMatcher {
|
||||||
|
|
||||||
|
private final Source expected;
|
||||||
|
|
||||||
|
private final TransformerHelper transformerHelper = new TransformerHelper();
|
||||||
|
|
||||||
|
public SoapEnvelopeDiffMatcher(Source expected) {
|
||||||
|
|
||||||
|
Assert.notNull(expected, "'expected' must not be null");
|
||||||
|
this.expected = expected;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void match(SoapMessage soapMessage) throws IOException, AssertionError {
|
||||||
|
|
||||||
|
Document actualDocument = soapMessage.getDocument();
|
||||||
|
Document expectedDocument = createDocumentFromSource(expected);
|
||||||
|
Diff diff = DiffBuilder.compare(expectedDocument).ignoreWhitespace().withTest(actualDocument).checkForSimilar()
|
||||||
|
.build();
|
||||||
|
assertTrue("Envelopes are different, " + diff.toString(), !diff.hasDifferences());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Document createDocumentFromSource(Source source) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
DOMResult result = new DOMResult();
|
||||||
|
transformerHelper.transform(source, result);
|
||||||
|
return (Document) result.getNode();
|
||||||
|
} catch (TransformerException ex) {
|
||||||
|
fail("Could not transform source to DOMResult" + ex.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -16,16 +16,33 @@
|
|||||||
|
|
||||||
package org.springframework.ws.test.client;
|
package org.springframework.ws.test.client;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.*;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.easymock.EasyMock.*;
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
import static org.springframework.ws.test.client.RequestMatchers.*;
|
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
||||||
import static org.springframework.ws.test.client.ResponseCreators.*;
|
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||||
|
import static org.easymock.EasyMock.createStrictMock;
|
||||||
|
import static org.easymock.EasyMock.eq;
|
||||||
|
import static org.easymock.EasyMock.expect;
|
||||||
|
import static org.easymock.EasyMock.isA;
|
||||||
|
import static org.easymock.EasyMock.replay;
|
||||||
|
import static org.easymock.EasyMock.verify;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.anything;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.connectionTo;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.payload;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.soapEnvelope;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.soapHeader;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.validPayload;
|
||||||
|
import static org.springframework.ws.test.client.RequestMatchers.xpath;
|
||||||
|
import static org.springframework.ws.test.client.ResponseCreators.withClientOrSenderFault;
|
||||||
|
import static org.springframework.ws.test.client.ResponseCreators.withPayload;
|
||||||
|
import static org.springframework.ws.test.client.ResponseCreators.withSoapEnvelope;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import javax.xml.soap.MessageFactory;
|
import javax.xml.soap.MessageFactory;
|
||||||
import javax.xml.transform.Source;
|
import javax.xml.transform.Source;
|
||||||
@@ -35,6 +52,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.context.support.StaticApplicationContext;
|
import org.springframework.context.support.StaticApplicationContext;
|
||||||
import org.springframework.core.io.ByteArrayResource;
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
|
||||||
import org.springframework.ws.client.core.WebServiceTemplate;
|
import org.springframework.ws.client.core.WebServiceTemplate;
|
||||||
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
|
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
|
||||||
import org.springframework.ws.soap.SoapMessage;
|
import org.springframework.ws.soap.SoapMessage;
|
||||||
@@ -329,6 +347,34 @@ public class MockWebServiceServerTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void soapEnvelopeMatch() {
|
||||||
|
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
|
||||||
|
marshaller.setClassesToBeBound(EnvelopeMatcherRequest.class, EnvelopeMatcherResponse.class);
|
||||||
|
|
||||||
|
template = new WebServiceTemplate(marshaller);
|
||||||
|
template.setDefaultUri("https://example.com");
|
||||||
|
server = MockWebServiceServer.createServer(template);
|
||||||
|
|
||||||
|
Source expectedSoapRequest = new StringSource(
|
||||||
|
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<SOAP-ENV:Header/>"
|
||||||
|
+ "<SOAP-ENV:Body>" + "<EnvelopeMatcherRequest>" + "<myData>123456</myData>" + "</EnvelopeMatcherRequest>"
|
||||||
|
+ "</SOAP-ENV:Body>" + "</SOAP-ENV:Envelope>");
|
||||||
|
Source soapResponse = new StringSource(
|
||||||
|
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<SOAP-ENV:Body>"
|
||||||
|
+ "<EnvelopeMatcherResponse>" + "<myData>654321</myData>" + "</EnvelopeMatcherResponse>"
|
||||||
|
+ "</SOAP-ENV:Body>" + "</SOAP-ENV:Envelope>");
|
||||||
|
|
||||||
|
server.expect(soapEnvelope(expectedSoapRequest)).andRespond(withSoapEnvelope(soapResponse));
|
||||||
|
|
||||||
|
EnvelopeMatcherRequest request = new EnvelopeMatcherRequest();
|
||||||
|
request.setMyData("123456");
|
||||||
|
assertThat(request.getMyData()).isEqualTo("123456");
|
||||||
|
EnvelopeMatcherResponse response = (EnvelopeMatcherResponse) template.marshalSendAndReceive(request);
|
||||||
|
|
||||||
|
assertThat(response.getMyData()).isEqualTo("654321");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void verifyFailure() {
|
public void verifyFailure() {
|
||||||
|
|
||||||
@@ -358,7 +404,35 @@ public class MockWebServiceServerTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MyClient extends WebServiceGatewaySupport {
|
static class MyClient extends WebServiceGatewaySupport {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XmlRootElement(name = "EnvelopeMatcherRequest")
|
||||||
|
private static class EnvelopeMatcherRequest {
|
||||||
|
|
||||||
|
private String myData;
|
||||||
|
|
||||||
|
public String getMyData() {
|
||||||
|
return myData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMyData(String myData) {
|
||||||
|
this.myData = myData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlRootElement(name = "EnvelopeMatcherResponse")
|
||||||
|
private static class EnvelopeMatcherResponse {
|
||||||
|
|
||||||
|
private String myData;
|
||||||
|
|
||||||
|
public String getMyData() {
|
||||||
|
return myData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMyData(String myData) {
|
||||||
|
this.myData = myData;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005-2022 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.ws.test.support.matcher.xmlunit2;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
|
import static org.easymock.EasyMock.createMock;
|
||||||
|
import static org.easymock.EasyMock.expect;
|
||||||
|
import static org.easymock.EasyMock.replay;
|
||||||
|
import static org.easymock.EasyMock.verify;
|
||||||
|
|
||||||
|
import javax.xml.soap.MessageFactory;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.ws.WebServiceMessage;
|
||||||
|
import org.springframework.ws.soap.SoapMessage;
|
||||||
|
import org.springframework.ws.soap.saaj.SaajSoapMessage;
|
||||||
|
import org.springframework.xml.transform.StringSource;
|
||||||
|
|
||||||
|
public class PayloadDiffMatcherTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void match() {
|
||||||
|
|
||||||
|
String xml = "<element xmlns='http://example.com'/>";
|
||||||
|
WebServiceMessage message = createMock(WebServiceMessage.class);
|
||||||
|
expect(message.getPayloadSource()).andReturn(new StringSource(xml)).times(2);
|
||||||
|
replay(message);
|
||||||
|
|
||||||
|
PayloadDiffMatcher matcher = new PayloadDiffMatcher(new StringSource(xml));
|
||||||
|
matcher.match(message);
|
||||||
|
|
||||||
|
verify(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nonMatch() {
|
||||||
|
|
||||||
|
assertThatExceptionOfType(AssertionError.class).isThrownBy(() -> {
|
||||||
|
|
||||||
|
String actual = "<element1 xmlns='http://example.com'/>";
|
||||||
|
WebServiceMessage message = createMock(WebServiceMessage.class);
|
||||||
|
expect(message.getPayloadSource()).andReturn(new StringSource(actual)).times(2);
|
||||||
|
replay(message);
|
||||||
|
|
||||||
|
String expected = "<element2 xmlns='http://example.com'/>";
|
||||||
|
PayloadDiffMatcher matcher = new PayloadDiffMatcher(new StringSource(expected));
|
||||||
|
matcher.match(message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noPayload() {
|
||||||
|
|
||||||
|
assertThatExceptionOfType(AssertionError.class).isThrownBy(() -> {
|
||||||
|
|
||||||
|
PayloadDiffMatcher matcher = new PayloadDiffMatcher(new StringSource("<message/>"));
|
||||||
|
MessageFactory messageFactory = MessageFactory.newInstance();
|
||||||
|
SoapMessage soapMessage = new SaajSoapMessage(messageFactory.createMessage());
|
||||||
|
|
||||||
|
matcher.createDiff(soapMessage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005-2022 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.ws.test.support.matcher.xmlunit2;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
|
import static org.easymock.EasyMock.createMock;
|
||||||
|
import static org.easymock.EasyMock.expect;
|
||||||
|
import static org.easymock.EasyMock.replay;
|
||||||
|
import static org.easymock.EasyMock.verify;
|
||||||
|
|
||||||
|
import javax.xml.transform.dom.DOMResult;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.ws.soap.SoapMessage;
|
||||||
|
import org.springframework.xml.transform.StringSource;
|
||||||
|
import org.springframework.xml.transform.TransformerHelper;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
public class SoapEnvelopeDiffMatcherTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void match() throws Exception {
|
||||||
|
|
||||||
|
String xml = "<?xml version='1.0'?>" + "<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope'>"
|
||||||
|
+ "<soap:Header><header xmlns='http://example.com'/></soap:Header>"
|
||||||
|
+ "<soap:Body><payload xmlns='http://example.com'/></soap:Body>" + "</soap:Envelope>";
|
||||||
|
DOMResult result = new DOMResult();
|
||||||
|
TransformerHelper transformerHelper = new TransformerHelper();
|
||||||
|
transformerHelper.transform(new StringSource(xml), result);
|
||||||
|
SoapMessage message = createMock(SoapMessage.class);
|
||||||
|
expect(message.getDocument()).andReturn((Document) result.getNode()).once();
|
||||||
|
replay(message);
|
||||||
|
|
||||||
|
SoapEnvelopeDiffMatcher matcher = new SoapEnvelopeDiffMatcher(new StringSource(xml));
|
||||||
|
matcher.match(message);
|
||||||
|
|
||||||
|
verify(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nonMatch() {
|
||||||
|
|
||||||
|
assertThatExceptionOfType(AssertionError.class).isThrownBy(() -> {
|
||||||
|
|
||||||
|
StringBuilder xmlBuilder = new StringBuilder();
|
||||||
|
xmlBuilder.append("<?xml version='1.0'?>");
|
||||||
|
xmlBuilder.append("<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope'>");
|
||||||
|
xmlBuilder.append("<soap:Header><header xmlns='http://example.com'/></soap:Header>");
|
||||||
|
xmlBuilder.append("<soap:Body><payload%s xmlns='http://example.com'/></soap:Body>");
|
||||||
|
xmlBuilder.append("</soap:Envelope>");
|
||||||
|
String xml = xmlBuilder.toString();
|
||||||
|
String actual = String.format(xml, "1");
|
||||||
|
DOMResult result = new DOMResult();
|
||||||
|
TransformerHelper transformerHelper = new TransformerHelper();
|
||||||
|
transformerHelper.transform(new StringSource(actual), result);
|
||||||
|
SoapMessage message = createMock(SoapMessage.class);
|
||||||
|
expect(message.getDocument()).andReturn((Document) result.getNode()).once();
|
||||||
|
replay(message);
|
||||||
|
|
||||||
|
String expected = String.format(xml, "2");
|
||||||
|
SoapEnvelopeDiffMatcher matcher = new SoapEnvelopeDiffMatcher(new StringSource(expected));
|
||||||
|
matcher.match(message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user