diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/MappingGenerator.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/MappingGenerator.java index e0d4ed1dea..c4bfb6fcd6 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/MappingGenerator.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/MappingGenerator.java @@ -45,7 +45,7 @@ final class MappingGenerator { File mappingsFolder) { StubGeneratorProvider provider = new StubGeneratorProvider(); Collection stubGenerators = provider - .converterForName(contractFile.getName()); + .converterForName(contractFile); if (log.isDebugEnabled()) { log.debug("Found following matching stub generators " + stubGenerators); } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerExtension.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerExtension.java index 5489cb56a0..d38b923d83 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerExtension.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerExtension.java @@ -51,8 +51,8 @@ import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; * @author Olga Maciaszek-Sharma * @since 2.1.0 */ -public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, - StubFinder, StubRunnerExtensionOptions { +public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback, + BeforeEachCallback, AfterEachCallback, StubFinder, StubRunnerExtensionOptions { private static final String DELIMITER = ":"; @@ -84,7 +84,8 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback, public void afterAll(ExtensionContext extensionContext) { try { after(); - } finally { + } + finally { this.afterAllCalled.set(true); } } @@ -105,7 +106,8 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback, public void beforeAll(ExtensionContext extensionContext) { try { before(); - } finally { + } + finally { this.beforeAllCalled.set(true); } } @@ -133,7 +135,6 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback, } } - @Override public URL findStubUrl(String groupId, String artifactId) throws StubNotFoundException { diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java index a7f546f53c..e3b18f34cd 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java @@ -99,8 +99,8 @@ public class StubRunnerCamelConfiguration { @Override public void process(Exchange exchange) { - if (log.isDebugEnabled()) { - log.debug("Got exchange [" + exchange + "]"); + if (log.isTraceEnabled()) { + log.trace("Got exchange [" + exchange + "]"); } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverter.java index ebf9b739cd..e3ea52bd7d 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverter.java @@ -131,7 +131,7 @@ public class RecursiveFilesConverter { Collection stubGenerators = contract .getConvertedContract() != null ? holder.allOrDefault(new DslToWireMockClientConverter()) - : holder.converterForName(sourceFile.getName()); + : holder.converterForName(sourceFile); try { String path = sourceFile.getPath(); if (excludeBuildFolders && (matchesPath(path, "target") diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGenerator.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGenerator.java index 7602743943..bf2560a646 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGenerator.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGenerator.java @@ -16,6 +16,7 @@ package org.springframework.cloud.contract.verifier.converter; +import java.io.File; import java.util.Map; import org.springframework.cloud.contract.spec.Contract; @@ -32,11 +33,22 @@ public interface StubGenerator { * @param fileName - file name * @return {@code true} if the converter can handle the file to convert it into a * stub. + * @deprecated use {@link StubGenerator#canHandleFileName(File)} */ + @Deprecated default boolean canHandleFileName(String fileName) { return fileName.endsWith(fileExtension()); } + /** + * @param file - file + * @return {@code true} if the converter can handle the file to convert it into a + * stub. + */ + default boolean canHandleFileName(File file) { + return file.getName().endsWith(fileExtension()); + } + /** * @param rootName - root name of the contract * @param content - metadata of the contract @@ -49,7 +61,8 @@ public interface StubGenerator { * @param inputFileName - name of the input file * @return the name of the converted stub file. If you have multiple contracts in a * single file then a prefix will be added to the generated file. If you provide the - * {@link Contract#name} field then that field will override the generated file name. + * {@link Contract#getName} field then that field will override the generated file + * name. * * Example: name of file with 2 contracts is {@code foo.groovy}, it will be converted * by the implementation to {@code foo.json}. The recursive file converter will create diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGeneratorProvider.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGeneratorProvider.java index 51adc560e0..44173ee131 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGeneratorProvider.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/converter/StubGeneratorProvider.java @@ -16,6 +16,7 @@ package org.springframework.cloud.contract.verifier.converter; +import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -32,6 +33,8 @@ import org.springframework.core.io.support.SpringFactoriesLoader; */ public class StubGeneratorProvider { + private final List converters = new ArrayList<>(); + public StubGeneratorProvider() { this.converters .addAll(SpringFactoriesLoader.loadFactories(StubGenerator.class, null)); @@ -41,9 +44,9 @@ public class StubGeneratorProvider { this.converters.addAll(converters); } - public Collection converterForName(final String fileName) { + public Collection converterForName(final File file) { return this.converters.stream() - .filter(stubGenerator -> stubGenerator.canHandleFileName(fileName)) + .filter(stubGenerator -> stubGenerator.canHandleFileName(file)) .collect(Collectors.toList()); } @@ -52,6 +55,4 @@ public class StubGeneratorProvider { : this.converters; } - private final List converters = new ArrayList(); - } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockConverter.java index 1fc0b9ea26..d50d956ab6 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockConverter.java @@ -16,7 +16,19 @@ package org.springframework.cloud.contract.verifier.wiremock; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.file.Files; + +import com.github.tomakehurst.wiremock.common.JsonException; +import com.github.tomakehurst.wiremock.stubbing.StubMapping; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.cloud.contract.verifier.converter.StubGenerator; +import org.springframework.util.StreamUtils; /** * WireMock implementation of the {@link StubGenerator}. @@ -25,6 +37,8 @@ import org.springframework.cloud.contract.verifier.converter.StubGenerator; */ public abstract class DslToWireMockConverter implements StubGenerator { + private static final Log log = LogFactory.getLog(DslToWireMockConverter.class); + @Override public String generateOutputFileNameForInput(String inputFileName) { return inputFileName.replaceAll(extension(inputFileName), "json"); @@ -38,4 +52,19 @@ public abstract class DslToWireMockConverter implements StubGenerator { return ""; } + @Override + public boolean canHandleFileName(File file) { + try (InputStream stream = Files.newInputStream(file.toPath())) { + StubMapping.buildFrom( + StreamUtils.copyToString(stream, Charset.forName("UTF-8"))); + return true; + } + catch (IOException | JsonException e) { + if (log.isDebugEnabled()) { + log.debug("Cannot read file", e); + } + return false; + } + } + } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverterSpec.groovy index e699b0e566..766c46200a 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/converter/RecursiveFilesConverterSpec.groovy @@ -198,6 +198,11 @@ org.springframework.cloud.contract.spec.Contract.make { return true } + @Override + boolean canHandleFileName(File fileName) { + return true + } + @Override Map convertContents(String rootName, ContractMetadata content) { return [ diff --git a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/builder/XmlBodyVerificationBuilderTest.java b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/builder/XmlBodyVerificationBuilderTest.java index 80f030da8d..0d054355f5 100644 --- a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/builder/XmlBodyVerificationBuilderTest.java +++ b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/builder/XmlBodyVerificationBuilderTest.java @@ -24,10 +24,13 @@ public class XmlBodyVerificationBuilderTest { builder.addXmlResponseBodyCheck(blockBuilder, xml, matchers, xml, true); // Then String test = blockBuilder.toString(); - assertThat(test).contains("DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();") + assertThat(test).contains( + "DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();") .contains("builderFactory.setNamespaceAware(true);") - .contains("DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();") - .contains("Document parsedXml = documentBuilder.parse(new InputSource(new StringReader(") + .contains( + "DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();") + .contains( + "Document parsedXml = documentBuilder.parse(new InputSource(new StringReader(") .contains(xml); }