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 954049e4cd..c52121b6a7 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 @@ -121,7 +121,7 @@ public class RecursiveFilesConverter { File sourceFile = contract.getPath().toFile(); Collection stubGenerators = contract.getConvertedContract() != null ? holder.allOrDefault(new DslToWireMockClientConverter()) - : holder.converterForName(sourceFile.getName()); + : holder.converterForName(sourceFile.getAbsolutePath()); try { String path = sourceFile.getPath(); if (excludeBuildFolders && (matchesPath(path, "target") || matchesPath(path, "build"))) { 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 8fcdd52f35..84a0cfaf98 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 @@ -32,12 +32,12 @@ import org.springframework.cloud.contract.verifier.file.ContractMetadata; public interface StubGenerator { /** - * @param fileName - file name - * @return {@code true} if the converter can handle the file to convert it into a - * stub. + * @param fileName - file name or absolute path of a contract + * @return {@code true} if the converter can handle the contract file to convert it + * into a stub. */ default boolean canHandleFileName(String fileName) { - return fileName.endsWith(fileExtension()); + return true; } /** @@ -81,7 +81,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 @@ -90,8 +91,8 @@ public interface StubGenerator { String generateOutputFileNameForInput(String inputFileName); /** - * Describes the file extension that this stub generator can handle. - * @return string describing the file extension + * Describes the file extension that this stub generator will generate. + * @return string describing the file extension starting with a dot */ default String fileExtension() { return ".json"; 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 bc2c55e095..edc7c7784b 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 @@ -32,6 +32,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)); } @@ -49,6 +51,4 @@ public class StubGeneratorProvider { return this.converters.isEmpty() ? Collections.singletonList(defaultStubGenerator) : 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 d03c814569..fc13a4d93f 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,6 +16,9 @@ package org.springframework.cloud.contract.verifier.wiremock; +import java.io.File; +import java.nio.file.Files; + import com.github.tomakehurst.wiremock.stubbing.StubMapping; import org.springframework.cloud.contract.verifier.converter.StubGenerator; @@ -40,4 +43,18 @@ public abstract class DslToWireMockConverter implements StubGenerator contractVerifierMessageExchange() { return new NoOpStubMessages(); } @Bean - @ConditionalOnMissingBean + @ConditionalOnMissingBean(ContractVerifierMessaging.class) public ContractVerifierMessaging contractVerifierMessaging(MessageVerifier exchange) { return new ContractVerifierMessaging<>(exchange); } @Bean @ConditionalOnMissingBean - public ContractVerifierObjectMapper contractVerifierObjectMapper() { - if (this.objectMapper != null) { - return new ContractVerifierObjectMapper(this.objectMapper); + public ContractVerifierObjectMapper contractVerifierObjectMapper(ObjectProvider objectMapper) { + ObjectMapper mapper = objectMapper.getIfAvailable(); + if (mapper != null) { + return new ContractVerifierObjectMapper(mapper); } return new ContractVerifierObjectMapper(); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java index cc5d8b6bd4..4c56e259b7 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java @@ -40,6 +40,7 @@ import org.springframework.util.Assert; @ConditionalOnClass(EnableBinding.class) @ConditionalOnProperty(name = "stubrunner.stream.enabled", havingValue = "true", matchIfMissing = true) @AutoConfigureBefore(NoOpContractVerifierAutoConfiguration.class) +@ConditionalOnMissingBean({ ContractVerifierMessaging.class, MessageVerifier.class }) public class ContractVerifierStreamAutoConfiguration { @Bean