From 822dd4b7322f011869c8f47a5bf16aa0d014bde7 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 20 Dec 2017 16:31:52 +0100 Subject: [PATCH] Revert "Merge branch 'master' into 2.0.x" This reverts commit 63a1981f5431586f6044b61e27b519d6d1c0e7b6, reversing changes made to 0cca942e86d7855b4556140e11a2ff857f1efd90. --- docs/pom.xml | 4 +- docs/src/main/asciidoc/migrations.adoc | 10 +- .../asciidoc/verifier_stubrunner_msg.adoc | 11 +- pom.xml | 73 ++++- samples/pom.xml | 4 +- .../contracts/com/example/server/pom.xml | 6 +- .../standalone/dsl/http-client/build.gradle | 5 +- .../dsl/http-client/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- samples/standalone/dsl/http-client/gradlew | 22 +- .../standalone/dsl/http-client/gradlew.bat | 174 ++++++------ samples/standalone/dsl/http-client/pom.xml | 4 +- .../standalone/dsl/http-server/build.gradle | 6 +- .../dsl/http-server/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- samples/standalone/dsl/http-server/gradlew | 22 +- .../standalone/dsl/http-server/gradlew.bat | 174 ++++++------ samples/standalone/dsl/http-server/pom.xml | 6 +- samples/standalone/dsl/pom.xml | 4 +- samples/standalone/messaging/pom.xml | 4 +- .../messaging/stream-sink/build.gradle | 7 +- .../messaging/stream-sink/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../standalone/messaging/stream-sink/gradlew | 22 +- .../messaging/stream-sink/gradlew.bat | 174 ++++++------ .../standalone/messaging/stream-sink/pom.xml | 6 +- .../messaging/stream-source/build.gradle | 7 +- .../messaging/stream-source/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../messaging/stream-source/gradlew | 22 +- .../messaging/stream-source/gradlew.bat | 174 ++++++------ .../messaging/stream-source/pom.xml | 6 +- .../pact/pact-http-client/build.gradle | 5 +- .../pact/pact-http-client/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../standalone/pact/pact-http-client/gradlew | 22 +- .../pact/pact-http-client/gradlew.bat | 174 ++++++------ .../standalone/pact/pact-http-client/pom.xml | 4 +- .../pact/pact-http-server/build.gradle | 5 +- .../pact/pact-http-server/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../standalone/pact/pact-http-server/gradlew | 22 +- .../pact/pact-http-server/gradlew.bat | 174 ++++++------ .../standalone/pact/pact-http-server/pom.xml | 6 +- samples/standalone/pact/pom.xml | 4 +- samples/standalone/pom.xml | 4 +- .../restdocs/http-client/build.gradle | 5 +- .../restdocs/http-client/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../standalone/restdocs/http-client/gradlew | 22 +- .../restdocs/http-client/gradlew.bat | 174 ++++++------ .../standalone/restdocs/http-client/pom.xml | 4 +- .../restdocs/http-server/build.gradle | 5 +- .../restdocs/http-server/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../standalone/restdocs/http-server/gradlew | 22 +- .../restdocs/http-server/gradlew.bat | 174 ++++++------ .../standalone/restdocs/http-server/pom.xml | 8 +- samples/standalone/restdocs/pom.xml | 4 +- samples/wiremock-jetty/pom.xml | 6 +- samples/wiremock-native/pom.xml | 6 +- samples/wiremock-tomcat/pom.xml | 6 +- samples/wiremock-undertow-ssl/pom.xml | 6 +- samples/wiremock-undertow/pom.xml | 6 +- spring-cloud-contract-dependencies/pom.xml | 4 +- spring-cloud-contract-shade/pom.xml | 2 +- spring-cloud-contract-spec/pom.xml | 2 +- .../spec/internal/BodyMatchers.groovy | 8 - .../contract/spec/internal/Common.groovy | 5 - .../internal/PatternValueDslProperty.groovy | 21 +- .../spec/internal/RandomStringGenerator.java | 17 -- .../spec/internal/RegexPatterns.groovy | 56 ++-- .../spec/internal/RegexPatternsSpec.groovy | 26 +- spring-cloud-contract-starters/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 6 +- .../pom.xml | 2 +- spring-cloud-contract-stub-runner/pom.xml | 21 +- .../camel/StubRunnerCamelConfiguration.java | 67 +++++ .../camel/StubRunnerCamelPredicate.java | 109 ++++++++ .../camel/StubRunnerCamelProcessor.java | 59 ++++ .../StubRunnerIntegrationConfiguration.java | 2 +- .../stream/StubRunnerStreamConfiguration.java | 2 +- .../wiremock/WireMockHttpServerStub.java | 8 +- .../cloud/StubRunnerDiscoveryClient.java | 32 ++- .../main/resources/META-INF/spring.factories | 1 + .../stubrunner/StubRunnerExecutorSpec.groovy | 4 +- .../camel/StubRunnerCamelPredicateSpec.groovy | 137 ++++++++++ .../server/StubRunnerBootSpec.groovy | 8 +- .../StubRunnerBootConsulExample.java | 1 + .../StubRunnerBootEurekaExample.java | 1 + .../StubRunnerBootZookeeperExample.java | 1 + .../spring/StubRunnerConfigurationSpec.groovy | 1 + .../StubRunnerStubsPerConsumerSpec.groovy | 4 +- ...tubsPerConsumerWithConsumerNameSpec.groovy | 4 +- ...ingCloudConsulAutoConfigurationSpec.groovy | 22 +- .../test/resources/application-cloudtest.yml | 1 + .../src/test/resources/application-test.yml | 2 + ...MultipleConsumers-0.0.1-SNAPSHOT-stubs.jar | Bin 3681 -> 3633 bytes .../src/test/resources/simulation.json | 2 +- spring-cloud-contract-tools/pom.xml | 2 +- .../spring-cloud-contract-converters/pom.xml | 2 +- .../build.gradle | 4 +- .../gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 54208 -> 52818 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../gradlew | 19 +- .../gradlew.bat | 168 ++++++------ .../pom.xml | 2 +- .../functionalTest/bootSimple/build.gradle | 10 +- .../bootSimple/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 52928 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../sampleJerseyProject/build.gradle | 18 +- .../sampleJerseyProject/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 52928 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../functionalTest/sampleProject/build.gradle | 18 +- .../sampleProject/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 52928 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../scenarioProject/build.gradle | 16 +- .../scenarioProject/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 52928 -> 53324 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../pom.xml | 12 +- .../projects/complex-configuration/pom.xml | 2 +- .../projects/complex-remote-contracts/pom.xml | 2 +- .../src/test/projects/pact/pom.xml | 2 +- .../test/projects/plugin-extension/pom.xml | 62 +---- .../test/projects/spring-boot-groovy/pom.xml | 62 +---- .../test/projects/spring-boot-java/pom.xml | 62 +---- .../spring-cloud-contract-spec-pact/pom.xml | 2 +- spring-cloud-contract-verifier/pom.xml | 13 +- .../verifier/builder/MethodBodyBuilder.groovy | 1 - .../wiremock/BaseWireMockStubStrategy.groovy | 15 +- .../verifier/file/ContractFileScanner.groovy | 8 +- .../amqp/SpringAmqpStubMessages.java | 5 +- .../messaging/camel/CamelStubMessages.java | 88 ++++++ .../ContractVerifierCamelConfiguration.java | 65 +++++ .../ContractVerifierCamelMessageBuilder.java | 36 +++ .../messaging/stream/StreamStubMessages.java | 2 + .../main/resources/META-INF/spring.factories | 1 + .../MockMvcMethodBodyBuilderSpec.groovy | 13 +- .../builder/SingleTestGeneratorSpec.groovy | 2 +- .../verifier/util/SyntaxChecker.groovy | 64 ++--- spring-cloud-contract-wiremock/pom.xml | 17 +- .../WireMockRestAssuredConfiguration.java | 28 -- .../WireMockRestDocsConfiguration.java | 2 - .../main/resources/META-INF/spring.factories | 3 +- ...mockServerRestAssuredApplicationTests.java | 83 ------ .../restdocs/WireMockSnippetTests.java | 36 +-- tests/pom.xml | 4 +- tests/samples-messaging-amqp/pom.xml | 2 +- tests/samples-messaging-camel/.springBeans | 16 ++ tests/samples-messaging-camel/pom.xml | 52 ++++ .../main/java/com/example/BookDeleted.java | 31 +++ .../main/java/com/example/BookDeleter.java | 45 ++++ .../main/java/com/example/BookReturned.java | 31 +++ .../com/example/BookRouteConfiguration.java | 56 ++++ .../main/java/com/example/BookService.java | 43 +++ .../example/CamelMessagingApplication.java | 28 ++ .../CamelMessagingApplicationSpec.groovy | 159 +++++++++++ tests/samples-messaging-integration/pom.xml | 2 +- tests/samples-messaging-spring/pom.xml | 2 +- tests/samples-messaging-stream/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 8 +- .../src/test/resources/application.yml | 1 + .../pom.xml | 2 +- ...CloudZookeeperAutoConfigurationSpec.groovy | 15 +- .../src/test/resources/application.yml | 1 + .../README.adoc | 132 +++++++++ .../pom.xml | 93 +++++++ .../messaging/camel/BookReturned.groovy | 32 +++ .../camel/CamelStubRunnerSpec.groovy | 254 ++++++++++++++++++ .../camel/StubRunnerCamelProcessorSpec.groovy | 98 +++++++ .../src/test/resources/application.yml | 5 + .../camelService-0.0.1-SNAPSHOT-stubs.jar | Bin 0 -> 1773 bytes .../camelService-0.0.1-SNAPSHOT.pom | 25 ++ .../0.0.1-SNAPSHOT/maven-metadata-local.xml | 28 ++ .../camelService/maven-metadata-local.xml | 28 ++ .../stubs/camelService/maven-metadata.xml | 28 ++ .../pom.xml | 2 +- .../java/com/example/loan/Application.java | 11 - .../src/main/resources/application.yml | 6 +- .../loan/LoanApplicationServiceTests.java | 4 +- .../pom.xml | 10 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 6 +- .../stream/StreamStubRunnerSpec.groovy | 3 +- 200 files changed, 3075 insertions(+), 1690 deletions(-) delete mode 100644 spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RandomStringGenerator.java create mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java create mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java create mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java create mode 100644 spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicateSpec.groovy create mode 100644 spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/CamelStubMessages.java create mode 100644 spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java create mode 100644 spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelMessageBuilder.java delete mode 100644 spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestAssuredConfiguration.java delete mode 100644 spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestAssuredApplicationTests.java create mode 100644 tests/samples-messaging-camel/.springBeans create mode 100644 tests/samples-messaging-camel/pom.xml create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/BookDeleted.java create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/BookDeleter.java create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/BookReturned.java create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/BookRouteConfiguration.java create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/BookService.java create mode 100644 tests/samples-messaging-camel/src/main/java/com/example/CamelMessagingApplication.java create mode 100644 tests/samples-messaging-camel/src/test/groovy/com/example/CamelMessagingApplicationSpec.groovy create mode 100644 tests/spring-cloud-contract-stub-runner-camel/README.adoc create mode 100644 tests/spring-cloud-contract-stub-runner-camel/pom.xml create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/BookReturned.groovy create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessorSpec.groovy create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/camelService-0.0.1-SNAPSHOT-stubs.jar create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/camelService-0.0.1-SNAPSHOT.pom create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/maven-metadata-local.xml create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata-local.xml create mode 100644 tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata.xml diff --git a/docs/pom.xml b/docs/pom.xml index 644d4e4222..1139dc4e22 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-docs @@ -16,7 +16,7 @@ spring-cloud-contract ${basedir}/.. 3.4 - 1.0.x,1.1.x,2.0.x + 1.0.x,1.1.x diff --git a/docs/src/main/asciidoc/migrations.adoc b/docs/src/main/asciidoc/migrations.adoc index d6c77f812a..5cd5952f32 100644 --- a/docs/src/main/asciidoc/migrations.adoc +++ b/docs/src/main/asciidoc/migrations.adoc @@ -171,12 +171,4 @@ This exception will occur due to the fact that the tests got generated with an old version of plugin and at test execution time you have an incompatible version of the release train (and vice versa). -Done via https://github.com/spring-cloud/spring-cloud-contract/issues/267[issue 267] - -[[cloud-verifier-1.2-2.0]] -=== 1.2.x -> 2.0.x - -==== No Camel support - -We will add back Apache Camel support only after this https://issues.apache.org/jira/browse/CAMEL-11430[issue] -gets fixed \ No newline at end of file +Done via https://github.com/spring-cloud/spring-cloud-contract/issues/267[issue 267] \ No newline at end of file diff --git a/docs/src/main/asciidoc/verifier_stubrunner_msg.adoc b/docs/src/main/asciidoc/verifier_stubrunner_msg.adoc index 5402d775ec..adfd9f1225 100644 --- a/docs/src/main/asciidoc/verifier_stubrunner_msg.adoc +++ b/docs/src/main/asciidoc/verifier_stubrunner_msg.adoc @@ -5,6 +5,7 @@ frameworks: * Spring Integration * Spring Cloud Stream +* Apache Camel * Spring AMQP It also provides entry points to integrate with any other solution on the market. @@ -38,14 +39,14 @@ or the other in your tests. [source,groovy] ---- -include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_trigger,indent=0] +include::{tests_path}/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_trigger,indent=0] ---- [[trigger-group-artifact-ids]] ==== Trigger by Group and Artifact Ids [source,groovy] ---- -include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=trigger_group_artifact,indent=0] +include::{tests_path}/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=trigger_group_artifact,indent=0] ---- [[trigger-artifact-ids]] @@ -53,7 +54,7 @@ include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/o [source,groovy] ---- -include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=trigger_artifact,indent=0] +include::{tests_path}/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=trigger_artifact,indent=0] ---- [[trigger-all-messages]] @@ -61,9 +62,11 @@ include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/o [source,groovy] ---- -include::{tests_path}/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=trigger_all,indent=0] +include::{tests_path}/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=trigger_all,indent=0] ---- +include::{tests_path}/spring-cloud-contract-stub-runner-camel/README.adoc[] + include::{tests_path}/spring-cloud-contract-stub-runner-integration/README.adoc[] include::{tests_path}/spring-cloud-contract-stub-runner-stream/README.adoc[] diff --git a/pom.xml b/pom.xml index ad304aff5f..215bfc9d00 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,13 @@ org.springframework.cloud spring-cloud-build - 2.0.0.BUILD-SNAPSHOT + 1.3.6.BUILD-SNAPSHOT spring-cloud-contract-parent pom - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT Spring Cloud Contract Spring Cloud Contract @@ -23,13 +23,15 @@ 2016 + 5.12.1 + 2.18.3 2.17 - 2.0.0.BUILD-SNAPSHOT - 2.0.0.BUILD-SNAPSHOT - Elmhurst.BUILD-SNAPSHOT - 2.0.0.BUILD-SNAPSHOT - 2.0.0.BUILD-SNAPSHOT - 2.0.0.BUILD-SNAPSHOT + 1.3.6.BUILD-SNAPSHOT + 1.2.0.BUILD-SNAPSHOT + Ditmars.BUILD-SNAPSHOT + 1.4.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT + 1.3.0.BUILD-SNAPSHOT @@ -55,6 +57,36 @@ pom import + + org.apache.camel + camel-spring + ${camel.version} + + + org.apache.camel + camel-spring-boot-starter + ${camel.version} + + + org.apache.camel + camel-jackson + ${camel.version} + + + org.apache.camel + camel-jms + ${camel.version} + + + org.apache.activemq + activemq-camel + ${activemq.version} + + + org.apache.activemq + activemq-pool + ${activemq.version} + net.sf.jopt-simple jopt-simple @@ -83,11 +115,12 @@ org.springframework.amqp spring-rabbit - 2.0.0.M4 + 1.6.2.RELEASE org.mockito mockito-core + 1.10.19 io.specto @@ -116,6 +149,13 @@ pom import + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + org.springframework.cloud spring-cloud-netflix-dependencies @@ -231,6 +271,11 @@ gmavenplus-plugin 1.5 + + com.agilejava.docbkx + docbkx-maven-plugin + 2.0.15 + @@ -269,7 +314,7 @@ spring-snapshots Spring Snapshots - https://repo.spring.io/libs-snapshot-local + https://repo.spring.io/snapshot true @@ -280,7 +325,7 @@ spring-milestones Spring Milestones - https://repo.spring.io/libs-milestone-local + https://repo.spring.io/milestone false @@ -298,7 +343,7 @@ spring-snapshots Spring Snapshots - https://repo.spring.io/libs-snapshot-local + https://repo.spring.io/snapshot true @@ -309,7 +354,7 @@ spring-milestones Spring Milestones - https://repo.spring.io/libs-milestone-local + https://repo.spring.io/milestone false @@ -317,7 +362,7 @@ spring-releases Spring Releases - https://repo.spring.io/libs-release-local + https://repo.spring.io/release false diff --git a/samples/pom.xml b/samples/pom.xml index 5593036e94..fd8423495f 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -6,13 +6,13 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-samples pom - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT Spring Cloud Contract Samples Spring Cloud Contract Samples diff --git a/samples/standalone/contracts/com/example/server/pom.xml b/samples/standalone/contracts/com/example/server/pom.xml index 4772345cb7..9df3c430cf 100644 --- a/samples/standalone/contracts/com/example/server/pom.xml +++ b/samples/standalone/contracts/com/example/server/pom.xml @@ -13,15 +13,15 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT true diff --git a/samples/standalone/dsl/http-client/build.gradle b/samples/standalone/dsl/http-client/build.gradle index 42575c7858..8c205cbed3 100644 --- a/samples/standalone/dsl/http-client/build.gradle +++ b/samples/standalone/dsl/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" } } @@ -24,7 +24,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' dependencyManagement { @@ -48,7 +47,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } task resolveDependencies { diff --git a/samples/standalone/dsl/http-client/gradle.properties b/samples/standalone/dsl/http-client/gradle.properties index 57ed1c5339..0c444e9a19 100644 --- a/samples/standalone/dsl/http-client/gradle.properties +++ b/samples/standalone/dsl/http-client/gradle.properties @@ -1,2 +1,2 @@ org.gradle.daemon=false -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..ff3de523bd 100644 --- a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:05 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/dsl/http-client/gradlew b/samples/standalone/dsl/http-client/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/dsl/http-client/gradlew +++ b/samples/standalone/dsl/http-client/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/dsl/http-client/gradlew.bat b/samples/standalone/dsl/http-client/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/dsl/http-client/gradlew.bat +++ b/samples/standalone/dsl/http-client/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/dsl/http-client/pom.xml b/samples/standalone/dsl/http-client/pom.xml index 2122992e44..20d4bd48f9 100644 --- a/samples/standalone/dsl/http-client/pom.xml +++ b/samples/standalone/dsl/http-client/pom.xml @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - Finchley.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT diff --git a/samples/standalone/dsl/http-server/build.gradle b/samples/standalone/dsl/http-server/build.gradle index 67dcae105a..708e19075e 100644 --- a/samples/standalone/dsl/http-server/build.gradle +++ b/samples/standalone/dsl/http-server/build.gradle @@ -9,8 +9,7 @@ buildscript { } // end::repos[] dependencies { - classpath 'org.codehaus.groovy:groovy-all:2.5.0-beta-1' - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" } } @@ -30,7 +29,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'spring-cloud-contract' apply plugin: 'maven-publish' @@ -59,7 +57,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } clean.doFirst { diff --git a/samples/standalone/dsl/http-server/gradle.properties b/samples/standalone/dsl/http-server/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/dsl/http-server/gradle.properties +++ b/samples/standalone/dsl/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 zcmZ6yW00mX*Dc((ZQHhO+qUhyZQHhOP209HZM%CKbLP}j-}k=HxvFwib|u-rR%NfO zl?+yZ&J=>k@KT0Jb5TgE1#LLa~Ap!&hq?sh7!heCCeUAO;^56mt z^gnCf#2%&oO#lM5ck-MJbgGTUh@yIJy_M zhW0O?)4yC|Kq<;2=qY@-&;V6$S2uHeB^O60a~C&jbJu@8FK=OYH!E`oH)~U4H%Au+ zQ#)f<*D_UmM-*YC01T>#@x`Mmqq?-MH6OK;Xvak(9O$?xXlD6pc{xFQV^GU_Pcz4) z$A;$^d$tG2_mbEap)?|3)VtxiYrdx$KHi?U_+WdGFWe-i!9kUNc&93#nbgWqxsg`2Z;;nAKR3oBz2Gag$@(zF z8)Dbbg}K=BlW#+n*~MXMCY)r^_0J?%1;=g-6) z2{Alhqf)S}=RIWSfsNU?(B_aR-x59nuGdiGCt%oo;#-3o09-ql3nc0x^z6Oh65)@v z^d~=j_Ya(|fS(#IVCbwm9LulcSS2#^~IGz zma|;#qM?N_zViM+o5qxl2Yl z?qq=YXHOwl!St8H))=>nq00z;(39DzfU&v4_}`dK;e_~Cv63B7SgTSn6~=OK`i6;>P9c05IC{q`9gnJ8?5)5m$y4gv#NlIxd@%z9M#$4 zJ%Ab_VHugqxt#8NHoH|ERX5@1Hk)t@!gM79c?#S=WL~Hi>Cx=evr0WNB_Y*m8W8U4 z@2srRdlg#Qof(k^zFH+|T2rkqO}S-e?(7^6)E~Vzqg#w-&nCjSs=RFa_S0r7B1N*y zskt`Dm5R<#C|ku2c-h#fF7&r`R<=HLrU0C*V)LqSd|9e)2EKN-nV3KC2j1+a%b5kl zx*j>RSP94}4i*w*D_zMD@Rs4|!%8o~$3e!ik#bc}hs><7#*quDAhRof5s9FI59isN z$5di#xi2BEk~!u#Z?s2H2W2Ntcj$z3oETH<^fUiPec8bi=;0gN^6a`~{t;diods;; z;D-7y)||kNGU%+_*~pJ)SiIc(ua3Ge4XO`qDVv)p$)8&Y^J}lD=@t;Z`>x@I>&mw0 zByhdr6F!WyCWMn#Roa zMrs1|k{@skGLi;W1A2*%<>i_UZ$ECSaZLQqnu&{8ZsJ`>@S>sc9G#y@(yPtFSMAL7 z7VS*p;IcH#>bpp9bH(jgS;XF)tNU(50>%?O&3hx>zTbt$A|^f`l428*ECKl$)M26J zpV`g`!$kN_l{;!G~KCvY9(qy z%ysP-$z<1B?W34jDEK@)$*Z-&pg%Lgl|Ga(?L1TAjPfB=3K`{B*|akiR1-`nEu{VS z9Leh8epl5XGcoq^rMYJ}K>+l+G=ffVq2=LgZt2hGGq*d{h8uRM#gKY@d za)Z`Y)M)-0Y<-4x|CUNkAKdc<#EkyVRM&>L)3jlu!Sw1HnIMTZhAe-G-+TyPT9WUe zQ%GYT*FgJXdwftNWE6R4iC7+zA|_XyPWHd;16j;>Y;h`x*&VuI6al8Y>Z$t9sh+$x z2KC#W4wB&Tn#=bDDkSwd*^QV^3PW+fb3;iH=b5id(008p--|MUCs{%725+fT=Lb2N z-~|(csMSJ)^~#mF;k$aGcBs|z(vJ+N4Fcd-X9cJUpdkAtAsO5H#~2T@)C9iaW?3t- ztzhc1#mpqbxZs(0@8W4TEl*;TLaX9q)c}cI?W(z$E!H8Ou^1~*n z?O?*ZDT-%XjM{g0T=Csej?j&ZcP_EWD8?xccU_U{-$@Ac3@E%<4Y(B>A1PQrxXYbm zvbw|e^ZW?|hVajRI$AQgvj!r4>U%QZs9ZM&ILLI8Ya@0@jnpC68w$Z$zK z!Q+XNtotJ&ouL|XM@al_i<%&YCHVV=p!-Ku0fWoW>rsYQhZx=+lb<2If|H*yy}ZA_ zMe{3N5J6h~Lh@f*f+3kj4HJ^bWac#TD?p#=xGOBCydvK@2q^1fSq6yXF~)ik2T+!Y zQ;(U_esh0NQrY|^qc%{vjM8}CMQ*1bfGWe_pWZ!gJ@>4%>5YdZ(+lTx4>Mx~ucGreP+!=;V7P{O^h|18*Ra^pAFYKmY;J z|7Xib8i8zyHL3*p--W^le+}$^$FYo2|20kwO9F}bKV*h$uYDIc#aECX0PBZ#(k4jR zv$;t(Op7!$Wh+MF9l?o%1TUSqfs}a9M09E9nH+mfdOMdaR;Lpqv)ZquyQoo{U_!61 zEWJRrVdLNaTGZCowyI(4cy-g)_x8HC{Ymo%u<+o_F+)0H9Qd|4_02u|n|tSHXz=~H zEE#1*3_vOrn9CTWj3bEy7-k29umM|-O;+F(vJf=fgCRcT%!5-6qMF+!v!#IQO{kV; z;T(|UV-)gsYGq%*K!UQRSx$Uq!OTBCT?5S<%O5U-y5Y>j-(&MB`pA@Ws~&y;XAd8P z>P?vgS0B54)FzgzWLG=u&9cKV-am(Y|4 zfpf<%OLkEAVZF+SYe01;4*`2*^Rr88;9jtf>hC0B+h$AcKy_y~z&3|5=zGY88i(6M z8Sft|ADwd9G+{3Qpf=~8p&}srGY`RtZ@c#{(cd?82MiqIHPhd{s`<#s6xB|2Limkj z+3#Gpr?jQgRJm{q3J$4b$x+l{p42<2g$`M`X9n5}l+gy*2Q}|DAH6zz0`vl1I)}EI z!SHdmmmHjq-K|Ac?#pB4t2vzPb&g$bqPyj7a$&O>S3S>w>_~#ETI)6xi&|Ik<@Y~c zbk-NlwlM_K!jHCDeo0=I6-h?fi+GA|Yi<qGkaei8h^1hZN_5LS6THWZIqfS@gX5z zB+>f}rQW$!tY5OE$g%2k$2gK8OA$hm!|k%*%#@D0wbwxC=27Bp8GDqYbeoTv(oW%3 zx(drol6 z!R=xlwA0nzS?^IGM5~}`^GN^hEFG#%?F3IQn?JKOMH!;vZ5yY|$B>9va4)AwP^B@| z^=G>S0x6s}jXZFqWi>pYAflW3vQ2iWVcp>Qqm{$e{cft_5rhNwURR;|Uj+h%JKV}a znB2*XvIS(SS6^usGB>TY+?(z(NR2(7Pqu7K`4FV&v5NMsUL=UCxYk$UC0J6Kdhii_ zhAluY}Qfel4wTt*w-+ z5YE+N_>6<$J`*w*$lJ@{lU_8)EOuTAtUf()iRPg<$bgX`G_~cO!^E0uO+~U(VvF{K z)*Mcg5vD}TVrnaPUeoS08LSe0rsVP%>2gZ=nkLM`=8Nm;u5`UdpzXqxac*aRAMA-{Q- z{eD=4N)WwgDfGxy&y;!{`9oqx=GolecpF>RHZcXqTr3$4FKHGSg$tYH%JolJ+w2l9 zhncBTXg#%d3s;1TDIGd{v$S3pOUiq+q^qK+n+et4ZbnK-X0@!oYf6tA!kQ6)J|T`m zQH&0A!9HeAx6ue#wdD#See-rKH~P^BQ>sNNTU@jj1BUi(mSuR#{d0Pa3tJ>6bYZFq zb*e6ir4^$fcTL(=Hhc}GNSz%+XFD8&F>Mqxf9R;`bhUSHR8%h=Is@I*!_%SFOp2bc zrMka^*_rKOXVQv^v#hAF&4q>BvZ;S&`d|QV2A)P8dpW1!Y_u)D)bH%Y7=NCn3i_G3 zs~U+c<`IDZ=gGOoM~)vr2<|m;YX9h4j#q(7EZY->?nvi3MY`~D_{%=+mN@gA2q1YP zX@q{;OiRydR-sS7SJXARP&6!jxGZZz-o!Du;;x`}x7_`#AHL>*#XP%IvfFHF%U`~# zu8-0p`z)r`((MKtS2XKMKX_)l8^wj8rj8aUB zhnh~FogZj*5egBzalJI%7B9wEeUY6eMLuev0IyCTZQV6m9^PE7K`Wg;!jh$&60H=T zds{mydhuAl=7Bb0c?Sj-9jE!2Z83t2RHhHbY%S?wJDi$OKuETX&Ed4)LtL^h-Pi|!7Y zMp9j1Y@Yf{KW%{0h>if?);e0J#u(T*%SGXep!%#e-m6$6<=ofc5L4|(Krl6GOF0Zr zb-}#GV@xd|$q=Q=ApJDW7-I^c*D(^yN5!dpvP;VZML}{T3!ekR_c@b%F>?s-mm!Y{2PZKy)q|Nk+)3V) z;O}+xpQI_l(}Kz`)c{aaeg*Q%#~iqVfl)z8>`R@W%4g!gB8MI7KV^l-nqLZIOC?im zX#jY_Cr2;38EFdmjgxIeZksURnol#WKM~NtnMHC;JaCGz0UVBpvx)xkGX(oO)x4v=P5h|fQt3z1aI&KDa8q1OGSD& zL2X-#^_bg*)~%SpVw}h!RMX9{s77Cr30t7|=5!cfx1jS8+o4TWW3G?v>Ehy8F7Ik{ zM1tdWNC^g8&|-B(lq+h%cpY!<6b9VVZ$=+tZboT;jS(aG2UdUX)SR*lF6$_{KQaCu z3YMayfx$LdqUyHMLHZ*E0kXW`Ne9f)I!iBEjvznl+IQGl!|!InUs~BZg?7)6tI17A z-vbW-#n{w>$7GqhmXKf2XHv!2RPV6-t-(h+9(sr_kjj!0x99*XDP|avmww|qLv^_= z*)y(QK*BlsyPU<^02}4t#RoBZFDAEC}6D1vYsgFNthz(J~dXF zgVApAY33?(Ke^Kcrs(C8M(U|&WFBFn0Ed2NR&%HsySzL9R=k>8RP-#L^!$e$FXsku zRhVWfa#|@%KAEw}i#thxyHrNAoK<0#jEsdm`x&H@!et#fA(kT?U)Gt?caY1>#2n!Y2 zj}$gw#uVE=VMjsqwbN-+nL5Pp@5v~XYeOl+G>c(%7Su!$^aBAdPv)e8}BaktcB3LzZ<5- zY+05Y=bqm)d+n>q$$AsSnYtvQgNPvzDJPnOpvW)x5H}s&QJ`6?2f8PPe6jg=+ozab z?@wzBb*6y=3x+2Q?>p|Fj47l33MiR59;dI6seo*KSo*V8_(Y8wuk;T<%$M-~;-}Rw zGaiCx^bbr!*HDE9dMJ$NWxcyTHik+$odrcpJ9wHUcE>9RK|-z{AEk?mWa5_EqDiX` zk?R;Mk~UzR?Sr8kwg`suk5Vw^qO#wVk0W%W2aPQCDy(ckF+Td490nZ`XUW|-a{1s=?&wlG1H*fd8`36o))B~Ul z;OBplB6%zcy%FJ6oOQ(ytATku@jKv_yzToftLkS}J8|l1Ya@;i2Ex~XZQLHWaei}l z-hTC*!;x_T%oEp!wB*AupO-5}7QLQTT?OlSg=`_J%Ip)@Iwrs1LER34>{I0yqrr1* z(3$s7+jaiNsNt!>bZ{vl{?YxkzS8)OE)9j*hF55fux;;!f7WZT1G15J!m`ht+y#eW z5S$^p&+S0IGoJm>+9Ub2gLwGSJ!8zFxN2=E;<5%Z@%3SeJrB^~lbI$J01 zcNCVplN{lTr1FA#4Zvz882&_Ud^Y}q2ZKCAk=ikVgv4|^f0_I(#znQ(o=I1)+* z=b5u1TIC^a#6qkQ!q^C@*v`!|&ytC&+5>*$ z_DlAM+Ibsie-LWONAG60oEiNS_qbjG!PSEfD3>LO!mFUzuYtpa#J&_A?Z#h<2M52` zbQdU*sI#ucq~GP)~OD zi7o-=K|saY$g+iNz`7$SRImMg9kWfIc8EqQa(~UvmTMzZzMkg`ZzDG%xe53HX^${= zRzF25BbKPS#;hy3)X$98;V|E}TNE&2sk3Z79f9wL7yHY^Dj^j!QyC+_6?EJwxJsMe z1q-jvNBdQEzc{fbwDocnKm>ZeoD6Tkx)^KH<`-eyesX@s)w?uI>G@44rGU(WG)auD9l^|j1pq$m2{}*=?vDNxPP`X z`Z*ZG8~o(=KNudEx~+mp=k6#h&uZb6c(28tkM1hnn=+ zT4~@tIzyOqMElX#6;Sr-8VMep4*FRs#cq_@*g0#S9Jl*Qjck(E6($U#9^$iEIODE= zPMT0ijlLSaNC6vs4*nKvclPX<9Q&vgmXjjZOniOAn2g$&Q@9c@3Ggg=6FxHH?924b z9y@hJ9ytWY_M-Mud^b% z*#YLJm&gMwQzh{WVF|?p-D)G{UMwg+79<2wI1}X+-48}q7{iUy=NtzhzEds!401fd zZ#myYHE|fY@U((j7ky3b6)g%Ze|Ge_?W+b2EeRtqd?s!d#L<>HD z&;H;toPaT$AQ4W0>Mc9O3DZC7sdoJYRKq>I#&TV21Y%)1lba8NQ;xqxQxhZ_ zslHP*XK-?N{f&-XnWZOnR!e8eQGXjb2U28pwj$an zNT-Q>r{3A3=2GrmJ??l)oX2J>+u2Bdi!^~9Dqp<*!Vh%) z{O=m#&y&yrecTw}sx@YbZs8iAC;UDb!~MKu@eGQ0L9yfr#|WrlSuO#UxcMmJF9mPZ z>1^l)|gPCo6--sKnMje#47ihK8uNE=2;raRHK~c}a3tT1L!0Q~?wI6|OGYBSN5S~4 zs5G(5EdIRM>lVE>(l~H~b>rGO`wtiN8 zKRp1*E2gzL9MB>23%)gd{&Lm`@_>PbK`q^-Lhcp5a-QO^;E^{D0rL!=@N&+&WR9Zd zS(p30PhJ-x5LkcAuM>s0r!AA7D|R2e?{T#Af%xCsozz+f+44VAffNe}i0c3ICeQ(C zn%+iu>ezqfnpFxlAR+^cF-CFkJ_R0zKppSjX5~0qw(a2o*Ew%}Z+&;~{^P!%zg-ap zVT}4v9*^k*c8~{kL#Te`1?-@UVIu$_iVhsKyT%hbz?~Wh9TAW4y)2Q?I~gNo@SczL zh1HIYz`6J7hkebs$cBASo zA(&|QAzfpyA;}xUx5~i3Xloo-yZ;>_jpNp zpJuPxf&!Q$n_O6fDUaWNK!#8UF~EM*fsBy%X+Zrn(~2JtZA9InH&>6};c$xTM>+55 zQXlPv`_RRh`{?BRut%ToL7A_^L;<0MkPoO|Y=H&TmHSJ$_}I5MIQSR%cpLmYI~~4O zUQU&kUS@K_m3J)m4Qoj&DyRT_#AtI61UBlG;g`Z=ovNs*sZ zrLzf+`P1m$+4J_fUEDc7TTi!E!(Wg3eWE=jq#?unVJQ5(;77sB<;-J`MLRsR4LS!~*-}eCG!d-EZcy|Hx63nV{`fOm%h-HlTTJDAnEvlTfit|ITe5~4C){F325l-kxLW>eS)gAM3YIH}JE*RlPTwodvbEcTR{ zLq4Avg|dGl-!U&cM163eymfk64tIqeS^FHLs<619u$KDL!Vy3;U(8+yEjw73D9Hr* za!XACb^f_Lvt;g(LNMT0rQ&%yCSvffv|c*3g{3bMm9>WLMARPH97g_bal^?=`<-r+*J_6XZl=PhRM+TS-P+R5e#vRFv(KBZnB>-)%F4hh!zAPN zs1_JcYO3w4$XZiu?DEwDsfx*t13M<0^;p%vZQw8K43FrwKY!C?Fng)%3%dgMiMREd z{fk6vGDjGzy0zpd_8QEjD&N@yhI#azytq=DQB-~E8_@x+-5g<U?qgQA7JJHkjJ{G#QZ`Z_wA50rc*NA8`{qXpvn1mlSo^40G#PG9OASG_rl(s3D9Y^-HR zj`6WM>U;oNyUVnw3#yVLUYs9>p1%{@PGEmkIey4-*~NX>lCC*eCOhNOpPTRdNd~jW zQsM1-245V})8GFPB7Yh3RUCQGp$!^!M4z?YmSTPV`S5erZHvKWxfccs3d%5f~ z!BPN>HqZc<4K;wNm#M(qqceR)SJTL*(hR87(NI#!qPrnr8TWK8;MubHbp;G6=j5-M znmFV_pv~rbUu%U>`lJx~1S;LWl^V<6Lf}2u=KEZGuK2~Ah^ubVnRe-4Tj%VgX+9#* za_3I>dCkAkT|>I&y?rDb}ofG-;iZ90ec@FE~{|FCngSmS)UD2~BIM~zXqR~?hP z5I!wtH0Mr}y{+kb{aQcSC{gGi^$IkmYk@nO>a=-{Q4`)Sc5v-jocOlJe(Gxa051cK zC_4^qnarDlS9q6sDB4)0Vz%c;UwB)be8Xz%BtE{%%J8s?uIWAJS)HjT!Goa5;-Ivr zjRzPr$1=0%zLsp)$Bqh+CBUdQ$+m99#Cnv`^9II=?-zjI9;5wy)`203@wc01s->zy zucZ(?EYM0N_?$y5@$x-SmU{Y}t4ad~CPW*=r5rrwL|wYJ4fpO|Gu8zL)GGtSo%17; zaD=!OfoabQV`q!Z=ul|#!W9}WFbF4zFZt>H(svD+PiCI?0>P94# zyubsqs~D3cPM8`qMJ9A;&;0)mi%U|^!j&yrkD2FjXzH3_D)Dt_OA=T-d^Uh>y>+wG z%CO!pytXNie5&IqJ2MP*G=2F+O1!ZpsVn1968Z>bRBPVYEesrYN(WnOeIPE+7_-wZCj@`jZIrhZd*!TTVoRs8H}2|QPsRri5%y+mi9Gm+vfFb z#3JL8`Eb&s!9^0Ml~0Ss#|^-@n<@P55Wm(LNE5m&w?kmU)hZW$8&`<3AS&e{U43o{ z)Es#ma^Hp+7sv33cPH?fssv@3UZAftar1dQFki^RPRvOsT!t!vun3AOM`{a4Wi)>Z z98HrYh$HoxAGS+s<(Rj^D-N`lEupfVFUX6>DPLeV-B#DqFSx0r)+|7Jm{GW$y>8Vv zNoA`WJHrE5>tb7R><51wtyP%x)VO2zr-s6thc7(RhG@}?wjEb+nJZVGc259?<;>9x zwvM}oF#^2uiAVW)WSxq;SSL+iGz+)*Jj>?EZ+Mw~yg3VyJXGjBS$J(bIQt_cXnT*U zC%elpzDtmd?nF_HJT$&B@u4nz#2zz&@T#wFwqg` ztt(Pett2_dGuFm{8JY&B+AR#es-bKgxv4hp2zrPCI?SmOB z)158Yf3x$`9ApS>K3G-vGo+CA5XyVdUA>THyYqy9`@zC(==DxBf7rZpXzQF8Bb_WE zn*rU%vjxfVXA7Wnne`g-hH19XKJuuOe(&A|lIoJl*n?ys{*3PH!B47UGH(#F{%DtI zu`i|M#|=dG^Tm0@)3`}LDpV?Ne8*L`5OKv%jxk{kcL48EE50OOUs{){b}3~;PjMlk zSQwv9*23wcVKUvjndS{!#nPkPsI`gCVfVcH8DH4D#|c>W0W+^-t+^Ew5B=z~m(X75 z$Zi(u2~O3L*Cy`GBG?&$bdX8NH4T;^dCrttz{c^F6h$XR8ZKJ#JRw@ra>fa6rx0=LW>~#-dv1} z`wNYo8|9;PlZuU~WvQkVE`Eh0v|KLA&1m^+G)e_epS#(MKHd*YPj{YOdJ)5Z#Mzr( z@9#eEJ9tHbr~4A1wU{`X_Cp4A+c?&3hstVs+(cgnB76@c_liW1=3xtLaoi zLgoE2GN22f_KO>xaMYBBV0>K753fM!L7K1VKov%y&V)5z?E%|wEn!|dd;aqQ9NaLq zz%V&NadMbZR^lH=MxQ*d3GkEuwO&T=IeCH`u)_ctxESwH^TXX&zSkG*r;HkCID&jH z(hDd(8h?+9E;zD;38*hd96+kv@-A%at2uT80364IhI@Rvc@f^Oudc2)X_3x($_o~T znfV1!Zre~6-zPAFk~vuOTc11G3&&N$g{TsG`$`(xT53x8hbxA}H~0597c+twa=>Rv zX?AepB}?UDb6v&AaeJJNBQ=$t0?5hntLt`CH=Xc zmr$Xq5M=gY-eTsEin3$qln9L#DVfN?WG49^>V3=f{(KULQZuCX2%V>3y}RoCJM%ID39(we6tJPO!JspcpHW3T`xj&wKQ z@v2B>dxbCozT7L&pfvZE5@ugY&>9{Syg1F@h3jWyE=e`=?Xi#Dd~Cu7)A&X^fX1P3 zNFHCsar$pH3FD)8Q#sv_JZWr9_3kBfRwJ@x4vCZ2*xVYgAz`OmP<3f6Y1XtztUBo< ztUsB9N3jlh4-cs)fzs9Z(&DDWkg<`-_#G@(9G`adoGbcV@{cq70*u97E+RK=vrf0u z$-S`Kbl^6f5bHKrzvyus#^iD00f!VCC9wKr@B<^uZtC^C*z7-PyruHgCLD1r)NEfc z0~+_Z@B^cFk*<1$2VOKb3zoQl6KE?B-`+#Q1&Y_6I zX9fA)%WhZ5oTtPWwa; ze8PE_MRqmWQ?dxU8SipC}hCQ7_0BUrxG^z#)Nd`?NP1s@Kr!+2VB&RBp^G~E-3W1b*Thw5`unl@-K?;`LiTB--=2AXVWED%TZHjk->F30iB_jZTTpB+8* z@J@rn6VSQ#+%Zrn$svfN&&qq~^# z1SdK&Sd$+%)5qOUQ@^U`J;z`q74);JI9WM)={szvpGyyJwJYgT>bMY96(&|U=Pq&O zGb!_YxtMaKD^T0_CMt~wq+*Y$`6U4Ka}=I9SLuI30AfbOSj*Vsw0yzN6Cq=?i81_E zH@s$)iR_o5S3-N026y6~`478iu`a9b`DZFR4|2i+vk~_n-t!v$Lm`Bu$Wd9%=4>;0 zB`u&y+fR=+ydlH+oV$PdcE>X9UevxtdRg&ZZoZg4h)RZc{x03)IC;+b?0RIK!dE$u z72O(r1AsJ)LEC}vi6epGT*Ugbd%&rV0;p^oTmVeAhC|;)wf@x9p?+&leesD*zdPa4 z*yM!xj7soMb*w-&4}9vgLxAul-*rQw!lT4ZoWqZzp?&>OV7qZBn;LUs9PiLz!YPzC zj$r>RDM5tv2TL9h>R?e_;y;3~?6E~JFIWtc|Es?=zd}^0NX@-vg&T#I7-0V3EJ3xR zDHIorL(_y}C=?}A#Vl(jOQ6mBtvnT!4^rlvc? z(PEBDLxqwzUR7EU3|d9)^nzjk-9{1D#+rU75qO2e<3n#>S2ld990oxrNy;$Fb1lO9 z3Rt$+H0AGWL53)*XoT)CVRev%H3+Wb3ZZ?#(y_mb<0T;3Q|9$cc;x1mNx(QH7W*I< zeIz1GFVT|XemjO3iEJYrXAbA;3*hf_NR}n$)|0gYfiZ7$ros;^SmJnCOeg7JUAY2N zU?Hin;|AINI<1+5cMI*sxbH~s&lR~*0*DqmfV`v>hScaOnPOOt5tpgKSxJKPoG0VA zE6d_(bSB9R{_t4fmQ7(c)84aiwnR_XFMfD(P!904Jl1Ty!cH8W!o_G{HcV-7#kqgk z!mvROS?jR`y>wl7w`{1JZ#=x*Huq%Ir}*5}4~DaGlsjAFWRx{o&-+tdWDlJd0mh*9 zoa0$^Ky;Tjd=RV2nVib*knM1FHWqlJZcx3}xHYrZp!M9>($y9A^=@sNgINL%h9IDB zM9KeT@r1|~*LVXEEqXO46L+J}68m$dpY-?=oCf^pd%6W?kudH(1G^!%maO)d@4;m3 z{CV)mJ(%1*J=j%J^y7l&*gQNN06AkDq|9qKC(4@3n;6~^-NF5?zSk{%z32RA6aM7w z3%`~o?Oz!i^CtIa?{;4sOy?o~pnlO5pOVu7tIL(9$&KQayOR3jmS;2=t#mNid$Jn8 zF=>~@!KW@r$vRftG|RLdfqM}j(n9+qr)VLyWD{qy&&40c<^SSJ8LZakQiPr15}(l_S8I zh-f!t;GoGAL{NDHg_(&Jj>hD5$Cii^So4)7NhymE3wwu17eLA~JqeMlWN~$Bxk}*^ zJnHIK1Fj_lzyXEkgmGrm%|{e3Is$KdtY`Txcif)>&+~u%TnGjwzWlMfowY_h#r!l! z-o*Hb07H>Qkfz9HrjaC=LD-^jrYv4cJ|9$LWo=@t#7B`(x+7+AB~Hao=1Pgb-b(IA zy0JnMlC8?OoY2Nc4m#loZH5u=hdI8W1Th|*&=Mm5EMf%&kDGYu9mO6+QRT-TQD5XE zJ+#gMC?s0vCGPdWC`r8xiu|VSqQtGiiP+DMas>xYOtn zV6l99_$+XC!K|Y`Ne}ay_ym2pjI+6p0)XEtO?xC1gyT@M?l4$RQ>{}N#nueYD29V! zFy`I;!&YH6y?T{&PrAdYw=qQah^agXr?bH)ZJC2Hq1xN)WdiPSbC_CCtT!9eJmCg@ zFJ8@!LbyBsvkNAlSXDtvwKt4Aew)u4J@~K>@SBXG+zWzAW&U(d16&U( zcml#P-R*v9;NvzbOEyI6I@QF>Z`2-h?9`VaGA?TRQ{gk3b_}J(g>I@hU*}$2ymK2Y zKEU=)`Mh*Wy2(vf# z_@?tkLTGo$!KZeaa7WK!4{CrI$mBFVpv1Iff-Sk7u080{{)gjUY#2 zTm&o>vl3f#gce8JhXI!g9Ng>}Rn@%*Bb9d$G+|dMvkG-%#}%_Q2rDw0LDTR%Ht3+a zv{9~ST8nM6{ax$#<5^gwIqWffmYnycvwDxvTW0^HHJe%JteFoYTym+W>-Au^J{1-R z0mI3$;A{1cFO^MMy#;JlfN781CHm~8vlD?!gV3JGMIxjvZu1=ouhCCr-05kzZ3?{R zVsI=>J(aX%@r|c9Dd)W~jedy#^xyDZChv!$ev_i`rn<|rUnv5ct6wZpjB75wvACne zPgwd^3T0Kldex0Q3}NKzAIf8PdVzN#FZ1!-J5IiaB^n6lMYqWo0Jj5BRxdMMneaNW zjoKj3-}{c~KAIi+E;uJ}u<;|rPnDI8@raWI0-{S+_Kq1n@J8FZ_TIzlItDIj>2G>v zC*l)lZjpceH^w%%H@9Oj#5VRabp%1vy1gOjt8TGFRiN!5bZC(Cg}KtK@`P02lj_j>UwJTu1UEv_6gx$mQfKx@SoIseiEO&FOd}Hi}rSU?qI8 zr;ll=rnJ1n6VPo$&1Xs$*+H?hg=m-?p4X74bT?11w6zEil&M9+q{&>U2bS zVGXL6HyHYC(FH`^Y&(g^++&lVT!Dd8Z4$-2FxC@t|J+rm53rrn9YaKo{aw@6FfYo< z0jZ=9D)C~$3di}@z(=ys)c@%m#LXP2(;;u=h(UAh4InGZt8Wyk=80ZS?UPCt)txAY z>vGNPgPh1k1(?lBKc0$eyz;e`~@R%Q%_U!weULP=}!rGgVg(Nz^#m)AFgV?W$mx}!u; zxj{H0RrZa6pxz&Mv@Hkp?wZ7llQz%*{NLhD2_p9YerKC(Duas+1q39E2n0m@A1Q|q z7Ygv7m)v2RQ2;bc>;Q|F9#&pBZVVJHs>E`5yIT^NM~ zc9s^ZJzgx(Vs+c2o;T>S}yCbsD-~m|vJHXF0pq$Qm<@AMtOWd&j;7 zXTE3CX@CL%_@Kv^s<~-cBPjRc4kHdg*Zi2uN&UC8+*mOT__%uRASjJMC}PYhsmXi@ z4Z)D4xu4wFxH{W0DoysiG&#PP41w}Lc}0V*K=r}fPk0pbfqanzL_4QPq=9U*!CER%VwL1^_DS6>;&N6dc{sr%@4P&;ptODx|UV0jkJ6-zJ-o)~2 z4;rUNmmcJNuP7R_c12W#34o>5L)vCM9`=x%JQPK?-`%VCUe)1h`X zt?-sNpUuT&G3fyndUo2uwA^;1Jl~wpo404^o{Js#Dc%^dA`azz=F2X?K_T#pmv1O> z=4&XGc*t>TQ$t6L)8+&armS+xpwsqPAKLE1m*UNt;hE(lYFOwl=sM!HzV1anEk{Zn z{D11W5^$=vFMdsByrx`S*Zjy88KP8ZFqJ74O1w;w>1CdJ>Qd4xgid-YQ=!a5?q?|T zJiC;};=y#@U*FU~hkF3ur zOHk3y4Ai?TNK=?{`a9f{qj*$<7^d`yVr#16Zy$dn!GF+-Vr-(ts4)73cscC6)Kn=x z=faPl{-;WUj2i?wI!BoV615mazii(-2_?q#f}elXHhb$4Cr{lh&5 zHPt#@Wpbl@9DmMubC72yGS&2wu3w3;c3P0SoHo)MVAkNkQCaQouxMP%w|KTzRGXqG zS|xh#d&Ka~gw9f3{e~o!vanvMY;vuJg>-IclNX_n-}gzmeu1^NmTHD|Lz3zulY7%b z7Pwer#6fBNK>Q)jGhIDE$!2_Jem}O#P1cxSmgkk%HzQ7;*c4*Hbah3+3&9DWzLbQH z==pv#)wdj3CLUg2WZuh-%5%7n%JNb27!++Y3W-^A?$1Q_7b!gH_-q;bEYs;GyWPI- zFv~YxEG(8OzOwe^t}l-l51C8Mu$ozZ-IuqJoqlU%T6JtL=q|sny;*hEtMON~%&(2V zOV#xJHcjq$@TYrVS`!ohw1IU)Vs)d+fo1lReZ!x7 zl~T+#bXjeFjE^U>bDe~Cx@VY+B=mkPp&ZG+r{Z!%W9lP8)K|B#NMwNhd{;-w+Xrpb zIy;HrEfp7JjycLVrk7isjgGMEc*^f1V(XtENfNQP5SSd?HPAFa>Q^y1bOX2BX3v(r zB5$74u3PS{%yFsMYCC&rL`_ap>Fj~Yf9a-Qg|?V$8g1MkLSE&Xg*V}l`qL!@dAX8V!-HOdW6mv>unwp0G~8W_Lls*rhylNNe(YTim^q&)7CW4!$V zsjX^>XZ@s?!pXn3$7Xehst8PwlRXs!=!|Z#IT_PjTX|}DV{GVLx9I5h;#;^WC8`qq zG{P)@{sl$a)10r5l+#1~GGY#DlWi{9oo|}|MY>b`L{->!+BfyxVeT?EFPPknLyP4o z50_3n=p$Y{{W`5E!_{;2@Wkv%r;nGpD`t$C27+k3#OE(7{^+I=Ws^V8Q4+tH7ZdX3 zc}m!&cx1%-`~?RuG5I7k7+pQHRMf@DgYI&o$hSU+2ErNr;LG)lm#Jm3IaE z+w%F@N&3a`ev;OIUaH*G#Z~Gd6!W?^bck|`G4LV8J0HV=FI^COwZMGxtBkGMQAc&1 z3+h@bNm4iklTmetyc2%cp7zT8e)VZFOBhaGFDh$Bz|kXmG2(XTe0P+g!lx%mT8shl z&pCJ9+y!y~Z5nndW(%8nS zQE}~?k8g&=;z`4kq?6UhG<;tS)w|i!kClgOkaOL`BoE|749onar>bhF>&6Xf5)!lj zJS$2lQ!_j)uOA*o`-HpC_pR?xRnJd)>|YE>)81?)mB%#5HPd>n?Xf?|N)ri+01k?N zL8Pd*mg8&0wjCTvIHlxVV)Iq-^njJs9Mkl>!@rQz$S=o>uO`kK;DsGVPGw|pW?P!@ zL{NuQyNvt8)p-kg&NL)2d{4!xd^hxJ*ek*FknV%9(%ufzYXUXMVeD7(h|DCgP)yyr-IM^^K!Cs1g`Au=S8r?K^R~@{6eiEb|QG$*K z5TT`RVqsn7!PVEx5zKb4H!E+S!_~rLSqtdq!YS$-OuhA41RYv_?6v?ix^7!0z<{nV z1*tG>TenH#V)L2Xz@B>?P)G_Nn^or%IvnmX0}iJK&H4#LT+r4+ zZSNY4TK|-et!On|zAc#cK=)LP+53YZ@}TAO949gDZT7D)b?tz>)tB-Sw|FKmV%q;M zevhfY^)tulKc2e}gJ*uwjA@U3YJ|b}$48*u2H|UTtm){tF)Vuy&Z7i^Z7nAfct&~U z;KF@81phSBF+C)I)L0iJrNP415-tIuZ7U%7D>VdSs}-iKDEP0WOUuGsxTQl0;3u4d z3C+C`!L}?8K4C=l3gWz%?KwAx{||(o)N*Wr0aG~WVI2XY)iQ2JndEfkoMQ^0>H$R( zl+}Y8B1*TM#;K7HEsss~v?>j*bA>R_ucm$C+L-nU>Z=zo{QcA{PQo5Eh0^8kjKVTQ$Pw5AY!Zc?#^CSnU>^cT9jQ zg+x3KCyils7XTwBkM1v$nSvLGnMWqvvd(>gF|1 z!LpbgW>pk?Q$rvdD5i236x_BJZ?HV%)(Xd)h&?3kEeU0{vZL)hahOFo9cZ2h;iiru zV?Bq+2WJU!p&fxR?(BjY+0O$BGUVMQgl3$OUB9z-3Fj|UNgV zu_S_RYd=Ow|(`%z!N5x}BS}7ggnZ#{un`AT%^EY?pHp?VKfq z%}$7JgDE`=kVwS)b8d94Ru^Gx5)4BSun{{Sx}GAANTG>g0xk%NUcO=|uHzu4p@Rl% znkYd~99@_xtXsr9uK~2QfNcZoi386O`C&&UXnW_{q6&M1^JncT_`d`XD59AD_EbQm S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 zcmY(pV~}Rivb9@gmu=g&ZQHiZx4OD)+qP|2mu=g&zdq;Qh`mq5${)E_lbUZu(%73yE!h8tP&Lzu64Ye`oJh82|aU{v8TD3Izm|gaQOanaCuMo~S>B21wQj_d!`f`l*hm z_0szF7qgBj90*i6fytvS0ToAO^Iee+$9iEzOUA}0yb7%nZI{(b*t_UVZ@r1ATfuv@ z$#AX>nlE4O=7awy&Oh6$vr64K|MB7EWxFf=CG%ivQm6Yq7sCLe4(|tkuO1N};b4mS z{8ki7VH|2d>ld`b9bj5V*wY5n0e0_-IcJ2&lyw&iE7FNR$YWeH!Uc}>jUIn{YS8C( z*T>6~z-5PE1k#g#hKJyADRjUyfP_hd<8@D+20;A9WQ$T#6c;qLYf zksoEmVl7~%{`JJ{atLE}D6;FFxV8s%Bz5hxwysY@Je}09Hb&ZFMNq}{ZqW}k2;vEtqK_>bxUs1X=ot2S$ zE~`_LlgmwLB-I+vpl!X)U2-g)5wuJlP$P1Nk08v(;%50;7TVqsk|iYXyfyMO;0G-?uaiHkxLAb@|L&8x~Q|C zw@hn9b|0?jzX@7(QJ+XU#rzH45lySr(xfnB16rI84Vc1Jr&wK<%#Bxa8C6xWSYI>k z#p^~@X&3~SUEl_vg7I0fX!qZ78p>Uuo<4WFSef-N z!c>&wEk`CvqL4vgF}Xoc80*-Adrh6=Vx1qsQeu;_sI+ImNVvmMhTIY#6_l520b50- zadF4702Xb>6CsTF6v8XZS!xIlT^)K98!oRviD(t`N?9jtFtx;Z)HG;`kUjwSL`Bd$ zW8oLz#m21@t*Ja3 zC9XPYikJ+_>dLdJm82}naYsnO6gJ|fl4e4zo-T%o$JDZt7l^&C5_FVQpmeYd2Ht=4 zm=6P6#mR=O5A7NTiCWb=G6Gq97^`;8bPK1lfSI(92kH>GPgwKM1S~mzzl6Y5yCi2VBuabv zITn5YZ@&ZDXN*QKB-zfqt=h+AeSazH2Ogy>VPf9LiE@jHJv_cb+01XNs=)b}yUUQU7lFlT-> z!GPWr#b0i-R+jVPc4nTTs9$x5osu)9bFQV}o3UBLd%Cu@`yr~9%*WO%#)N+%27(UG zrJfwpLMb&{$XTfU?bo-#b=CFcKsDvB7q!Shx6F?}VX}0CF2lCO%ao<2`tL`o$%zT< zX+ur->X=<^EwMG&=b%)2>ZHg5N=F_8tL5pvp)*bX@Ze^K?X)+;D`bvfeaj;$SrVqX znrk0i_XO=gy%Yb{asT5Y07h+KJXPblKHd5YFVE(eHpFlZ ztr4O*xkX)Rbt`~!?BN%*&OV7a>B5#j!sdRu0mGw@=2%SunXmoJS5%o3fZ*cv0>Jb& zZY2nd-}gtfJEDx+mgGGyRA0^`duCOO+HY)(9Xbycd2sJvw52_Yr77o)H zm_S(aHsQ`ID0lQ6oHa@uaM&lK$=gAh(*si+MYf`;wW%OMfGEI@7QBUlj&S}OvV^XXsu71ZF zyJXfhS-7;VV{+3R-rfAX&G)?Bjhc4KyS$cpaWw@eT(`BoVR>T*K=#RGC~y<>>>YmQ z@89-FLh5x7zl`12;tfqZ@W4o!Ym4q$6BGb$H34^5boEGBwC@<_8)}cO@nO)9^-Jsb z&l&{g{sAJw9RlBs#W-D8A$A5X&@cuY6(v1!%$gRg;`C3@bTVF?Bj8(Oy{|Sq)5V** zLd_E;5To<@qY^j|*kjH(o)hBHp`tsU<4P^tR2LQP&GhfVhX5c{QQ+AQOXEz;;SF_j z{^p3g=0HZvdn4M9?d(`EMj)<>|J&ka+Y8KvzotGCa{#-_MV-<)zN(i={#E1(Bv;gs zKz@N+jHbp6$lG|@BiWX;NBbI~6bw`~+n3a!#h27bzmyvXD%xix=L5WFvNP6%Sa1kh z9xMQMQ+$_BjF+60LW4yvJqug}hY!u6rM#hkuJ@>9d6>rH=Y)DDi>kl+z6B);f@|J) zi!(e0gzF~(MqFfsB-afJ?a=7IV-kgBf=FG6!HG#TOB*rNaRYZj( zqf{Gs{`#HL=eF1icAT(+Bs*Q*9T4Ifc<&}(ajK&L(CpK?_e+s}SBe-mIqW~sl+#)b zp$Pv;qKLVwq5GdFhOUb{nuR!~I_NboY`F@j8?{*|#TsSn_&aaGP8?LXi$lj=4mamn zv}tN->-aR~uYL+(0Ra4eDe2@=)1~4cNNxNJ;(y`bY{6jRY-DPimB~iWs2df@6W@&#yJVe(^+Pzpu_!lPE|=(UO2J8825> zI3g6D)mCqO-omOUV{jR*(P`W)ZA^#?W5t!CBC~;*wilw$I5~?|LFyUe2+pEAcnjNh z3CA(%DCF6rw{}N$y~y$%bF=5Q^YXU6wDbKkDgewGVQ}V&TMX}ujIqdAy$6Wo-uILr zjEW(Zwtnc+?w*aoSo$P$yHCKTuh=tV)5JF4P*R_Wh|!nKE}^$dvl;D*!ISodw8cxU z&$GwHQ)|1rP3qR>>Dh!PaKi(}=C0Yb205=i8CuA03lW1en7dVjGe9||%bCb+=hUan z>Ed)V^6k3K5;VALa2p=yP66aMH&~V!)(Z{r23hRID$x?7X)vqkAZgU_t5i?)e?Dw(SSZ`jIBdK6Tkov3d;vg7v6+&}6--q3 zBxFp9*{|!aO27$skM47CFq@&{@HOZVVt3$*x#vvKLVIdon`pqLG`ZKFdd9%ow-R>l zx)1ETmYgl#y6-ybm@f~7#~conPSTBz3D=4g7BgS6GT)KdMY7cRCMMZPNu62ckN1L6 zu61ZftHmBB2*1+3a|8Hq;Z0f5HPO^?h{naTCtVrnBn+=RYr)$`dpD_KbIJQEa5FH5r z@QbQN@?liWcg?GySX({~kq9}7q0C<_=)s$r(^Y^|Y%##Jwwk`Zf(83Uxzy24HKLmL z!IOA2I=HF@RM)BGZeNLlMKsay-8skwc6aQ_V2k+*s6EfsdqvE=NS{fg+l&>M^E}M) z8!0=exDPkk!^D-TAy)?-_IM5*cv@wj0d2^Y+l@$dGxlXgLelXV_A!H!M^V+CSdjva zYv)36bpxQ)V&Ynu#@288y`b6`*_|I3cks5Dq`E`*kF#|>{$J|KW9^#KvKffx{7A;I zx+%i|gNM<#YI_kFD^o(ozk0v8-&JRJI~1DXrk%FoNG9%}JXn&fRCZqbHxU1H@(bEJ zzCc>~2&nR7R}6E(J8s6p;|g-X??dOL#bf6Tl@E>w^v_?JRX$IOgU`T`UV8*rOUnx~7Iz?#Mgr_scRmcf?9FeC&-4p}Se= zwtDPT3tV>^u1Q`*>4}`BLK^&T5yH0WVyuW);?G}cMi#YtpO5Kqbp~S6^LxHGJXupE z$ua<*w5hUWnUcYQFF*0p+x^q3fuM3tTWx>zZnl0JnVFi_pX}dN=`&UrT2n7XYz%RG zBK<(P_=Z7QSS3~SLsf)BHaru%AVxW;n%O1NiChoX%w(QAe z-pZQU*S)Bh-PcNn%tF|c{UZ1uS^F=&Dg;vl`7gP8@viDa009CL1OozM{a?9K1cpwO z1Hl9&t6bS53!(CXCJmceIjPkxOWWB5SJ1wq!HonN%F2dWDcc#p+rXe`Hf|9O5*}&E z`a*n};K=y`5sZ66mLW@*UB|Y2Tywo_yI7b5zTclg1+il7NaGv#2rZ20erK{T*T?sn zgG`Kco0-72+KI-u*4gdBi+rXNyuWjauo?hXO~RH;RTycPz7)Hz@$jLZLI}W6oh};s z|M1oLHWEOZbX<8rZz$bcDqfwnKsE2|YEwg;sA0mW!FsmRgsD`>EZu8IaDeVTq20I! z-RuAL$CTXOFHcCj7A+rYyhjg;x%}YblS%_H zzx}HePUHa}-@l#Aw}i;x$KrpEN{vkgudG>wee%~>)7EB-%6;;$L#MD-+esc&?DQRj zV}?y!LU6;M4^KmG-lp5I{8vEeSlnBoHH>C950i*@8s=@?(G`4$HZC*iR5zuRET7@( z_zDH3_M1_qGAE9)C-a}z*z&V8%AI6MjsD(kvS57C|W zdKB6=rxk9YeHwb)!Eau*>jlyF%QD>GRJu5+KGN*W%LC>%V^L5hbR#{{v#iDgv59->_oU>ctEzshYzX- zmcPO?^MrW-qPC-s<(&8`EgWpVBJ^(m)7VAp& zV(V_zNRRRaGE}>Z>h<@?pMc(Xjn}dpj>gO_+Z3o{ujeeT9pBU!-yNPEF0YTB+8zi) zobQ%jI=5}V2$J?hm@%1U#{h8(#F2pzEa71C)|BM&qC)5k_oify(#H$L^=4`D{qg;B z#>mB_{J$7}H%R)%t0HrfkXs~jhCUE`6`&CGONi~6H25~45R6iA-%0sOhbT}u3Jv8- z?Ki&aBIl+WCcX-TD3IMY@$!=lVhn%FNC|&8gjlfgmhREO=vn;g90j;Pg!m0m^I5Ky z3`A^F9Yn=9Z&p=#(6~m(_fvlirj*uo^xRjKM>w=kw^_{KaFyiZ0c?ZBD@EyUxGAcQ zhgn1w@;Oethi&IrU|Q1oF0hId&dewVyvnqapUamSO%}v|VzNz=v4XD|)9g5hFEP=w zh~f6Xo7Aq?D(Y(Vk^o4hmpCnS-hWa|-h9yLi&B+!(}LV9-}N25RU(yM@KwU#+riEK z%%+_u=f)?K&hXeuir}}ns3w>O8%_04#LZG+6lW!HLy>F?b=j%fZNjG>Z4Y`1T}Oo7 zihXo0G9N9ZAC_WKi~i!N#}3%#6E`|oNcbjpI`aMNI(03SU;ru@JY*Xc@!e;*TWnBK z7onMpY_nKHb+8IP?5QkrnCu$DJUcV8PReMY_*S0KmT5O%-jw}raI|G1Fziih4S5{t z9a2cmwFWiXgWv7{R1xHGn;nzQH!xM6V)_pkuJ}cwW$efGzeSv+$K>J}e}hSO)|uE3 zPh=WNKWZjY7k;5l(5L0ZM0yI1w%*#QJ4O0vk9wH$g<-h)V(cv3`C<7J zHl*H)zzNLXG1F5GwIuzTS-CUu`a=0kQo495dVt%%vjAZG*BoHH7RMOuHH2umeq#5| zIe|BFSF}|a$&a#iRqS=d>_p`5{9e@Ovt2J?ke8$;Uw)ci*s}4|8^q!Ej}@?dEsPP^ zo0;5gdk9ja4yO;V>-Q*sCI2ossP&W?-Ppemu=U?krlqLVwkfakA2UWa9W>41h4I+r zgzrD*TL9dGM$lYZZ-}q62Z$NylhWZCdd)q?VuH|+#*I9cF`2Z?x6YjpwGP%+Gi;TV z(jqUt3JnI`gb)Y&%wKtH+qj%JjSoJ}gFC)?jaEB{xsW+sXHs{%4|Bv~ezT&O96p$* z>v__AI9{iG*kszVI=flmSVZ>}O3h%s(6SFa4gj7vH@umLVF#oef4gVq*%^#*ueVTW zOw*zNX`-hTsSc%83t5EAW*TjoIN#i^sT;+P`vAY+tro#Ax3GPI<1ZE$M+tr#?bK23 zsACPJ5qeIjm(auiq#HsWUo>*~*{Rcs!pKFYL6^qdsK}P%<(}`pnyI=TR(3XDr;N=w zIRy}(gQ?&h`++pxs2e)RX4*Hv2JOf_+^xD&a%fg?)Z)y#Lp4b_fM~P0*dNQ(LatH) zyZ`KH6q;+i>^Nf=V}*3PE%MS3+wS_YO>9i74|R4N)`4+4)K2j-|4A=3XMEWGWu8;j z)gkeUGlZ{wbF_fuDtOSv)aZpy?Q%oQ%?$8s3^P@p(-LJVU!^rpSM^1|n^d!`Rcr)B zaEw~OkNVM%@xJXs`e6Lk{^w4z0KMCTH#p5xgTX*z-}4xTyF$|)Z|p#04y)#oI>n=Q zS8;f}vg=C`yWDt5tZGMB>_x09Uof1}x857RRS%x7(;xu7JIK-$VP%eMlfUDdSRTND zWijQO_1ltKdw3oCjz836QMFS=^|W#yo?6Yx;?+63O+l>I$PcXC^7N`EoV$u^lMk`$ z=#3XqX1HcAI|3ty@BWcKm?I7|tQD+1R7lzBnoLv$HYs8z-(r6rpkM11qjq;qT{+ymC7l+p~O5Q0N-l-?}=|lVuHfqL)TqM_*X7<#C+smui zMREfUU3|b)W7x0rhK_}(N*`i=_X0v-l21y>ykpGWf2Gi34g6yY@1=5}stw=^mv~h- zQpO|A5INKkx*DZS$2U4`bxf0uVIHCOzA3#jVbc$}8NuA6BvX3ojQ9~BOPFo>_? zNGUJ4xkrACS<0L2+~Y(#?L`><^9Hs}(3Lp^nFezUP#d0Mef?ngzlwO{t(|)F52Ti$ zfq>}#^$ZeOMTt;Kt|B6G7Gh=aQS@O% zSHmDCn#Vw&%3DF`&||EmyUFRTgdPd6~;+!q?n_c>qVH8qqAmD zao?4x|K@#cMnWg-q-V$wizu#C(h@A4=q}Pm^;>4OZ84*8YgUy`w~j$#y0pfel-D(o zTB>hzjxTVR1o6J`ppb|I>Aer!>cq%}k+R;#E^{hW>5*U9Tc2NCDM1 zVx}xcA3LE#%eV^)hJUmS!Y#M)TSX7g@d->(gi! zi37O5{(`gDqekc%x-`vfXGHZ2@08D;ZtiD9x678M1G1Uz(sF8vp4N_(zcfQJ`-${q zonkxa@rvEPJ@e+UCt+B2@RMl;aY&GN<{Q7$(o@sV_jypB?alNx`*D< z49TY2UXUfpF0fV+i5vdyPSqnN_)sDyEC&$WIBbNQ#hbB2(nMVYG=fx|jn7Oj89^gJ!4>}eIi!k)H=(dM5e5*P zd@Z55)j*UK_^m2b7cq@>2Ypzl*`HH~sZ71fbAa$6qDQ)wefN}4p(k`BONfgYh71^g zB|qEtAff#Z{+7_a;rIpRc?mXC$P*&39s2hJ7{nPd@$pC?+(@?%N*$@+4rC&1u(0=3 zTr)B!mz?Q{aNGpjNf@~gPg*3)HkLU2;891M)P~~pM@@LjE@#Mw)U6@~HuZ)3ZksSd zGHJmyxQDPgNqx*D;CVuUDJ}iiRVBa}0KQjTZsF3SvLE1iY7r$17e?U;L5&H6SGK!L z0ygk%KoBv&@bmqE8p@n+#DJi{s4R9klRfY&K_@2w3OIvYa`enMg3zhV<&ZrPKZ}Ub z-xcXauD~rXm33!83uILxSwMm!KD0G4VM3nxm51}@Rq7k^KX)V8{|uTF>44Y&%ZE0e zqlN#s5#4&ncdlLZ@s2py4jwQh9; z3XkSs6?eZbKF+Y7zDd%we>F;-#Olu4f{z9Eul;;S%>u677P%Epr`yWIY(2B_EFqQf#wdB9^IysTfbGs%wWCp_T=qFa`%`L zMle9;fB%wj^BwNfxZ{BMMmGQ~#3w}dCJOh^d-T-o;mij)jPHqYeRkvakcB!-?D06i z*03HBxPBJ?Ch}DneR2B~97KS-99H4}mg4`>O8AV-`l>( z?N8eJEiw9Y{#qZRVfh+PL>NSmO{vCeO`I2=M=#tl%bI^tFxKZ}bZQI;rk5Q@qp=FN zTpp&@YdSSzx;@d7MQ zzn>)?@ze-DoUZTwaTQ zstUBWv_b_jPfte4QDp)k@H|Rhu_{OsSj!+?me^Fpn*IV#m%*6CUoeP+;#_R26z`Y18Y2Z|zbW zd`5ESNksDF*rOdF~2_oS=0Gg~Ql7dnRei{7*b zm;1O$x=8K=tsVD9^^lRntx4qaKc+U*J}o|$BlKQrbqdF&rNtCD@-Oo_w*K~$DJ`|* z?bA`L)iYx<`B8valce)Qzu(IZOe9_csW0K3c2i2;0YG!BaBSLG%33^RbYx;887CLx zpLe!woyS@W&uy9Lt6gC2crtT)PxBe8k~(3AwMWG>rrs^sf_k3HFT2M{IbML=hIH zc*k=^M{Aw-XEPG)uTF1(oH=v%mgN4ii=84)pSf%$V08EOUWaa z6o=SUqqdqJ4(ppL!-)#h6_+H>ekZSF$7oJ8PY|1pb7{uI?V#-Jgd;04Cnak5N*ame zz&+35^?AUd=Tc_q<|1t{SyoqOgIP;m6&<;g>^PGX!?BzxqXjYSsHi+V29v^&xt{>W z#MouZv$b&|RZTw$NPVSh2u@0>Mg`)EwQ(a=OIR6sOU6F8Q#X}8;)X15z=zx?x&H(z zN5mB^b!7W&CGuQO#WdBivfH)>ffSmZ^J;#$y9&THOdh3n)FIQ82LI%#_)QPSLC!Uu zn7l*IDRH$tJX7ut*(s9To^6=EegoB~NUj#$2ii-Uyd!hw?Kz3uTee=|5<^pEdMV!7 z7FraYfuQ@J|DqmAV-2?@E(r%M;iR-*7`iIqB=we?qj=8TuNzvcilI<>JaAI^^>;6f z(;5)bmW7u%h=)t*Fgv7kO93KuhChQUVywBFpBOq4axf@SaDab6;r%!iK37%&Hn*;f z=r+A!zc@ZGJtJT5DM7P_|CD`dd=-^IzTDR(XHTD&ABNZIIhr}KUDoCn>=sr(q3mPGSO!dZ zWKJlqY9g_ZaL9R2*CcqEGfk52y7?Z6F%*5RRlf3Hi8aO$Jl(fviQtqJY-U=Rh2dvn zD(8E1*r+nqniO}Xqz}GGUmaVP7f9`7vjvm6$R?MqzA5)J%Ty{8X{+f@tGTm|MxtF5 z_G?YG6iY9c*y+EpGpx5vZIpgrl>ss`jFpQdos*e|l$B3d^|^YUt=ViTf;A}2jQKBg zFe-JG@E{*@92(iH4J8|%m0|>Hw~;l}^0u3*&G2N_l?EHX2A`XfXKumk%g=*VL`qH5 zmdN7YD5~pp=TTSaA{|nt8&NYlEvT=&E5vw)U!U=wfz*?rXS(-CClFbV4^Hgef^ z&rUVxz<=yYeLRM2bOFXKo=pkCs=_^OHGahy9#sBj>yaAUa7)=cWmRAkQ)TNV{%Z7p z)oO1NV&2kspk3Q_&CBmgtO3V8S`%`ThK*F6CDB|(Wk)MO)ml0;TdXI6na@~;*hb-_ z#lX>@zxMs94?G(Xh%UnytLRj84?fEd-iFsGZDL`1Jgw~BCOxtn54?2Hh0>)!YuH#y z-wQWqj?RvF?tTa|yQISMG_f3@my1(Wj%8P7mOfJS-5T&7CmgW76aY^t1-Ui@qITCb zBQ|On)GYQ`TJ1u58ZQB-6VxiojaNU6?n?EKtHuj{K6p6`6P^{tv^EDEpH(dTnbSEQ z*G7hy)qifzxZ_rAKFQ*`A9_BE9I8D;-oRJ=XF!GlWh zJf`ncb@Sns-D(sI1_0_=Vz?mafvaIwlaBnbdB9dRGiud0LYnTUS)pc$H91^Qw!~B2 zj$GclZ$)so?fHJd1>FZ&tW6&Le@32bED(3qZ>7klPTG)&Vlt(=gP98~OW152@s>IEvz zZOc;cil45^SMwx^H~!U_r*tH^rf5#$lDC%Xt!NBD15cya;Nixob1rX_kGR<9Eg2Gv zq&URA)?D76E>3Fd$^Th8BF|dFFyJP!=z&~z8M(+5eq#NGBqn-$;PMu4)Wyq6p z47*#I+L8ObI=nds?>Y=;_9Ys2)KD{YAp6B|-~vz@zK|SaSWJlEP;QrP`*Vc{+h*2w z@dd?;)zkc^17`J!GQxgSj>A3VMR#QT5X5`n17>w+yEy>V7u_+=NnH1!!I_+{FsQEARJ>v~P z2N=+b;1+^_Hj8s@upUFH~yK@(;il$kln?0Qyl0dmWCQ0ienH!~~( z3@>kj%9XFv<76MtGbZuSB3_AgNYyUBGD1K{V$P0Wgv6Z>Sbk>n-3u42qXp=JxWy*$)N*{ezdv=*Fr&6hi&!^wYSj`%8mPhfBMZ@MEucAQhP!aUsV!c5H z-&oHj`(V~Zhnoh(3KB~(P$c9_GR7|w=Zh-eNRsLZXX7^243TYq4JFk1(M@^d9RhZP z(g~3uOp;dZEOy5#ap|yCJEWl~?$~95E2Uz4_4LRlqx?cUq`^Y(W2P@29l3m;&Jc@m~L9y&&ueGVl^>2ICZASK?cC!+6$KXvtvF z5q4Y6E$Wrk&CM;#&&|)>J;gWwqU)#K!<<=)9)!Ht_hs9G>*6Qt#@9gq?IUppaSr60 zQSj?BQ9OQxK`w{&H-MM*ZNBWDi(b%-SAP#0f4?;cPB8%1)V6>%7&vDrv6u?x7L^`; zwwhNhBX3{pcLE^dj|UUj90^3x`<0;&kHzX>Ht)C+zhzl z!1=8zu0%Pb!nfuaJNV?o>-PYx*+>D<)WPt4@6e3QQM>FAA3$Yf8b*<6<=v~DSL5(* zt&6$uHJI|G&9U~lHNeQn03xR6ZnP-E)jnE z_!4O&IzhWlK#ikBK#Nmn?x6qj*Cy4y`;ij|PQg;K|2EZ37!-;cCwiW|CbArFuFos8 zm25By@cLNvye2bK`7M3059lI^%fTiE?7P_91n8$$k1&62Tr15mg$AWB8VXanTz#7T zvP6@pumU4E4z|XMo%MEGVSc&WK}d;OCOdnz&02jA!2STcWZ+n)Sx;L|G}3LUNxKB; zLVKFEh96%>Q+sl~N-Saa$eP@MbbF~dQ+6Tqz+6KvwLF-_TdubJ>G9NDu8}V+`P;FJ z13lcvs6@*iB@7@*3GY#h!UySl0K$GfN&v;k`bM@oeaV!q^ zXaBcnDEeAedWdf+cei>g@XVCs5p7SnD4}28;3Auh10yo}f>sT-ty7MpW$9cpE89fa zXi6%VJjXtpF^ZFz#51SLnp9$-xKSNP^mCCfz=4@W_5kmmX{%zbDIZ!TqM@|O-3B(5 z)=o}5om^b>DWpm$xK_yH;ncoln4;-^lc};#3uziIBpu0G(_+cIXX!NFVHKHk&c{?s zcyFek4)an{+;E%r_eoMrk@7J*UygluY&hH}TYq9U`&$;JuyF|sU%m&a+~9ew7A!3Y zAPi1CHK)$htdz5xahPzDF063(q3 z0M`spQ!Zw!a6+~()hN<>msR`nbc&aP-y-pe1gWe@cL*P9tJa-iH7yori(|*(AR22# zI4YR9V(mK2N@I0yqQ{s~5-C+e?pj%okk>F2apA^dO^OU+8Z>Wdof&LK{0Hd~z_U6# zh~r9kc{mh=7DG|}3(;=5^1xiRk=7@WBM=vYoA2uHsFt{%!w6YtjWjk=DDpFF2CI8u z)G3K$4?T+S1PfuE2J3L&yzFz|>zWFPJh3K9Y~VEKNg+Rev^A4xdIXx2i`_`2xN#)X zU=LU|U$L1^z9H{i!Pt0L9sV2{0FXhSG9XG8-}D0eH|6(7<7LYV@FF&D4=~qp zz5aZANYBt~t$O@+A1|jYb?9M*Ez;tgwEkV^yo0w;rTfw;tCUFIqzF~b=_b4;rjW5* zfU>}CWG}U#P1{rS0jVYVXi9@R-6rQ2+O&sTVprhUyZ!Px)@cbKg?(4Hq`j(FG z>^fBVV%(^_+4o3f_^9%1p5w^O|jSNZ-fAeqniQhO}kVr z@z87+k-O=*%wO5qxTyTqr0U2vpyGNbqRromtt~PL%@^LZrdD(KYjq;sAxnCC$c?bh zEZ7YlY_QSz87JEIGq6u-PP9$$B6Y64x6X0u$->%h*0|Py&>~AXENIM8RJ^^kI$CHe za#0yG7Q-R)RBilo)`Ph?^oB`O;madb#iasG%Fg*;`6U%_$)wW8XHA$1&Wa&f*HObf z%FTM!SCnzkOKafkX~4+@=&bw&_eB1xd!wrUy10Ne$T~HI(kbqR#dk7~3SLQvO5dPd z#WyK0oWL2tX=&i0U?-A{SYF==)#dakjiY!Uy`ImByQ{Y zK;`X=>UU2-y{BzeF=dFh8!VK}igSL>o-zF*7Ke=pvY&wBD_3&v3FuiFp33mv4Kyq1u-l55S5k*x|C!;N*?D=xAtU$rL1wxE(01|7UtoV}qQ z!<{t#&O}{~FDMZT&uMhewnowMokG`ix9``J-Ip=mEa3M@^w6$Pr^cBt4EvR8*(myP0HvxRUDp<)P$NR#En8t&PGEiIhyLCw9Bkb0Kp8 z0pBWd!_3bG(bTP$dx8wdP3<8u<*YS}eEc6!r z4^0>4TPcG&uvj14!HA4E6-R#5IB5*x$zY|xB@Zpkc4)(|h# z8KPF2I2M#fn8{OJm$w3*?8;TZZXM3(=HjC1hT#z1;@vItT6BtPUwj)TTPsGoUg<(v z?synwYM?8)o|LS{9!+RXi7=PWLAN6O`ZJ1z=|}hjb50_o2ZA5)6~>(#9Hr-7mJYw9 z*O3USCCy~6Bm-Q6ciKp@1}=GV*FEFgcqRP8s|b52&a6BM!8(^FR>2s+mD@B;rm+mn z!D2QVlgh(#KJ|1$^f~kI&~v6_vPo~aF8-r`a8Cq&{4o@`WWS5qFp!*PWJzA}rxSK; zYIyT@o<{(Tjmr^J`EuyDlh6*LoIMS~dtiGqn%W;#Rza1V;(ZD6F)awZ388l62K71D zijczxJFXSZO=jnsqS`rtzGRY&#oWpnxgzweaR=7(lc62gmT;>`bHKOp*&ayfWP=u%}c2JNtMJ3xcUK zm}B_asN!wn8@E4E_LN8S`R4jzA6m0D1aICnVN!Y`=DO@-?cDKn<$OY@4#gigXo>*cnYe zt1f7Qqw9$@RdU4|OCOT&KAXM>?-F#zJ8uQ*Hcz%F2I00~=1P@U3Tmme5tOZXi(J(M zDL!8KU3{po6%Cdb4wc770fP> zKssn*jGK_lO%1HutRL%6pev^HQ3H6jfSBjV2^+y@uR#F5-sSl0m=NAF;tS|Fn6|xm zfnv^e&TxFvvA?$uPSxyaBxj5sO)vgI0#$ZS2zZc<$r7xpfj*ZcTk|%x(AOuAB@$4* zq0FA}FnV`E^HgMvShZcdTD4tIo`!1qlwT4$Y)*=2?CktrTDA$#ku+mh#ywJOB2v7N z=s`N-w=N)T2k3Igax?(JkJ|W78Y&@H(sMu`{5P{T`+TDNbUa5tAm)qRbX2NESwRR( zqMYM4NwX5Cz^v~+9eLAYOFr_p%&y$qynLmRwH0d4ks-Ju!Wm=vJ+KE@+n=XAS!f5P zi8!?7avD5grxy2liZ*jsPVvJ0^%$MHSO;mjRS2-FbBY_541cSf_vOzcNudJHCn8br zPwn_!72R=md-ighLNj27S|#%~hhV+mofY+xl{0wy)?>F$uzSPhy)9MxiQjgZ|3gA} zZhIIZBBHvfuGHonH?1{6C*o?Kd1F;!^MG0tcmZ><$N5^D?-qxh{n>*323Ny#1J8{I zEf2sdU}IEQ*?R+h#ByTA2VLY9w0T)LC$hG}DR8r627D3fF-qc)sx%q*k7$ccww6~f z|A3%DCJ#)(FaG&n23~If_Yy-M2&Vh6iWqdK(SOKZiPQ$_Y_L7vkYGveABenjhU&l| zDnKBN{rkXlhy-bip~AG@Y4qh|SpQLXwh4&ELYOBO^`kqk6`pJ*8Sp_mSt0Ck5R|H@O@#(=fQ*=^vj;2t@Fl!2+Yi* z=Gjpzl3>d^Q5JbtvgT~p4^m6mPpJ6f2P6efnW4G!svhLmK2>FDh0EzYkcKxZ(3_7Dfd)#mk`k51%wd7%ET#!Fc`T9jjAg$-hXI*e1VHba6_^3x6 zuq|ZCkHM`jJkfXtYC4G^bVf4!4mx~BAasUMHuw#tO;A|##zN^A<@>IXPRfe0aRvE^ zv+B;%vbJN~T=d$F#d8f_l?{kCVJL&Sgo(=pAXMQ0t%Jn zAmz$Ac1$rI%H{*)m{d=9l-ZRC3v5f$yTONkq<`XJ;<0(n)N4q|J?1M|`iY{4f1ve7 z>7TPV_j~&Vr}x)Yk#Emyu9R@@Cv zmWA?#>QZruMGAuseUOdlt1d0C|J{6?ELip^wN z&3<-@65^t*IC7--Tb}OZl60A#spbW52L2KFzm2ulaKnoN7$6{O%zyE}OAERE5Q!Z_ zNPuijNMDo{tRI0mzxy}dI5_bjBB)((bxf%+IZ3>YfPT=fFd}HK!$I_TS8;BpjHP&2 zQoHr}^d>ov1=ob83p9W~>LLr(i$NmuD(ix6Uw3mqfph zTGhyhD($EiI6{RcP5WkSC~DVEEJ9h?Fr=C(BT+B;(LGT+@8xI`L2TLWfl@m_7SPXy z7JD#A%^w(B@rub`vyb8_+)sh#D?QB4TfV>W8by$s%$oaf@Bq_8D9}rZked){kPww~ ze=w0Sr}6n(5m+mwbDc7=^3^8t?LQdnQ1Oc1Q@zXc|Jt|`aH!TdF1sSB24g47*td}o zQnIflbhFhAnz39-sL;*cji3jeDC{rsNG(IWyhC~3=Q9{I+7PL2;Ejo#CNj}y1x~yYKWC}4~SEX zE(F6d!o=uS$ z>b<|%YXbuVYTZ|D8c^R@w6vJ32j0}=G3j@V6vp1FJLYoMas6s|C0QW9Hm>44>78*` zGH>^eb)&wkCYfB?2aBW%{XWo#J+ntk+-dGLONu5K0&7Nnthr{hQ&R>iO}(#$d;&*9 z(0YZTzCU)#-PW=>UoG!wnUv~$y{jsG*6($p6jP62!Y$-$WFqpgys%~F;o1TNlcS8+ zig14{SWj{%&vjpGO;&3NF*x_wCkvT87t4j4*Wr&zFcEW`WJDTAm@cucS(eHjXjYV! ziP0M&ppn6->3W3g_rvcY#IBBGC|U}=KUuu5#pvt1hxJ>_Orl1_4AhO=eDu;ODZ^u$>=L(GZ=vu!~8 zA->AKW0n2MZ^Z1f9FW%on9fHu*&ccrc{YmW8$t7%rIg&djqTaVuNbp4t2yRKo>Ps3 z2vw~3$%6);YZID?K_oq&_Y9|u`J`2I5_rp{CwW60TzqZsQQCus{T_-BB^4D`rRW?u zr{7gBmr2&K>m>*9SOD}(m6<$`9W?S+M%)g4aW!s@@=B#wbBLcqCrsLM+#7e}=<-n| zJ_a|gq((cB;~HhgauWD9PH7hLKWTq;sIzEb(e%4XYbE$WrbU9{d#PY*=9XTr*Q#zs zUi8?+7rr0ix-wsZXx%AAvwt#n)t#|S449kZ`w`cI`>ORLUo=WfExS`y&A#5WRafo% zt_^Pc>4|2G(>E~6PKT1)0++C2ZnFoFTrBU3jJZvGN1S~@EML_% zf<@L;^Wd23>fj9v`^WVu+Sl-mh$^#vJjP*RhPV>Rw0H!)*6^}EsrKjr=20$pu}Cpx z?dyD{?#B$t*hi<-+bLX{ndqr})~r`t+OCoK=f(Iew_@Cf6pTUpV7p0`i3vOIT-|;i z_7U}9%wR)LO=zuwL*Kwkx+uTIzXg#c1R~=pBPjz^@i4K-<6OCYY3%0$+i{goJ|5<% zvpiW=_*Yl-lMND6tkAwfKg{E9J<->$zyzG9*VmInBSdUwLLD%89v_Q}PEL!w8CB z1URQ%9&0%ozD1cnP*@sN)*i|fFz-r?3=kcv4t-3e( zuG3%ck!Vf4(3!`#&b|rkD1IVH^s%yfrC~5W8;p(~%HG^2IX-6^a!&A;mH`Lqua%$#YfVS(x=B_z9YWv0iY+#izItNraP zKfTsaR_uQ7T7xbVa@-yB#~^R=j33IlB+5p~4pK zx2an4wZ%U~xPsnHX-)-287l1#9ta{Z`Bkx$hsDe@R(EFmd`7Up`RsJzE%Ip?W#Dct zWy!%rHb?qF>FU4Qx*uNl*aa_Q#Kn|P9*l`@@V^i!^6CB=J%qc@i_sFToYE0qVBzLJ z&R71r%TtjnESc+cA^lq}k5l1%#pw?(6rMCGYf}zA6)Y1b;XONd)9ElOM=}URR}vcwonc4WHbeTkH z0J1E%>LMq-!}G`FIUG)Y^i(n*+J%X)3c-Je-~5GTspDnyWimH!(-Ca?s}c;K_6T3a*c)kZjvKUJsS}o*G#YrT zzL;#R(DAPiYgbC-(bMGuI$h(XwdJAN#oY_+pEWN530=}>l8&gitcLiv35ZrQeJ?MT zDz(yjwdYpWk#+HRulabMrZZ&v8WA)Q48zt@yBo2kUQhSNAiN9q-f2mCX>j|K#Qe^t zr)1)ZYL5#)ZjyT|DB1Heb?fxi^%A`WLmk8_1jU76!;2lwL_#{KTryvsZ}fjLgnjw( z`upnp$rV7zhufrS_Pf|SYL`t_>pefLqvkS6cPBd89DI{hG8yENo-I745=sQ0;t$sI zyiP9$bYqEZzI{w|mhXITUf7>)`%pEXXMC=`=zcmnG-PBR2!4K1 zeevYMSw2ikY>&VdolUp{_q9h<(o|HK5|_Qwoth)8|2#YV{w(ReYqbeKKPo>Z?X}*BYa+g5 zX)%;!$F)W;Sta5ot-W|u%Ru_o%K=p zuSJO_x|(fdu-oID`MXC+jtXDA6ux|tX1|I+8jO!?eO(;k)Y|;%oe`d=c$9 zAcvWx9bP6Z?V#;<$M(SbgeqHDpIlP;EAf@8emoG(K+88x%HK=d&-UPDrR^WM*A0_r zem?=mk0ySnHMi#DB?=2IpBMWTHa=FZ3A1OV-W)d0=ROJRCsfS9`pozQm_5z@yfAz6 zT`tk$fvM)>2&hmPD_AJ3`t*hgn2_?b0TgFpf~={$45hDsNtSGGB44fcOcg2<#=?5U zc!(FQ_C?199#*D1==an8Oz?y%jX`WMRhZhq43{m<{J4#tys?D=m=go1{a2Cz%zz!gvgaGTF@xkmAYUKsYwpuv5+sDpXD z`{cHI0jm)LQ>VL^O44E#*+#;P;IG#1prf;8prbnkBke$LYT^KJ9fDFc^9jrDhH-ZB zQ#qT--rJO6L;A*2K_|4q>#PJLdJ2L>by_9A^L~F;O8E^p6Qe3&@7Pa^-q)$O+~CgPsc7=4t0MG7-sX*baWyx&Usxbr%#w;n{lvr2QX6G2`cI5s|0RX zXn9lPuH11GAWUmTABU4c3h3=Bn1c;vpZ#t&E>yfzI}2dHd*7a|;RuX(Kmn_S0ls(0 zU^l}Dx@AHVeyt+T-{QctWDHG399Kn*Cl0m*A+q6PxA|0%oefUDDvaEW0mgg9fcO3^ zKyx40FBc$=GpEjAA;^(t*~-axqjD(y%z#7RURsV=NcSJ9ppFbMc|;PX=Q@b%hMSxW=^M0{$LO=(1`>%$8l-H_2ALa9dY`Ac}K!BNGvJnnnx z=sIP#POf}7$dQK$%XtI|dyz^N*5@I(RTx00l>vGG9rQ*6X5CsQpnOjY@*XDeYCj~9 zoJ|!-=@+5BNI*^#q6riv0$zGKm@rHpaHmHMy6mtu2l;y@$UFTS7+YQ7-y1wuaD^aA zo>sw$qilk=Km}jG<#ZUPK#xc@$OtR2JqnyDkjcj?s0hxQ|ASDXIu%n*MR@n~(CTa| zGgpC@@MX{`ZJ5s2wN(7iHNy-DJwm`{Du)cI?YZ|KsI7tePJ%Wo!$<)wV9Xt&^^bF-%?^4503&M4 v4VjJvd~60wIBxzi|9WPjeH;PbvC=ea5@6mbu%8Ju719f82CwNqB&hd4K`B1Q diff --git a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..95d7279349 100644 --- a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:38:58 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/dsl/http-server/gradlew b/samples/standalone/dsl/http-server/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/dsl/http-server/gradlew +++ b/samples/standalone/dsl/http-server/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/dsl/http-server/gradlew.bat b/samples/standalone/dsl/http-server/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/dsl/http-server/gradlew.bat +++ b/samples/standalone/dsl/http-server/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/dsl/http-server/pom.xml b/samples/standalone/dsl/http-server/pom.xml index c25346ef07..222b5b7c73 100644 --- a/samples/standalone/dsl/http-server/pom.xml +++ b/samples/standalone/dsl/http-server/pom.xml @@ -13,15 +13,15 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT diff --git a/samples/standalone/dsl/pom.xml b/samples/standalone/dsl/pom.xml index 0515f233b6..c56bd4c79e 100644 --- a/samples/standalone/dsl/pom.xml +++ b/samples/standalone/dsl/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-contract-samples-standalone - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -17,7 +17,7 @@ Spring Cloud Contract Standalone Test Samples used for end to end tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/standalone/messaging/pom.xml b/samples/standalone/messaging/pom.xml index bf67ee7ecc..3eea667768 100644 --- a/samples/standalone/messaging/pom.xml +++ b/samples/standalone/messaging/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-contract-samples-standalone - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -17,7 +17,7 @@ Spring Cloud Contract Standalone Test Samples used for end to end tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/standalone/messaging/stream-sink/build.gradle b/samples/standalone/messaging/stream-sink/build.gradle index 955c84027b..804e0a1224 100644 --- a/samples/standalone/messaging/stream-sink/build.gradle +++ b/samples/standalone/messaging/stream-sink/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" } } @@ -24,7 +24,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' dependencyManagement { @@ -61,8 +60,4 @@ task resolveDependencies { } } } -} - -task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' } \ No newline at end of file diff --git a/samples/standalone/messaging/stream-sink/gradle.properties b/samples/standalone/messaging/stream-sink/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/messaging/stream-sink/gradle.properties +++ b/samples/standalone/messaging/stream-sink/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..d7cdc356ad 100644 --- a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:28 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/messaging/stream-sink/gradlew b/samples/standalone/messaging/stream-sink/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/messaging/stream-sink/gradlew +++ b/samples/standalone/messaging/stream-sink/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/messaging/stream-sink/gradlew.bat b/samples/standalone/messaging/stream-sink/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/messaging/stream-sink/gradlew.bat +++ b/samples/standalone/messaging/stream-sink/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/messaging/stream-sink/pom.xml b/samples/standalone/messaging/stream-sink/pom.xml index 84daa75556..73c3e5d34c 100644 --- a/samples/standalone/messaging/stream-sink/pom.xml +++ b/samples/standalone/messaging/stream-sink/pom.xml @@ -14,14 +14,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT @@ -48,7 +48,7 @@ org.springframework.cloud spring-cloud-dependencies - Finchley.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT pom import diff --git a/samples/standalone/messaging/stream-source/build.gradle b/samples/standalone/messaging/stream-source/build.gradle index f0e2a992dc..f37f6bd09c 100644 --- a/samples/standalone/messaging/stream-source/build.gradle +++ b/samples/standalone/messaging/stream-source/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" classpath "com.jayway.restassured:rest-assured:2.9.0" classpath "com.jayway.restassured:spring-mock-mvc:2.9.0" @@ -27,7 +27,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'spring-cloud-contract' apply plugin: 'maven-publish' @@ -101,7 +100,3 @@ task resolveDependencies { } } } - -task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' -} \ No newline at end of file diff --git a/samples/standalone/messaging/stream-source/gradle.properties b/samples/standalone/messaging/stream-source/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/messaging/stream-source/gradle.properties +++ b/samples/standalone/messaging/stream-source/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..fed2c38616 100644 --- a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:21 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/messaging/stream-source/gradlew b/samples/standalone/messaging/stream-source/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/messaging/stream-source/gradlew +++ b/samples/standalone/messaging/stream-source/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/messaging/stream-source/gradlew.bat b/samples/standalone/messaging/stream-source/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/messaging/stream-source/gradlew.bat +++ b/samples/standalone/messaging/stream-source/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/messaging/stream-source/pom.xml b/samples/standalone/messaging/stream-source/pom.xml index 59e0b77dde..a84336623b 100644 --- a/samples/standalone/messaging/stream-source/pom.xml +++ b/samples/standalone/messaging/stream-source/pom.xml @@ -14,14 +14,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT @@ -76,7 +76,7 @@ org.springframework.cloud spring-cloud-dependencies - Finchley.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT pom import diff --git a/samples/standalone/pact/pact-http-client/build.gradle b/samples/standalone/pact/pact-http-client/build.gradle index 8d60313435..f477e647d2 100644 --- a/samples/standalone/pact/pact-http-client/build.gradle +++ b/samples/standalone/pact/pact-http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" } } @@ -24,7 +24,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' dependencyManagement { @@ -52,7 +51,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } task resolveDependencies { diff --git a/samples/standalone/pact/pact-http-client/gradle.properties b/samples/standalone/pact/pact-http-client/gradle.properties index 57ed1c5339..0c444e9a19 100644 --- a/samples/standalone/pact/pact-http-client/gradle.properties +++ b/samples/standalone/pact/pact-http-client/gradle.properties @@ -1,2 +1,2 @@ org.gradle.daemon=false -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 zcmZ6yW00mX*Dc((ZQHhO+qUhyZQHhOP209HZM%CKbLP}j-}k=HxvFwib|u-rR%NfO zl?+yZ&J=>k@KT0Jb5TgE1#LLa~Ap!&hq?sh7!heCCeUAO;^56mt z^gnCf#2%&oO#lM5ck-MJbgGTUh@yIJy_M zhW0O?)4yC|Kq<;2=qY@-&;V6$S2uHeB^O60a~C&jbJu@8FK=OYH!E`oH)~U4H%Au+ zQ#)f<*D_UmM-*YC01T>#@x`Mmqq?-MH6OK;Xvak(9O$?xXlD6pc{xFQV^GU_Pcz4) z$A;$^d$tG2_mbEap)?|3)VtxiYrdx$KHi?U_+WdGFWe-i!9kUNc&93#nbgWqxsg`2Z;;nAKR3oBz2Gag$@(zF z8)Dbbg}K=BlW#+n*~MXMCY)r^_0J?%1;=g-6) z2{Alhqf)S}=RIWSfsNU?(B_aR-x59nuGdiGCt%oo;#-3o09-ql3nc0x^z6Oh65)@v z^d~=j_Ya(|fS(#IVCbwm9LulcSS2#^~IGz zma|;#qM?N_zViM+o5qxl2Yl z?qq=YXHOwl!St8H))=>nq00z;(39DzfU&v4_}`dK;e_~Cv63B7SgTSn6~=OK`i6;>P9c05IC{q`9gnJ8?5)5m$y4gv#NlIxd@%z9M#$4 zJ%Ab_VHugqxt#8NHoH|ERX5@1Hk)t@!gM79c?#S=WL~Hi>Cx=evr0WNB_Y*m8W8U4 z@2srRdlg#Qof(k^zFH+|T2rkqO}S-e?(7^6)E~Vzqg#w-&nCjSs=RFa_S0r7B1N*y zskt`Dm5R<#C|ku2c-h#fF7&r`R<=HLrU0C*V)LqSd|9e)2EKN-nV3KC2j1+a%b5kl zx*j>RSP94}4i*w*D_zMD@Rs4|!%8o~$3e!ik#bc}hs><7#*quDAhRof5s9FI59isN z$5di#xi2BEk~!u#Z?s2H2W2Ntcj$z3oETH<^fUiPec8bi=;0gN^6a`~{t;diods;; z;D-7y)||kNGU%+_*~pJ)SiIc(ua3Ge4XO`qDVv)p$)8&Y^J}lD=@t;Z`>x@I>&mw0 zByhdr6F!WyCWMn#Roa zMrs1|k{@skGLi;W1A2*%<>i_UZ$ECSaZLQqnu&{8ZsJ`>@S>sc9G#y@(yPtFSMAL7 z7VS*p;IcH#>bpp9bH(jgS;XF)tNU(50>%?O&3hx>zTbt$A|^f`l428*ECKl$)M26J zpV`g`!$kN_l{;!G~KCvY9(qy z%ysP-$z<1B?W34jDEK@)$*Z-&pg%Lgl|Ga(?L1TAjPfB=3K`{B*|akiR1-`nEu{VS z9Leh8epl5XGcoq^rMYJ}K>+l+G=ffVq2=LgZt2hGGq*d{h8uRM#gKY@d za)Z`Y)M)-0Y<-4x|CUNkAKdc<#EkyVRM&>L)3jlu!Sw1HnIMTZhAe-G-+TyPT9WUe zQ%GYT*FgJXdwftNWE6R4iC7+zA|_XyPWHd;16j;>Y;h`x*&VuI6al8Y>Z$t9sh+$x z2KC#W4wB&Tn#=bDDkSwd*^QV^3PW+fb3;iH=b5id(008p--|MUCs{%725+fT=Lb2N z-~|(csMSJ)^~#mF;k$aGcBs|z(vJ+N4Fcd-X9cJUpdkAtAsO5H#~2T@)C9iaW?3t- ztzhc1#mpqbxZs(0@8W4TEl*;TLaX9q)c}cI?W(z$E!H8Ou^1~*n z?O?*ZDT-%XjM{g0T=Csej?j&ZcP_EWD8?xccU_U{-$@Ac3@E%<4Y(B>A1PQrxXYbm zvbw|e^ZW?|hVajRI$AQgvj!r4>U%QZs9ZM&ILLI8Ya@0@jnpC68w$Z$zK z!Q+XNtotJ&ouL|XM@al_i<%&YCHVV=p!-Ku0fWoW>rsYQhZx=+lb<2If|H*yy}ZA_ zMe{3N5J6h~Lh@f*f+3kj4HJ^bWac#TD?p#=xGOBCydvK@2q^1fSq6yXF~)ik2T+!Y zQ;(U_esh0NQrY|^qc%{vjM8}CMQ*1bfGWe_pWZ!gJ@>4%>5YdZ(+lTx4>Mx~ucGreP+!=;V7P{O^h|18*Ra^pAFYKmY;J z|7Xib8i8zyHL3*p--W^le+}$^$FYo2|20kwO9F}bKV*h$uYDIc#aECX0PBZ#(k4jR zv$;t(Op7!$Wh+MF9l?o%1TUSqfs}a9M09E9nH+mfdOMdaR;Lpqv)ZquyQoo{U_!61 zEWJRrVdLNaTGZCowyI(4cy-g)_x8HC{Ymo%u<+o_F+)0H9Qd|4_02u|n|tSHXz=~H zEE#1*3_vOrn9CTWj3bEy7-k29umM|-O;+F(vJf=fgCRcT%!5-6qMF+!v!#IQO{kV; z;T(|UV-)gsYGq%*K!UQRSx$Uq!OTBCT?5S<%O5U-y5Y>j-(&MB`pA@Ws~&y;XAd8P z>P?vgS0B54)FzgzWLG=u&9cKV-am(Y|4 zfpf<%OLkEAVZF+SYe01;4*`2*^Rr88;9jtf>hC0B+h$AcKy_y~z&3|5=zGY88i(6M z8Sft|ADwd9G+{3Qpf=~8p&}srGY`RtZ@c#{(cd?82MiqIHPhd{s`<#s6xB|2Limkj z+3#Gpr?jQgRJm{q3J$4b$x+l{p42<2g$`M`X9n5}l+gy*2Q}|DAH6zz0`vl1I)}EI z!SHdmmmHjq-K|Ac?#pB4t2vzPb&g$bqPyj7a$&O>S3S>w>_~#ETI)6xi&|Ik<@Y~c zbk-NlwlM_K!jHCDeo0=I6-h?fi+GA|Yi<qGkaei8h^1hZN_5LS6THWZIqfS@gX5z zB+>f}rQW$!tY5OE$g%2k$2gK8OA$hm!|k%*%#@D0wbwxC=27Bp8GDqYbeoTv(oW%3 zx(drol6 z!R=xlwA0nzS?^IGM5~}`^GN^hEFG#%?F3IQn?JKOMH!;vZ5yY|$B>9va4)AwP^B@| z^=G>S0x6s}jXZFqWi>pYAflW3vQ2iWVcp>Qqm{$e{cft_5rhNwURR;|Uj+h%JKV}a znB2*XvIS(SS6^usGB>TY+?(z(NR2(7Pqu7K`4FV&v5NMsUL=UCxYk$UC0J6Kdhii_ zhAluY}Qfel4wTt*w-+ z5YE+N_>6<$J`*w*$lJ@{lU_8)EOuTAtUf()iRPg<$bgX`G_~cO!^E0uO+~U(VvF{K z)*Mcg5vD}TVrnaPUeoS08LSe0rsVP%>2gZ=nkLM`=8Nm;u5`UdpzXqxac*aRAMA-{Q- z{eD=4N)WwgDfGxy&y;!{`9oqx=GolecpF>RHZcXqTr3$4FKHGSg$tYH%JolJ+w2l9 zhncBTXg#%d3s;1TDIGd{v$S3pOUiq+q^qK+n+et4ZbnK-X0@!oYf6tA!kQ6)J|T`m zQH&0A!9HeAx6ue#wdD#See-rKH~P^BQ>sNNTU@jj1BUi(mSuR#{d0Pa3tJ>6bYZFq zb*e6ir4^$fcTL(=Hhc}GNSz%+XFD8&F>Mqxf9R;`bhUSHR8%h=Is@I*!_%SFOp2bc zrMka^*_rKOXVQv^v#hAF&4q>BvZ;S&`d|QV2A)P8dpW1!Y_u)D)bH%Y7=NCn3i_G3 zs~U+c<`IDZ=gGOoM~)vr2<|m;YX9h4j#q(7EZY->?nvi3MY`~D_{%=+mN@gA2q1YP zX@q{;OiRydR-sS7SJXARP&6!jxGZZz-o!Du;;x`}x7_`#AHL>*#XP%IvfFHF%U`~# zu8-0p`z)r`((MKtS2XKMKX_)l8^wj8rj8aUB zhnh~FogZj*5egBzalJI%7B9wEeUY6eMLuev0IyCTZQV6m9^PE7K`Wg;!jh$&60H=T zds{mydhuAl=7Bb0c?Sj-9jE!2Z83t2RHhHbY%S?wJDi$OKuETX&Ed4)LtL^h-Pi|!7Y zMp9j1Y@Yf{KW%{0h>if?);e0J#u(T*%SGXep!%#e-m6$6<=ofc5L4|(Krl6GOF0Zr zb-}#GV@xd|$q=Q=ApJDW7-I^c*D(^yN5!dpvP;VZML}{T3!ekR_c@b%F>?s-mm!Y{2PZKy)q|Nk+)3V) z;O}+xpQI_l(}Kz`)c{aaeg*Q%#~iqVfl)z8>`R@W%4g!gB8MI7KV^l-nqLZIOC?im zX#jY_Cr2;38EFdmjgxIeZksURnol#WKM~NtnMHC;JaCGz0UVBpvx)xkGX(oO)x4v=P5h|fQt3z1aI&KDa8q1OGSD& zL2X-#^_bg*)~%SpVw}h!RMX9{s77Cr30t7|=5!cfx1jS8+o4TWW3G?v>Ehy8F7Ik{ zM1tdWNC^g8&|-B(lq+h%cpY!<6b9VVZ$=+tZboT;jS(aG2UdUX)SR*lF6$_{KQaCu z3YMayfx$LdqUyHMLHZ*E0kXW`Ne9f)I!iBEjvznl+IQGl!|!InUs~BZg?7)6tI17A z-vbW-#n{w>$7GqhmXKf2XHv!2RPV6-t-(h+9(sr_kjj!0x99*XDP|avmww|qLv^_= z*)y(QK*BlsyPU<^02}4t#RoBZFDAEC}6D1vYsgFNthz(J~dXF zgVApAY33?(Ke^Kcrs(C8M(U|&WFBFn0Ed2NR&%HsySzL9R=k>8RP-#L^!$e$FXsku zRhVWfa#|@%KAEw}i#thxyHrNAoK<0#jEsdm`x&H@!et#fA(kT?U)Gt?caY1>#2n!Y2 zj}$gw#uVE=VMjsqwbN-+nL5Pp@5v~XYeOl+G>c(%7Su!$^aBAdPv)e8}BaktcB3LzZ<5- zY+05Y=bqm)d+n>q$$AsSnYtvQgNPvzDJPnOpvW)x5H}s&QJ`6?2f8PPe6jg=+ozab z?@wzBb*6y=3x+2Q?>p|Fj47l33MiR59;dI6seo*KSo*V8_(Y8wuk;T<%$M-~;-}Rw zGaiCx^bbr!*HDE9dMJ$NWxcyTHik+$odrcpJ9wHUcE>9RK|-z{AEk?mWa5_EqDiX` zk?R;Mk~UzR?Sr8kwg`suk5Vw^qO#wVk0W%W2aPQCDy(ckF+Td490nZ`XUW|-a{1s=?&wlG1H*fd8`36o))B~Ul z;OBplB6%zcy%FJ6oOQ(ytATku@jKv_yzToftLkS}J8|l1Ya@;i2Ex~XZQLHWaei}l z-hTC*!;x_T%oEp!wB*AupO-5}7QLQTT?OlSg=`_J%Ip)@Iwrs1LER34>{I0yqrr1* z(3$s7+jaiNsNt!>bZ{vl{?YxkzS8)OE)9j*hF55fux;;!f7WZT1G15J!m`ht+y#eW z5S$^p&+S0IGoJm>+9Ub2gLwGSJ!8zFxN2=E;<5%Z@%3SeJrB^~lbI$J01 zcNCVplN{lTr1FA#4Zvz882&_Ud^Y}q2ZKCAk=ikVgv4|^f0_I(#znQ(o=I1)+* z=b5u1TIC^a#6qkQ!q^C@*v`!|&ytC&+5>*$ z_DlAM+Ibsie-LWONAG60oEiNS_qbjG!PSEfD3>LO!mFUzuYtpa#J&_A?Z#h<2M52` zbQdU*sI#ucq~GP)~OD zi7o-=K|saY$g+iNz`7$SRImMg9kWfIc8EqQa(~UvmTMzZzMkg`ZzDG%xe53HX^${= zRzF25BbKPS#;hy3)X$98;V|E}TNE&2sk3Z79f9wL7yHY^Dj^j!QyC+_6?EJwxJsMe z1q-jvNBdQEzc{fbwDocnKm>ZeoD6Tkx)^KH<`-eyesX@s)w?uI>G@44rGU(WG)auD9l^|j1pq$m2{}*=?vDNxPP`X z`Z*ZG8~o(=KNudEx~+mp=k6#h&uZb6c(28tkM1hnn=+ zT4~@tIzyOqMElX#6;Sr-8VMep4*FRs#cq_@*g0#S9Jl*Qjck(E6($U#9^$iEIODE= zPMT0ijlLSaNC6vs4*nKvclPX<9Q&vgmXjjZOniOAn2g$&Q@9c@3Ggg=6FxHH?924b z9y@hJ9ytWY_M-Mud^b% z*#YLJm&gMwQzh{WVF|?p-D)G{UMwg+79<2wI1}X+-48}q7{iUy=NtzhzEds!401fd zZ#myYHE|fY@U((j7ky3b6)g%Ze|Ge_?W+b2EeRtqd?s!d#L<>HD z&;H;toPaT$AQ4W0>Mc9O3DZC7sdoJYRKq>I#&TV21Y%)1lba8NQ;xqxQxhZ_ zslHP*XK-?N{f&-XnWZOnR!e8eQGXjb2U28pwj$an zNT-Q>r{3A3=2GrmJ??l)oX2J>+u2Bdi!^~9Dqp<*!Vh%) z{O=m#&y&yrecTw}sx@YbZs8iAC;UDb!~MKu@eGQ0L9yfr#|WrlSuO#UxcMmJF9mPZ z>1^l)|gPCo6--sKnMje#47ihK8uNE=2;raRHK~c}a3tT1L!0Q~?wI6|OGYBSN5S~4 zs5G(5EdIRM>lVE>(l~H~b>rGO`wtiN8 zKRp1*E2gzL9MB>23%)gd{&Lm`@_>PbK`q^-Lhcp5a-QO^;E^{D0rL!=@N&+&WR9Zd zS(p30PhJ-x5LkcAuM>s0r!AA7D|R2e?{T#Af%xCsozz+f+44VAffNe}i0c3ICeQ(C zn%+iu>ezqfnpFxlAR+^cF-CFkJ_R0zKppSjX5~0qw(a2o*Ew%}Z+&;~{^P!%zg-ap zVT}4v9*^k*c8~{kL#Te`1?-@UVIu$_iVhsKyT%hbz?~Wh9TAW4y)2Q?I~gNo@SczL zh1HIYz`6J7hkebs$cBASo zA(&|QAzfpyA;}xUx5~i3Xloo-yZ;>_jpNp zpJuPxf&!Q$n_O6fDUaWNK!#8UF~EM*fsBy%X+Zrn(~2JtZA9InH&>6};c$xTM>+55 zQXlPv`_RRh`{?BRut%ToL7A_^L;<0MkPoO|Y=H&TmHSJ$_}I5MIQSR%cpLmYI~~4O zUQU&kUS@K_m3J)m4Qoj&DyRT_#AtI61UBlG;g`Z=ovNs*sZ zrLzf+`P1m$+4J_fUEDc7TTi!E!(Wg3eWE=jq#?unVJQ5(;77sB<;-J`MLRsR4LS!~*-}eCG!d-EZcy|Hx63nV{`fOm%h-HlTTJDAnEvlTfit|ITe5~4C){F325l-kxLW>eS)gAM3YIH}JE*RlPTwodvbEcTR{ zLq4Avg|dGl-!U&cM163eymfk64tIqeS^FHLs<619u$KDL!Vy3;U(8+yEjw73D9Hr* za!XACb^f_Lvt;g(LNMT0rQ&%yCSvffv|c*3g{3bMm9>WLMARPH97g_bal^?=`<-r+*J_6XZl=PhRM+TS-P+R5e#vRFv(KBZnB>-)%F4hh!zAPN zs1_JcYO3w4$XZiu?DEwDsfx*t13M<0^;p%vZQw8K43FrwKY!C?Fng)%3%dgMiMREd z{fk6vGDjGzy0zpd_8QEjD&N@yhI#azytq=DQB-~E8_@x+-5g<U?qgQA7JJHkjJ{G#QZ`Z_wA50rc*NA8`{qXpvn1mlSo^40G#PG9OASG_rl(s3D9Y^-HR zj`6WM>U;oNyUVnw3#yVLUYs9>p1%{@PGEmkIey4-*~NX>lCC*eCOhNOpPTRdNd~jW zQsM1-245V})8GFPB7Yh3RUCQGp$!^!M4z?YmSTPV`S5erZHvKWxfccs3d%5f~ z!BPN>HqZc<4K;wNm#M(qqceR)SJTL*(hR87(NI#!qPrnr8TWK8;MubHbp;G6=j5-M znmFV_pv~rbUu%U>`lJx~1S;LWl^V<6Lf}2u=KEZGuK2~Ah^ubVnRe-4Tj%VgX+9#* za_3I>dCkAkT|>I&y?rDb}ofG-;iZ90ec@FE~{|FCngSmS)UD2~BIM~zXqR~?hP z5I!wtH0Mr}y{+kb{aQcSC{gGi^$IkmYk@nO>a=-{Q4`)Sc5v-jocOlJe(Gxa051cK zC_4^qnarDlS9q6sDB4)0Vz%c;UwB)be8Xz%BtE{%%J8s?uIWAJS)HjT!Goa5;-Ivr zjRzPr$1=0%zLsp)$Bqh+CBUdQ$+m99#Cnv`^9II=?-zjI9;5wy)`203@wc01s->zy zucZ(?EYM0N_?$y5@$x-SmU{Y}t4ad~CPW*=r5rrwL|wYJ4fpO|Gu8zL)GGtSo%17; zaD=!OfoabQV`q!Z=ul|#!W9}WFbF4zFZt>H(svD+PiCI?0>P94# zyubsqs~D3cPM8`qMJ9A;&;0)mi%U|^!j&yrkD2FjXzH3_D)Dt_OA=T-d^Uh>y>+wG z%CO!pytXNie5&IqJ2MP*G=2F+O1!ZpsVn1968Z>bRBPVYEesrYN(WnOeIPE+7_-wZCj@`jZIrhZd*!TTVoRs8H}2|QPsRri5%y+mi9Gm+vfFb z#3JL8`Eb&s!9^0Ml~0Ss#|^-@n<@P55Wm(LNE5m&w?kmU)hZW$8&`<3AS&e{U43o{ z)Es#ma^Hp+7sv33cPH?fssv@3UZAftar1dQFki^RPRvOsT!t!vun3AOM`{a4Wi)>Z z98HrYh$HoxAGS+s<(Rj^D-N`lEupfVFUX6>DPLeV-B#DqFSx0r)+|7Jm{GW$y>8Vv zNoA`WJHrE5>tb7R><51wtyP%x)VO2zr-s6thc7(RhG@}?wjEb+nJZVGc259?<;>9x zwvM}oF#^2uiAVW)WSxq;SSL+iGz+)*Jj>?EZ+Mw~yg3VyJXGjBS$J(bIQt_cXnT*U zC%elpzDtmd?nF_HJT$&B@u4nz#2zz&@T#wFwqg` ztt(Pett2_dGuFm{8JY&B+AR#es-bKgxv4hp2zrPCI?SmOB z)158Yf3x$`9ApS>K3G-vGo+CA5XyVdUA>THyYqy9`@zC(==DxBf7rZpXzQF8Bb_WE zn*rU%vjxfVXA7Wnne`g-hH19XKJuuOe(&A|lIoJl*n?ys{*3PH!B47UGH(#F{%DtI zu`i|M#|=dG^Tm0@)3`}LDpV?Ne8*L`5OKv%jxk{kcL48EE50OOUs{){b}3~;PjMlk zSQwv9*23wcVKUvjndS{!#nPkPsI`gCVfVcH8DH4D#|c>W0W+^-t+^Ew5B=z~m(X75 z$Zi(u2~O3L*Cy`GBG?&$bdX8NH4T;^dCrttz{c^F6h$XR8ZKJ#JRw@ra>fa6rx0=LW>~#-dv1} z`wNYo8|9;PlZuU~WvQkVE`Eh0v|KLA&1m^+G)e_epS#(MKHd*YPj{YOdJ)5Z#Mzr( z@9#eEJ9tHbr~4A1wU{`X_Cp4A+c?&3hstVs+(cgnB76@c_liW1=3xtLaoi zLgoE2GN22f_KO>xaMYBBV0>K753fM!L7K1VKov%y&V)5z?E%|wEn!|dd;aqQ9NaLq zz%V&NadMbZR^lH=MxQ*d3GkEuwO&T=IeCH`u)_ctxESwH^TXX&zSkG*r;HkCID&jH z(hDd(8h?+9E;zD;38*hd96+kv@-A%at2uT80364IhI@Rvc@f^Oudc2)X_3x($_o~T znfV1!Zre~6-zPAFk~vuOTc11G3&&N$g{TsG`$`(xT53x8hbxA}H~0597c+twa=>Rv zX?AepB}?UDb6v&AaeJJNBQ=$t0?5hntLt`CH=Xc zmr$Xq5M=gY-eTsEin3$qln9L#DVfN?WG49^>V3=f{(KULQZuCX2%V>3y}RoCJM%ID39(we6tJPO!JspcpHW3T`xj&wKQ z@v2B>dxbCozT7L&pfvZE5@ugY&>9{Syg1F@h3jWyE=e`=?Xi#Dd~Cu7)A&X^fX1P3 zNFHCsar$pH3FD)8Q#sv_JZWr9_3kBfRwJ@x4vCZ2*xVYgAz`OmP<3f6Y1XtztUBo< ztUsB9N3jlh4-cs)fzs9Z(&DDWkg<`-_#G@(9G`adoGbcV@{cq70*u97E+RK=vrf0u z$-S`Kbl^6f5bHKrzvyus#^iD00f!VCC9wKr@B<^uZtC^C*z7-PyruHgCLD1r)NEfc z0~+_Z@B^cFk*<1$2VOKb3zoQl6KE?B-`+#Q1&Y_6I zX9fA)%WhZ5oTtPWwa; ze8PE_MRqmWQ?dxU8SipC}hCQ7_0BUrxG^z#)Nd`?NP1s@Kr!+2VB&RBp^G~E-3W1b*Thw5`unl@-K?;`LiTB--=2AXVWED%TZHjk->F30iB_jZTTpB+8* z@J@rn6VSQ#+%Zrn$svfN&&qq~^# z1SdK&Sd$+%)5qOUQ@^U`J;z`q74);JI9WM)={szvpGyyJwJYgT>bMY96(&|U=Pq&O zGb!_YxtMaKD^T0_CMt~wq+*Y$`6U4Ka}=I9SLuI30AfbOSj*Vsw0yzN6Cq=?i81_E zH@s$)iR_o5S3-N026y6~`478iu`a9b`DZFR4|2i+vk~_n-t!v$Lm`Bu$Wd9%=4>;0 zB`u&y+fR=+ydlH+oV$PdcE>X9UevxtdRg&ZZoZg4h)RZc{x03)IC;+b?0RIK!dE$u z72O(r1AsJ)LEC}vi6epGT*Ugbd%&rV0;p^oTmVeAhC|;)wf@x9p?+&leesD*zdPa4 z*yM!xj7soMb*w-&4}9vgLxAul-*rQw!lT4ZoWqZzp?&>OV7qZBn;LUs9PiLz!YPzC zj$r>RDM5tv2TL9h>R?e_;y;3~?6E~JFIWtc|Es?=zd}^0NX@-vg&T#I7-0V3EJ3xR zDHIorL(_y}C=?}A#Vl(jOQ6mBtvnT!4^rlvc? z(PEBDLxqwzUR7EU3|d9)^nzjk-9{1D#+rU75qO2e<3n#>S2ld990oxrNy;$Fb1lO9 z3Rt$+H0AGWL53)*XoT)CVRev%H3+Wb3ZZ?#(y_mb<0T;3Q|9$cc;x1mNx(QH7W*I< zeIz1GFVT|XemjO3iEJYrXAbA;3*hf_NR}n$)|0gYfiZ7$ros;^SmJnCOeg7JUAY2N zU?Hin;|AINI<1+5cMI*sxbH~s&lR~*0*DqmfV`v>hScaOnPOOt5tpgKSxJKPoG0VA zE6d_(bSB9R{_t4fmQ7(c)84aiwnR_XFMfD(P!904Jl1Ty!cH8W!o_G{HcV-7#kqgk z!mvROS?jR`y>wl7w`{1JZ#=x*Huq%Ir}*5}4~DaGlsjAFWRx{o&-+tdWDlJd0mh*9 zoa0$^Ky;Tjd=RV2nVib*knM1FHWqlJZcx3}xHYrZp!M9>($y9A^=@sNgINL%h9IDB zM9KeT@r1|~*LVXEEqXO46L+J}68m$dpY-?=oCf^pd%6W?kudH(1G^!%maO)d@4;m3 z{CV)mJ(%1*J=j%J^y7l&*gQNN06AkDq|9qKC(4@3n;6~^-NF5?zSk{%z32RA6aM7w z3%`~o?Oz!i^CtIa?{;4sOy?o~pnlO5pOVu7tIL(9$&KQayOR3jmS;2=t#mNid$Jn8 zF=>~@!KW@r$vRftG|RLdfqM}j(n9+qr)VLyWD{qy&&40c<^SSJ8LZakQiPr15}(l_S8I zh-f!t;GoGAL{NDHg_(&Jj>hD5$Cii^So4)7NhymE3wwu17eLA~JqeMlWN~$Bxk}*^ zJnHIK1Fj_lzyXEkgmGrm%|{e3Is$KdtY`Txcif)>&+~u%TnGjwzWlMfowY_h#r!l! z-o*Hb07H>Qkfz9HrjaC=LD-^jrYv4cJ|9$LWo=@t#7B`(x+7+AB~Hao=1Pgb-b(IA zy0JnMlC8?OoY2Nc4m#loZH5u=hdI8W1Th|*&=Mm5EMf%&kDGYu9mO6+QRT-TQD5XE zJ+#gMC?s0vCGPdWC`r8xiu|VSqQtGiiP+DMas>xYOtn zV6l99_$+XC!K|Y`Ne}ay_ym2pjI+6p0)XEtO?xC1gyT@M?l4$RQ>{}N#nueYD29V! zFy`I;!&YH6y?T{&PrAdYw=qQah^agXr?bH)ZJC2Hq1xN)WdiPSbC_CCtT!9eJmCg@ zFJ8@!LbyBsvkNAlSXDtvwKt4Aew)u4J@~K>@SBXG+zWzAW&U(d16&U( zcml#P-R*v9;NvzbOEyI6I@QF>Z`2-h?9`VaGA?TRQ{gk3b_}J(g>I@hU*}$2ymK2Y zKEU=)`Mh*Wy2(vf# z_@?tkLTGo$!KZeaa7WK!4{CrI$mBFVpv1Iff-Sk7u080{{)gjUY#2 zTm&o>vl3f#gce8JhXI!g9Ng>}Rn@%*Bb9d$G+|dMvkG-%#}%_Q2rDw0LDTR%Ht3+a zv{9~ST8nM6{ax$#<5^gwIqWffmYnycvwDxvTW0^HHJe%JteFoYTym+W>-Au^J{1-R z0mI3$;A{1cFO^MMy#;JlfN781CHm~8vlD?!gV3JGMIxjvZu1=ouhCCr-05kzZ3?{R zVsI=>J(aX%@r|c9Dd)W~jedy#^xyDZChv!$ev_i`rn<|rUnv5ct6wZpjB75wvACne zPgwd^3T0Kldex0Q3}NKzAIf8PdVzN#FZ1!-J5IiaB^n6lMYqWo0Jj5BRxdMMneaNW zjoKj3-}{c~KAIi+E;uJ}u<;|rPnDI8@raWI0-{S+_Kq1n@J8FZ_TIzlItDIj>2G>v zC*l)lZjpceH^w%%H@9Oj#5VRabp%1vy1gOjt8TGFRiN!5bZC(Cg}KtK@`P02lj_j>UwJTu1UEv_6gx$mQfKx@SoIseiEO&FOd}Hi}rSU?qI8 zr;ll=rnJ1n6VPo$&1Xs$*+H?hg=m-?p4X74bT?11w6zEil&M9+q{&>U2bS zVGXL6HyHYC(FH`^Y&(g^++&lVT!Dd8Z4$-2FxC@t|J+rm53rrn9YaKo{aw@6FfYo< z0jZ=9D)C~$3di}@z(=ys)c@%m#LXP2(;;u=h(UAh4InGZt8Wyk=80ZS?UPCt)txAY z>vGNPgPh1k1(?lBKc0$eyz;e`~@R%Q%_U!weULP=}!rGgVg(Nz^#m)AFgV?W$mx}!u; zxj{H0RrZa6pxz&Mv@Hkp?wZ7llQz%*{NLhD2_p9YerKC(Duas+1q39E2n0m@A1Q|q z7Ygv7m)v2RQ2;bc>;Q|F9#&pBZVVJHs>E`5yIT^NM~ zc9s^ZJzgx(Vs+c2o;T>S}yCbsD-~m|vJHXF0pq$Qm<@AMtOWd&j;7 zXTE3CX@CL%_@Kv^s<~-cBPjRc4kHdg*Zi2uN&UC8+*mOT__%uRASjJMC}PYhsmXi@ z4Z)D4xu4wFxH{W0DoysiG&#PP41w}Lc}0V*K=r}fPk0pbfqanzL_4QPq=9U*!CER%VwL1^_DS6>;&N6dc{sr%@4P&;ptODx|UV0jkJ6-zJ-o)~2 z4;rUNmmcJNuP7R_c12W#34o>5L)vCM9`=x%JQPK?-`%VCUe)1h`X zt?-sNpUuT&G3fyndUo2uwA^;1Jl~wpo404^o{Js#Dc%^dA`azz=F2X?K_T#pmv1O> z=4&XGc*t>TQ$t6L)8+&armS+xpwsqPAKLE1m*UNt;hE(lYFOwl=sM!HzV1anEk{Zn z{D11W5^$=vFMdsByrx`S*Zjy88KP8ZFqJ74O1w;w>1CdJ>Qd4xgid-YQ=!a5?q?|T zJiC;};=y#@U*FU~hkF3ur zOHk3y4Ai?TNK=?{`a9f{qj*$<7^d`yVr#16Zy$dn!GF+-Vr-(ts4)73cscC6)Kn=x z=faPl{-;WUj2i?wI!BoV615mazii(-2_?q#f}elXHhb$4Cr{lh&5 zHPt#@Wpbl@9DmMubC72yGS&2wu3w3;c3P0SoHo)MVAkNkQCaQouxMP%w|KTzRGXqG zS|xh#d&Ka~gw9f3{e~o!vanvMY;vuJg>-IclNX_n-}gzmeu1^NmTHD|Lz3zulY7%b z7Pwer#6fBNK>Q)jGhIDE$!2_Jem}O#P1cxSmgkk%HzQ7;*c4*Hbah3+3&9DWzLbQH z==pv#)wdj3CLUg2WZuh-%5%7n%JNb27!++Y3W-^A?$1Q_7b!gH_-q;bEYs;GyWPI- zFv~YxEG(8OzOwe^t}l-l51C8Mu$ozZ-IuqJoqlU%T6JtL=q|sny;*hEtMON~%&(2V zOV#xJHcjq$@TYrVS`!ohw1IU)Vs)d+fo1lReZ!x7 zl~T+#bXjeFjE^U>bDe~Cx@VY+B=mkPp&ZG+r{Z!%W9lP8)K|B#NMwNhd{;-w+Xrpb zIy;HrEfp7JjycLVrk7isjgGMEc*^f1V(XtENfNQP5SSd?HPAFa>Q^y1bOX2BX3v(r zB5$74u3PS{%yFsMYCC&rL`_ap>Fj~Yf9a-Qg|?V$8g1MkLSE&Xg*V}l`qL!@dAX8V!-HOdW6mv>unwp0G~8W_Lls*rhylNNe(YTim^q&)7CW4!$V zsjX^>XZ@s?!pXn3$7Xehst8PwlRXs!=!|Z#IT_PjTX|}DV{GVLx9I5h;#;^WC8`qq zG{P)@{sl$a)10r5l+#1~GGY#DlWi{9oo|}|MY>b`L{->!+BfyxVeT?EFPPknLyP4o z50_3n=p$Y{{W`5E!_{;2@Wkv%r;nGpD`t$C27+k3#OE(7{^+I=Ws^V8Q4+tH7ZdX3 zc}m!&cx1%-`~?RuG5I7k7+pQHRMf@DgYI&o$hSU+2ErNr;LG)lm#Jm3IaE z+w%F@N&3a`ev;OIUaH*G#Z~Gd6!W?^bck|`G4LV8J0HV=FI^COwZMGxtBkGMQAc&1 z3+h@bNm4iklTmetyc2%cp7zT8e)VZFOBhaGFDh$Bz|kXmG2(XTe0P+g!lx%mT8shl z&pCJ9+y!y~Z5nndW(%8nS zQE}~?k8g&=;z`4kq?6UhG<;tS)w|i!kClgOkaOL`BoE|749onar>bhF>&6Xf5)!lj zJS$2lQ!_j)uOA*o`-HpC_pR?xRnJd)>|YE>)81?)mB%#5HPd>n?Xf?|N)ri+01k?N zL8Pd*mg8&0wjCTvIHlxVV)Iq-^njJs9Mkl>!@rQz$S=o>uO`kK;DsGVPGw|pW?P!@ zL{NuQyNvt8)p-kg&NL)2d{4!xd^hxJ*ek*FknV%9(%ufzYXUXMVeD7(h|DCgP)yyr-IM^^K!Cs1g`Au=S8r?K^R~@{6eiEb|QG$*K z5TT`RVqsn7!PVEx5zKb4H!E+S!_~rLSqtdq!YS$-OuhA41RYv_?6v?ix^7!0z<{nV z1*tG>TenH#V)L2Xz@B>?P)G_Nn^or%IvnmX0}iJK&H4#LT+r4+ zZSNY4TK|-et!On|zAc#cK=)LP+53YZ@}TAO949gDZT7D)b?tz>)tB-Sw|FKmV%q;M zevhfY^)tulKc2e}gJ*uwjA@U3YJ|b}$48*u2H|UTtm){tF)Vuy&Z7i^Z7nAfct&~U z;KF@81phSBF+C)I)L0iJrNP415-tIuZ7U%7D>VdSs}-iKDEP0WOUuGsxTQl0;3u4d z3C+C`!L}?8K4C=l3gWz%?KwAx{||(o)N*Wr0aG~WVI2XY)iQ2JndEfkoMQ^0>H$R( zl+}Y8B1*TM#;K7HEsss~v?>j*bA>R_ucm$C+L-nU>Z=zo{QcA{PQo5Eh0^8kjKVTQ$Pw5AY!Zc?#^CSnU>^cT9jQ zg+x3KCyils7XTwBkM1v$nSvLGnMWqvvd(>gF|1 z!LpbgW>pk?Q$rvdD5i236x_BJZ?HV%)(Xd)h&?3kEeU0{vZL)hahOFo9cZ2h;iiru zV?Bq+2WJU!p&fxR?(BjY+0O$BGUVMQgl3$OUB9z-3Fj|UNgV zu_S_RYd=Ow|(`%z!N5x}BS}7ggnZ#{un`AT%^EY?pHp?VKfq z%}$7JgDE`=kVwS)b8d94Ru^Gx5)4BSun{{Sx}GAANTG>g0xk%NUcO=|uHzu4p@Rl% znkYd~99@_xtXsr9uK~2QfNcZoi386O`C&&UXnW_{q6&M1^JncT_`d`XD59AD_EbQm S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..ff3de523bd 100644 --- a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:05 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/pact/pact-http-client/gradlew b/samples/standalone/pact/pact-http-client/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/pact/pact-http-client/gradlew +++ b/samples/standalone/pact/pact-http-client/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/pact/pact-http-client/gradlew.bat b/samples/standalone/pact/pact-http-client/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/pact/pact-http-client/gradlew.bat +++ b/samples/standalone/pact/pact-http-client/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/pact/pact-http-client/pom.xml b/samples/standalone/pact/pact-http-client/pom.xml index 0bd0c4c70b..7811daf6bd 100644 --- a/samples/standalone/pact/pact-http-client/pom.xml +++ b/samples/standalone/pact/pact-http-client/pom.xml @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - Finchley.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT diff --git a/samples/standalone/pact/pact-http-server/build.gradle b/samples/standalone/pact/pact-http-server/build.gradle index a1bd11bd17..6833482dc8 100644 --- a/samples/standalone/pact/pact-http-server/build.gradle +++ b/samples/standalone/pact/pact-http-server/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" //tag::pact_dependency[] classpath "org.springframework.cloud:spring-cloud-contract-spec-pact:${findProperty('verifierVersion') ?: verifierVersion}" @@ -29,7 +29,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'spring-cloud-contract' apply plugin: 'maven-publish' @@ -58,7 +57,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } clean.doFirst { diff --git a/samples/standalone/pact/pact-http-server/gradle.properties b/samples/standalone/pact/pact-http-server/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/pact/pact-http-server/gradle.properties +++ b/samples/standalone/pact/pact-http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..95d7279349 100644 --- a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:38:58 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/pact/pact-http-server/gradlew b/samples/standalone/pact/pact-http-server/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/pact/pact-http-server/gradlew +++ b/samples/standalone/pact/pact-http-server/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/pact/pact-http-server/gradlew.bat b/samples/standalone/pact/pact-http-server/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/pact/pact-http-server/gradlew.bat +++ b/samples/standalone/pact/pact-http-server/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/pact/pact-http-server/pom.xml b/samples/standalone/pact/pact-http-server/pom.xml index 81f6247744..d0d8769c63 100644 --- a/samples/standalone/pact/pact-http-server/pom.xml +++ b/samples/standalone/pact/pact-http-server/pom.xml @@ -13,15 +13,15 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT + Edgware.BUILD-SNAPSHOT diff --git a/samples/standalone/pact/pom.xml b/samples/standalone/pact/pom.xml index 2035c0bc75..6ed9a76f15 100644 --- a/samples/standalone/pact/pom.xml +++ b/samples/standalone/pact/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-contract-samples-standalone - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -17,7 +17,7 @@ Spring Cloud Contract Standalone Test Samples used for end to end tests with Pact - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/standalone/pom.xml b/samples/standalone/pom.xml index dea61ec965..49f22a073e 100644 --- a/samples/standalone/pom.xml +++ b/samples/standalone/pom.xml @@ -6,13 +6,13 @@ org.springframework.cloud spring-cloud-contract-samples - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-samples-standalone pom - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT Spring Cloud Contract Standalone Test Samples Spring Cloud Contract Standalone Test Samples used for end to end tests diff --git a/samples/standalone/restdocs/http-client/build.gradle b/samples/standalone/restdocs/http-client/build.gradle index bb76c36a03..612371779f 100644 --- a/samples/standalone/restdocs/http-client/build.gradle +++ b/samples/standalone/restdocs/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" } } @@ -24,7 +24,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' dependencyManagement { @@ -52,7 +51,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } task resolveDependencies { diff --git a/samples/standalone/restdocs/http-client/gradle.properties b/samples/standalone/restdocs/http-client/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/restdocs/http-client/gradle.properties +++ b/samples/standalone/restdocs/http-client/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 zcmY(pV~}Rivb9@gmu=g&ZQHiZx4OD)+qP|2mu=g&zdq;Qh`mq5${)E_lbUZu(%73yE!h8tP&Lzu64Ye`oJh82|aU{v8TD3Izm|gaQOanaCuMo~S>B21wQj_d!`f`l*hm z_0szF7qgBj90*i6fytvS0ToAO^Iee+$9iEzOUA}0yb7%nZI{(b*t_UVZ@r1ATfuv@ z$#AX>nlE4O=7awy&Oh6$vr64K|MB7EWxFf=CG%ivQm6Yq7sCLe4(|tkuO1N};b4mS z{8ki7VH|2d>ld`b9bj5V*wY5n0e0_-IcJ2&lyw&iE7FNR$YWeH!Uc}>jUIn{YS8C( z*T>6~z-5PE1k#g#hKJyADRjUyfP_hd<8@D+20;A9WQ$T#6c;qLYf zksoEmVl7~%{`JJ{atLE}D6;FFxV8s%Bz5hxwysY@Je}09Hb&ZFMNq}{ZqW}k2;vEtqK_>bxUs1X=ot2S$ zE~`_LlgmwLB-I+vpl!X)U2-g)5wuJlP$P1Nk08v(;%50;7TVqsk|iYXyfyMO;0G-?uaiHkxLAb@|L&8x~Q|C zw@hn9b|0?jzX@7(QJ+XU#rzH45lySr(xfnB16rI84Vc1Jr&wK<%#Bxa8C6xWSYI>k z#p^~@X&3~SUEl_vg7I0fX!qZ78p>Uuo<4WFSef-N z!c>&wEk`CvqL4vgF}Xoc80*-Adrh6=Vx1qsQeu;_sI+ImNVvmMhTIY#6_l520b50- zadF4702Xb>6CsTF6v8XZS!xIlT^)K98!oRviD(t`N?9jtFtx;Z)HG;`kUjwSL`Bd$ zW8oLz#m21@t*Ja3 zC9XPYikJ+_>dLdJm82}naYsnO6gJ|fl4e4zo-T%o$JDZt7l^&C5_FVQpmeYd2Ht=4 zm=6P6#mR=O5A7NTiCWb=G6Gq97^`;8bPK1lfSI(92kH>GPgwKM1S~mzzl6Y5yCi2VBuabv zITn5YZ@&ZDXN*QKB-zfqt=h+AeSazH2Ogy>VPf9LiE@jHJv_cb+01XNs=)b}yUUQU7lFlT-> z!GPWr#b0i-R+jVPc4nTTs9$x5osu)9bFQV}o3UBLd%Cu@`yr~9%*WO%#)N+%27(UG zrJfwpLMb&{$XTfU?bo-#b=CFcKsDvB7q!Shx6F?}VX}0CF2lCO%ao<2`tL`o$%zT< zX+ur->X=<^EwMG&=b%)2>ZHg5N=F_8tL5pvp)*bX@Ze^K?X)+;D`bvfeaj;$SrVqX znrk0i_XO=gy%Yb{asT5Y07h+KJXPblKHd5YFVE(eHpFlZ ztr4O*xkX)Rbt`~!?BN%*&OV7a>B5#j!sdRu0mGw@=2%SunXmoJS5%o3fZ*cv0>Jb& zZY2nd-}gtfJEDx+mgGGyRA0^`duCOO+HY)(9Xbycd2sJvw52_Yr77o)H zm_S(aHsQ`ID0lQ6oHa@uaM&lK$=gAh(*si+MYf`;wW%OMfGEI@7QBUlj&S}OvV^XXsu71ZF zyJXfhS-7;VV{+3R-rfAX&G)?Bjhc4KyS$cpaWw@eT(`BoVR>T*K=#RGC~y<>>>YmQ z@89-FLh5x7zl`12;tfqZ@W4o!Ym4q$6BGb$H34^5boEGBwC@<_8)}cO@nO)9^-Jsb z&l&{g{sAJw9RlBs#W-D8A$A5X&@cuY6(v1!%$gRg;`C3@bTVF?Bj8(Oy{|Sq)5V** zLd_E;5To<@qY^j|*kjH(o)hBHp`tsU<4P^tR2LQP&GhfVhX5c{QQ+AQOXEz;;SF_j z{^p3g=0HZvdn4M9?d(`EMj)<>|J&ka+Y8KvzotGCa{#-_MV-<)zN(i={#E1(Bv;gs zKz@N+jHbp6$lG|@BiWX;NBbI~6bw`~+n3a!#h27bzmyvXD%xix=L5WFvNP6%Sa1kh z9xMQMQ+$_BjF+60LW4yvJqug}hY!u6rM#hkuJ@>9d6>rH=Y)DDi>kl+z6B);f@|J) zi!(e0gzF~(MqFfsB-afJ?a=7IV-kgBf=FG6!HG#TOB*rNaRYZj( zqf{Gs{`#HL=eF1icAT(+Bs*Q*9T4Ifc<&}(ajK&L(CpK?_e+s}SBe-mIqW~sl+#)b zp$Pv;qKLVwq5GdFhOUb{nuR!~I_NboY`F@j8?{*|#TsSn_&aaGP8?LXi$lj=4mamn zv}tN->-aR~uYL+(0Ra4eDe2@=)1~4cNNxNJ;(y`bY{6jRY-DPimB~iWs2df@6W@&#yJVe(^+Pzpu_!lPE|=(UO2J8825> zI3g6D)mCqO-omOUV{jR*(P`W)ZA^#?W5t!CBC~;*wilw$I5~?|LFyUe2+pEAcnjNh z3CA(%DCF6rw{}N$y~y$%bF=5Q^YXU6wDbKkDgewGVQ}V&TMX}ujIqdAy$6Wo-uILr zjEW(Zwtnc+?w*aoSo$P$yHCKTuh=tV)5JF4P*R_Wh|!nKE}^$dvl;D*!ISodw8cxU z&$GwHQ)|1rP3qR>>Dh!PaKi(}=C0Yb205=i8CuA03lW1en7dVjGe9||%bCb+=hUan z>Ed)V^6k3K5;VALa2p=yP66aMH&~V!)(Z{r23hRID$x?7X)vqkAZgU_t5i?)e?Dw(SSZ`jIBdK6Tkov3d;vg7v6+&}6--q3 zBxFp9*{|!aO27$skM47CFq@&{@HOZVVt3$*x#vvKLVIdon`pqLG`ZKFdd9%ow-R>l zx)1ETmYgl#y6-ybm@f~7#~conPSTBz3D=4g7BgS6GT)KdMY7cRCMMZPNu62ckN1L6 zu61ZftHmBB2*1+3a|8Hq;Z0f5HPO^?h{naTCtVrnBn+=RYr)$`dpD_KbIJQEa5FH5r z@QbQN@?liWcg?GySX({~kq9}7q0C<_=)s$r(^Y^|Y%##Jwwk`Zf(83Uxzy24HKLmL z!IOA2I=HF@RM)BGZeNLlMKsay-8skwc6aQ_V2k+*s6EfsdqvE=NS{fg+l&>M^E}M) z8!0=exDPkk!^D-TAy)?-_IM5*cv@wj0d2^Y+l@$dGxlXgLelXV_A!H!M^V+CSdjva zYv)36bpxQ)V&Ynu#@288y`b6`*_|I3cks5Dq`E`*kF#|>{$J|KW9^#KvKffx{7A;I zx+%i|gNM<#YI_kFD^o(ozk0v8-&JRJI~1DXrk%FoNG9%}JXn&fRCZqbHxU1H@(bEJ zzCc>~2&nR7R}6E(J8s6p;|g-X??dOL#bf6Tl@E>w^v_?JRX$IOgU`T`UV8*rOUnx~7Iz?#Mgr_scRmcf?9FeC&-4p}Se= zwtDPT3tV>^u1Q`*>4}`BLK^&T5yH0WVyuW);?G}cMi#YtpO5Kqbp~S6^LxHGJXupE z$ua<*w5hUWnUcYQFF*0p+x^q3fuM3tTWx>zZnl0JnVFi_pX}dN=`&UrT2n7XYz%RG zBK<(P_=Z7QSS3~SLsf)BHaru%AVxW;n%O1NiChoX%w(QAe z-pZQU*S)Bh-PcNn%tF|c{UZ1uS^F=&Dg;vl`7gP8@viDa009CL1OozM{a?9K1cpwO z1Hl9&t6bS53!(CXCJmceIjPkxOWWB5SJ1wq!HonN%F2dWDcc#p+rXe`Hf|9O5*}&E z`a*n};K=y`5sZ66mLW@*UB|Y2Tywo_yI7b5zTclg1+il7NaGv#2rZ20erK{T*T?sn zgG`Kco0-72+KI-u*4gdBi+rXNyuWjauo?hXO~RH;RTycPz7)Hz@$jLZLI}W6oh};s z|M1oLHWEOZbX<8rZz$bcDqfwnKsE2|YEwg;sA0mW!FsmRgsD`>EZu8IaDeVTq20I! z-RuAL$CTXOFHcCj7A+rYyhjg;x%}YblS%_H zzx}HePUHa}-@l#Aw}i;x$KrpEN{vkgudG>wee%~>)7EB-%6;;$L#MD-+esc&?DQRj zV}?y!LU6;M4^KmG-lp5I{8vEeSlnBoHH>C950i*@8s=@?(G`4$HZC*iR5zuRET7@( z_zDH3_M1_qGAE9)C-a}z*z&V8%AI6MjsD(kvS57C|W zdKB6=rxk9YeHwb)!Eau*>jlyF%QD>GRJu5+KGN*W%LC>%V^L5hbR#{{v#iDgv59->_oU>ctEzshYzX- zmcPO?^MrW-qPC-s<(&8`EgWpVBJ^(m)7VAp& zV(V_zNRRRaGE}>Z>h<@?pMc(Xjn}dpj>gO_+Z3o{ujeeT9pBU!-yNPEF0YTB+8zi) zobQ%jI=5}V2$J?hm@%1U#{h8(#F2pzEa71C)|BM&qC)5k_oify(#H$L^=4`D{qg;B z#>mB_{J$7}H%R)%t0HrfkXs~jhCUE`6`&CGONi~6H25~45R6iA-%0sOhbT}u3Jv8- z?Ki&aBIl+WCcX-TD3IMY@$!=lVhn%FNC|&8gjlfgmhREO=vn;g90j;Pg!m0m^I5Ky z3`A^F9Yn=9Z&p=#(6~m(_fvlirj*uo^xRjKM>w=kw^_{KaFyiZ0c?ZBD@EyUxGAcQ zhgn1w@;Oethi&IrU|Q1oF0hId&dewVyvnqapUamSO%}v|VzNz=v4XD|)9g5hFEP=w zh~f6Xo7Aq?D(Y(Vk^o4hmpCnS-hWa|-h9yLi&B+!(}LV9-}N25RU(yM@KwU#+riEK z%%+_u=f)?K&hXeuir}}ns3w>O8%_04#LZG+6lW!HLy>F?b=j%fZNjG>Z4Y`1T}Oo7 zihXo0G9N9ZAC_WKi~i!N#}3%#6E`|oNcbjpI`aMNI(03SU;ru@JY*Xc@!e;*TWnBK z7onMpY_nKHb+8IP?5QkrnCu$DJUcV8PReMY_*S0KmT5O%-jw}raI|G1Fziih4S5{t z9a2cmwFWiXgWv7{R1xHGn;nzQH!xM6V)_pkuJ}cwW$efGzeSv+$K>J}e}hSO)|uE3 zPh=WNKWZjY7k;5l(5L0ZM0yI1w%*#QJ4O0vk9wH$g<-h)V(cv3`C<7J zHl*H)zzNLXG1F5GwIuzTS-CUu`a=0kQo495dVt%%vjAZG*BoHH7RMOuHH2umeq#5| zIe|BFSF}|a$&a#iRqS=d>_p`5{9e@Ovt2J?ke8$;Uw)ci*s}4|8^q!Ej}@?dEsPP^ zo0;5gdk9ja4yO;V>-Q*sCI2ossP&W?-Ppemu=U?krlqLVwkfakA2UWa9W>41h4I+r zgzrD*TL9dGM$lYZZ-}q62Z$NylhWZCdd)q?VuH|+#*I9cF`2Z?x6YjpwGP%+Gi;TV z(jqUt3JnI`gb)Y&%wKtH+qj%JjSoJ}gFC)?jaEB{xsW+sXHs{%4|Bv~ezT&O96p$* z>v__AI9{iG*kszVI=flmSVZ>}O3h%s(6SFa4gj7vH@umLVF#oef4gVq*%^#*ueVTW zOw*zNX`-hTsSc%83t5EAW*TjoIN#i^sT;+P`vAY+tro#Ax3GPI<1ZE$M+tr#?bK23 zsACPJ5qeIjm(auiq#HsWUo>*~*{Rcs!pKFYL6^qdsK}P%<(}`pnyI=TR(3XDr;N=w zIRy}(gQ?&h`++pxs2e)RX4*Hv2JOf_+^xD&a%fg?)Z)y#Lp4b_fM~P0*dNQ(LatH) zyZ`KH6q;+i>^Nf=V}*3PE%MS3+wS_YO>9i74|R4N)`4+4)K2j-|4A=3XMEWGWu8;j z)gkeUGlZ{wbF_fuDtOSv)aZpy?Q%oQ%?$8s3^P@p(-LJVU!^rpSM^1|n^d!`Rcr)B zaEw~OkNVM%@xJXs`e6Lk{^w4z0KMCTH#p5xgTX*z-}4xTyF$|)Z|p#04y)#oI>n=Q zS8;f}vg=C`yWDt5tZGMB>_x09Uof1}x857RRS%x7(;xu7JIK-$VP%eMlfUDdSRTND zWijQO_1ltKdw3oCjz836QMFS=^|W#yo?6Yx;?+63O+l>I$PcXC^7N`EoV$u^lMk`$ z=#3XqX1HcAI|3ty@BWcKm?I7|tQD+1R7lzBnoLv$HYs8z-(r6rpkM11qjq;qT{+ymC7l+p~O5Q0N-l-?}=|lVuHfqL)TqM_*X7<#C+smui zMREfUU3|b)W7x0rhK_}(N*`i=_X0v-l21y>ykpGWf2Gi34g6yY@1=5}stw=^mv~h- zQpO|A5INKkx*DZS$2U4`bxf0uVIHCOzA3#jVbc$}8NuA6BvX3ojQ9~BOPFo>_? zNGUJ4xkrACS<0L2+~Y(#?L`><^9Hs}(3Lp^nFezUP#d0Mef?ngzlwO{t(|)F52Ti$ zfq>}#^$ZeOMTt;Kt|B6G7Gh=aQS@O% zSHmDCn#Vw&%3DF`&||EmyUFRTgdPd6~;+!q?n_c>qVH8qqAmD zao?4x|K@#cMnWg-q-V$wizu#C(h@A4=q}Pm^;>4OZ84*8YgUy`w~j$#y0pfel-D(o zTB>hzjxTVR1o6J`ppb|I>Aer!>cq%}k+R;#E^{hW>5*U9Tc2NCDM1 zVx}xcA3LE#%eV^)hJUmS!Y#M)TSX7g@d->(gi! zi37O5{(`gDqekc%x-`vfXGHZ2@08D;ZtiD9x678M1G1Uz(sF8vp4N_(zcfQJ`-${q zonkxa@rvEPJ@e+UCt+B2@RMl;aY&GN<{Q7$(o@sV_jypB?alNx`*D< z49TY2UXUfpF0fV+i5vdyPSqnN_)sDyEC&$WIBbNQ#hbB2(nMVYG=fx|jn7Oj89^gJ!4>}eIi!k)H=(dM5e5*P zd@Z55)j*UK_^m2b7cq@>2Ypzl*`HH~sZ71fbAa$6qDQ)wefN}4p(k`BONfgYh71^g zB|qEtAff#Z{+7_a;rIpRc?mXC$P*&39s2hJ7{nPd@$pC?+(@?%N*$@+4rC&1u(0=3 zTr)B!mz?Q{aNGpjNf@~gPg*3)HkLU2;891M)P~~pM@@LjE@#Mw)U6@~HuZ)3ZksSd zGHJmyxQDPgNqx*D;CVuUDJ}iiRVBa}0KQjTZsF3SvLE1iY7r$17e?U;L5&H6SGK!L z0ygk%KoBv&@bmqE8p@n+#DJi{s4R9klRfY&K_@2w3OIvYa`enMg3zhV<&ZrPKZ}Ub z-xcXauD~rXm33!83uILxSwMm!KD0G4VM3nxm51}@Rq7k^KX)V8{|uTF>44Y&%ZE0e zqlN#s5#4&ncdlLZ@s2py4jwQh9; z3XkSs6?eZbKF+Y7zDd%we>F;-#Olu4f{z9Eul;;S%>u677P%Epr`yWIY(2B_EFqQf#wdB9^IysTfbGs%wWCp_T=qFa`%`L zMle9;fB%wj^BwNfxZ{BMMmGQ~#3w}dCJOh^d-T-o;mij)jPHqYeRkvakcB!-?D06i z*03HBxPBJ?Ch}DneR2B~97KS-99H4}mg4`>O8AV-`l>( z?N8eJEiw9Y{#qZRVfh+PL>NSmO{vCeO`I2=M=#tl%bI^tFxKZ}bZQI;rk5Q@qp=FN zTpp&@YdSSzx;@d7MQ zzn>)?@ze-DoUZTwaTQ zstUBWv_b_jPfte4QDp)k@H|Rhu_{OsSj!+?me^Fpn*IV#m%*6CUoeP+;#_R26z`Y18Y2Z|zbW zd`5ESNksDF*rOdF~2_oS=0Gg~Ql7dnRei{7*b zm;1O$x=8K=tsVD9^^lRntx4qaKc+U*J}o|$BlKQrbqdF&rNtCD@-Oo_w*K~$DJ`|* z?bA`L)iYx<`B8valce)Qzu(IZOe9_csW0K3c2i2;0YG!BaBSLG%33^RbYx;887CLx zpLe!woyS@W&uy9Lt6gC2crtT)PxBe8k~(3AwMWG>rrs^sf_k3HFT2M{IbML=hIH zc*k=^M{Aw-XEPG)uTF1(oH=v%mgN4ii=84)pSf%$V08EOUWaa z6o=SUqqdqJ4(ppL!-)#h6_+H>ekZSF$7oJ8PY|1pb7{uI?V#-Jgd;04Cnak5N*ame zz&+35^?AUd=Tc_q<|1t{SyoqOgIP;m6&<;g>^PGX!?BzxqXjYSsHi+V29v^&xt{>W z#MouZv$b&|RZTw$NPVSh2u@0>Mg`)EwQ(a=OIR6sOU6F8Q#X}8;)X15z=zx?x&H(z zN5mB^b!7W&CGuQO#WdBivfH)>ffSmZ^J;#$y9&THOdh3n)FIQ82LI%#_)QPSLC!Uu zn7l*IDRH$tJX7ut*(s9To^6=EegoB~NUj#$2ii-Uyd!hw?Kz3uTee=|5<^pEdMV!7 z7FraYfuQ@J|DqmAV-2?@E(r%M;iR-*7`iIqB=we?qj=8TuNzvcilI<>JaAI^^>;6f z(;5)bmW7u%h=)t*Fgv7kO93KuhChQUVywBFpBOq4axf@SaDab6;r%!iK37%&Hn*;f z=r+A!zc@ZGJtJT5DM7P_|CD`dd=-^IzTDR(XHTD&ABNZIIhr}KUDoCn>=sr(q3mPGSO!dZ zWKJlqY9g_ZaL9R2*CcqEGfk52y7?Z6F%*5RRlf3Hi8aO$Jl(fviQtqJY-U=Rh2dvn zD(8E1*r+nqniO}Xqz}GGUmaVP7f9`7vjvm6$R?MqzA5)J%Ty{8X{+f@tGTm|MxtF5 z_G?YG6iY9c*y+EpGpx5vZIpgrl>ss`jFpQdos*e|l$B3d^|^YUt=ViTf;A}2jQKBg zFe-JG@E{*@92(iH4J8|%m0|>Hw~;l}^0u3*&G2N_l?EHX2A`XfXKumk%g=*VL`qH5 zmdN7YD5~pp=TTSaA{|nt8&NYlEvT=&E5vw)U!U=wfz*?rXS(-CClFbV4^Hgef^ z&rUVxz<=yYeLRM2bOFXKo=pkCs=_^OHGahy9#sBj>yaAUa7)=cWmRAkQ)TNV{%Z7p z)oO1NV&2kspk3Q_&CBmgtO3V8S`%`ThK*F6CDB|(Wk)MO)ml0;TdXI6na@~;*hb-_ z#lX>@zxMs94?G(Xh%UnytLRj84?fEd-iFsGZDL`1Jgw~BCOxtn54?2Hh0>)!YuH#y z-wQWqj?RvF?tTa|yQISMG_f3@my1(Wj%8P7mOfJS-5T&7CmgW76aY^t1-Ui@qITCb zBQ|On)GYQ`TJ1u58ZQB-6VxiojaNU6?n?EKtHuj{K6p6`6P^{tv^EDEpH(dTnbSEQ z*G7hy)qifzxZ_rAKFQ*`A9_BE9I8D;-oRJ=XF!GlWh zJf`ncb@Sns-D(sI1_0_=Vz?mafvaIwlaBnbdB9dRGiud0LYnTUS)pc$H91^Qw!~B2 zj$GclZ$)so?fHJd1>FZ&tW6&Le@32bED(3qZ>7klPTG)&Vlt(=gP98~OW152@s>IEvz zZOc;cil45^SMwx^H~!U_r*tH^rf5#$lDC%Xt!NBD15cya;Nixob1rX_kGR<9Eg2Gv zq&URA)?D76E>3Fd$^Th8BF|dFFyJP!=z&~z8M(+5eq#NGBqn-$;PMu4)Wyq6p z47*#I+L8ObI=nds?>Y=;_9Ys2)KD{YAp6B|-~vz@zK|SaSWJlEP;QrP`*Vc{+h*2w z@dd?;)zkc^17`J!GQxgSj>A3VMR#QT5X5`n17>w+yEy>V7u_+=NnH1!!I_+{FsQEARJ>v~P z2N=+b;1+^_Hj8s@upUFH~yK@(;il$kln?0Qyl0dmWCQ0ienH!~~( z3@>kj%9XFv<76MtGbZuSB3_AgNYyUBGD1K{V$P0Wgv6Z>Sbk>n-3u42qXp=JxWy*$)N*{ezdv=*Fr&6hi&!^wYSj`%8mPhfBMZ@MEucAQhP!aUsV!c5H z-&oHj`(V~Zhnoh(3KB~(P$c9_GR7|w=Zh-eNRsLZXX7^243TYq4JFk1(M@^d9RhZP z(g~3uOp;dZEOy5#ap|yCJEWl~?$~95E2Uz4_4LRlqx?cUq`^Y(W2P@29l3m;&Jc@m~L9y&&ueGVl^>2ICZASK?cC!+6$KXvtvF z5q4Y6E$Wrk&CM;#&&|)>J;gWwqU)#K!<<=)9)!Ht_hs9G>*6Qt#@9gq?IUppaSr60 zQSj?BQ9OQxK`w{&H-MM*ZNBWDi(b%-SAP#0f4?;cPB8%1)V6>%7&vDrv6u?x7L^`; zwwhNhBX3{pcLE^dj|UUj90^3x`<0;&kHzX>Ht)C+zhzl z!1=8zu0%Pb!nfuaJNV?o>-PYx*+>D<)WPt4@6e3QQM>FAA3$Yf8b*<6<=v~DSL5(* zt&6$uHJI|G&9U~lHNeQn03xR6ZnP-E)jnE z_!4O&IzhWlK#ikBK#Nmn?x6qj*Cy4y`;ij|PQg;K|2EZ37!-;cCwiW|CbArFuFos8 zm25By@cLNvye2bK`7M3059lI^%fTiE?7P_91n8$$k1&62Tr15mg$AWB8VXanTz#7T zvP6@pumU4E4z|XMo%MEGVSc&WK}d;OCOdnz&02jA!2STcWZ+n)Sx;L|G}3LUNxKB; zLVKFEh96%>Q+sl~N-Saa$eP@MbbF~dQ+6Tqz+6KvwLF-_TdubJ>G9NDu8}V+`P;FJ z13lcvs6@*iB@7@*3GY#h!UySl0K$GfN&v;k`bM@oeaV!q^ zXaBcnDEeAedWdf+cei>g@XVCs5p7SnD4}28;3Auh10yo}f>sT-ty7MpW$9cpE89fa zXi6%VJjXtpF^ZFz#51SLnp9$-xKSNP^mCCfz=4@W_5kmmX{%zbDIZ!TqM@|O-3B(5 z)=o}5om^b>DWpm$xK_yH;ncoln4;-^lc};#3uziIBpu0G(_+cIXX!NFVHKHk&c{?s zcyFek4)an{+;E%r_eoMrk@7J*UygluY&hH}TYq9U`&$;JuyF|sU%m&a+~9ew7A!3Y zAPi1CHK)$htdz5xahPzDF063(q3 z0M`spQ!Zw!a6+~()hN<>msR`nbc&aP-y-pe1gWe@cL*P9tJa-iH7yori(|*(AR22# zI4YR9V(mK2N@I0yqQ{s~5-C+e?pj%okk>F2apA^dO^OU+8Z>Wdof&LK{0Hd~z_U6# zh~r9kc{mh=7DG|}3(;=5^1xiRk=7@WBM=vYoA2uHsFt{%!w6YtjWjk=DDpFF2CI8u z)G3K$4?T+S1PfuE2J3L&yzFz|>zWFPJh3K9Y~VEKNg+Rev^A4xdIXx2i`_`2xN#)X zU=LU|U$L1^z9H{i!Pt0L9sV2{0FXhSG9XG8-}D0eH|6(7<7LYV@FF&D4=~qp zz5aZANYBt~t$O@+A1|jYb?9M*Ez;tgwEkV^yo0w;rTfw;tCUFIqzF~b=_b4;rjW5* zfU>}CWG}U#P1{rS0jVYVXi9@R-6rQ2+O&sTVprhUyZ!Px)@cbKg?(4Hq`j(FG z>^fBVV%(^_+4o3f_^9%1p5w^O|jSNZ-fAeqniQhO}kVr z@z87+k-O=*%wO5qxTyTqr0U2vpyGNbqRromtt~PL%@^LZrdD(KYjq;sAxnCC$c?bh zEZ7YlY_QSz87JEIGq6u-PP9$$B6Y64x6X0u$->%h*0|Py&>~AXENIM8RJ^^kI$CHe za#0yG7Q-R)RBilo)`Ph?^oB`O;madb#iasG%Fg*;`6U%_$)wW8XHA$1&Wa&f*HObf z%FTM!SCnzkOKafkX~4+@=&bw&_eB1xd!wrUy10Ne$T~HI(kbqR#dk7~3SLQvO5dPd z#WyK0oWL2tX=&i0U?-A{SYF==)#dakjiY!Uy`ImByQ{Y zK;`X=>UU2-y{BzeF=dFh8!VK}igSL>o-zF*7Ke=pvY&wBD_3&v3FuiFp33mv4Kyq1u-l55S5k*x|C!;N*?D=xAtU$rL1wxE(01|7UtoV}qQ z!<{t#&O}{~FDMZT&uMhewnowMokG`ix9``J-Ip=mEa3M@^w6$Pr^cBt4EvR8*(myP0HvxRUDp<)P$NR#En8t&PGEiIhyLCw9Bkb0Kp8 z0pBWd!_3bG(bTP$dx8wdP3<8u<*YS}eEc6!r z4^0>4TPcG&uvj14!HA4E6-R#5IB5*x$zY|xB@Zpkc4)(|h# z8KPF2I2M#fn8{OJm$w3*?8;TZZXM3(=HjC1hT#z1;@vItT6BtPUwj)TTPsGoUg<(v z?synwYM?8)o|LS{9!+RXi7=PWLAN6O`ZJ1z=|}hjb50_o2ZA5)6~>(#9Hr-7mJYw9 z*O3USCCy~6Bm-Q6ciKp@1}=GV*FEFgcqRP8s|b52&a6BM!8(^FR>2s+mD@B;rm+mn z!D2QVlgh(#KJ|1$^f~kI&~v6_vPo~aF8-r`a8Cq&{4o@`WWS5qFp!*PWJzA}rxSK; zYIyT@o<{(Tjmr^J`EuyDlh6*LoIMS~dtiGqn%W;#Rza1V;(ZD6F)awZ388l62K71D zijczxJFXSZO=jnsqS`rtzGRY&#oWpnxgzweaR=7(lc62gmT;>`bHKOp*&ayfWP=u%}c2JNtMJ3xcUK zm}B_asN!wn8@E4E_LN8S`R4jzA6m0D1aICnVN!Y`=DO@-?cDKn<$OY@4#gigXo>*cnYe zt1f7Qqw9$@RdU4|OCOT&KAXM>?-F#zJ8uQ*Hcz%F2I00~=1P@U3Tmme5tOZXi(J(M zDL!8KU3{po6%Cdb4wc770fP> zKssn*jGK_lO%1HutRL%6pev^HQ3H6jfSBjV2^+y@uR#F5-sSl0m=NAF;tS|Fn6|xm zfnv^e&TxFvvA?$uPSxyaBxj5sO)vgI0#$ZS2zZc<$r7xpfj*ZcTk|%x(AOuAB@$4* zq0FA}FnV`E^HgMvShZcdTD4tIo`!1qlwT4$Y)*=2?CktrTDA$#ku+mh#ywJOB2v7N z=s`N-w=N)T2k3Igax?(JkJ|W78Y&@H(sMu`{5P{T`+TDNbUa5tAm)qRbX2NESwRR( zqMYM4NwX5Cz^v~+9eLAYOFr_p%&y$qynLmRwH0d4ks-Ju!Wm=vJ+KE@+n=XAS!f5P zi8!?7avD5grxy2liZ*jsPVvJ0^%$MHSO;mjRS2-FbBY_541cSf_vOzcNudJHCn8br zPwn_!72R=md-ighLNj27S|#%~hhV+mofY+xl{0wy)?>F$uzSPhy)9MxiQjgZ|3gA} zZhIIZBBHvfuGHonH?1{6C*o?Kd1F;!^MG0tcmZ><$N5^D?-qxh{n>*323Ny#1J8{I zEf2sdU}IEQ*?R+h#ByTA2VLY9w0T)LC$hG}DR8r627D3fF-qc)sx%q*k7$ccww6~f z|A3%DCJ#)(FaG&n23~If_Yy-M2&Vh6iWqdK(SOKZiPQ$_Y_L7vkYGveABenjhU&l| zDnKBN{rkXlhy-bip~AG@Y4qh|SpQLXwh4&ELYOBO^`kqk6`pJ*8Sp_mSt0Ck5R|H@O@#(=fQ*=^vj;2t@Fl!2+Yi* z=Gjpzl3>d^Q5JbtvgT~p4^m6mPpJ6f2P6efnW4G!svhLmK2>FDh0EzYkcKxZ(3_7Dfd)#mk`k51%wd7%ET#!Fc`T9jjAg$-hXI*e1VHba6_^3x6 zuq|ZCkHM`jJkfXtYC4G^bVf4!4mx~BAasUMHuw#tO;A|##zN^A<@>IXPRfe0aRvE^ zv+B;%vbJN~T=d$F#d8f_l?{kCVJL&Sgo(=pAXMQ0t%Jn zAmz$Ac1$rI%H{*)m{d=9l-ZRC3v5f$yTONkq<`XJ;<0(n)N4q|J?1M|`iY{4f1ve7 z>7TPV_j~&Vr}x)Yk#Emyu9R@@Cv zmWA?#>QZruMGAuseUOdlt1d0C|J{6?ELip^wN z&3<-@65^t*IC7--Tb}OZl60A#spbW52L2KFzm2ulaKnoN7$6{O%zyE}OAERE5Q!Z_ zNPuijNMDo{tRI0mzxy}dI5_bjBB)((bxf%+IZ3>YfPT=fFd}HK!$I_TS8;BpjHP&2 zQoHr}^d>ov1=ob83p9W~>LLr(i$NmuD(ix6Uw3mqfph zTGhyhD($EiI6{RcP5WkSC~DVEEJ9h?Fr=C(BT+B;(LGT+@8xI`L2TLWfl@m_7SPXy z7JD#A%^w(B@rub`vyb8_+)sh#D?QB4TfV>W8by$s%$oaf@Bq_8D9}rZked){kPww~ ze=w0Sr}6n(5m+mwbDc7=^3^8t?LQdnQ1Oc1Q@zXc|Jt|`aH!TdF1sSB24g47*td}o zQnIflbhFhAnz39-sL;*cji3jeDC{rsNG(IWyhC~3=Q9{I+7PL2;Ejo#CNj}y1x~yYKWC}4~SEX zE(F6d!o=uS$ z>b<|%YXbuVYTZ|D8c^R@w6vJ32j0}=G3j@V6vp1FJLYoMas6s|C0QW9Hm>44>78*` zGH>^eb)&wkCYfB?2aBW%{XWo#J+ntk+-dGLONu5K0&7Nnthr{hQ&R>iO}(#$d;&*9 z(0YZTzCU)#-PW=>UoG!wnUv~$y{jsG*6($p6jP62!Y$-$WFqpgys%~F;o1TNlcS8+ zig14{SWj{%&vjpGO;&3NF*x_wCkvT87t4j4*Wr&zFcEW`WJDTAm@cucS(eHjXjYV! ziP0M&ppn6->3W3g_rvcY#IBBGC|U}=KUuu5#pvt1hxJ>_Orl1_4AhO=eDu;ODZ^u$>=L(GZ=vu!~8 zA->AKW0n2MZ^Z1f9FW%on9fHu*&ccrc{YmW8$t7%rIg&djqTaVuNbp4t2yRKo>Ps3 z2vw~3$%6);YZID?K_oq&_Y9|u`J`2I5_rp{CwW60TzqZsQQCus{T_-BB^4D`rRW?u zr{7gBmr2&K>m>*9SOD}(m6<$`9W?S+M%)g4aW!s@@=B#wbBLcqCrsLM+#7e}=<-n| zJ_a|gq((cB;~HhgauWD9PH7hLKWTq;sIzEb(e%4XYbE$WrbU9{d#PY*=9XTr*Q#zs zUi8?+7rr0ix-wsZXx%AAvwt#n)t#|S449kZ`w`cI`>ORLUo=WfExS`y&A#5WRafo% zt_^Pc>4|2G(>E~6PKT1)0++C2ZnFoFTrBU3jJZvGN1S~@EML_% zf<@L;^Wd23>fj9v`^WVu+Sl-mh$^#vJjP*RhPV>Rw0H!)*6^}EsrKjr=20$pu}Cpx z?dyD{?#B$t*hi<-+bLX{ndqr})~r`t+OCoK=f(Iew_@Cf6pTUpV7p0`i3vOIT-|;i z_7U}9%wR)LO=zuwL*Kwkx+uTIzXg#c1R~=pBPjz^@i4K-<6OCYY3%0$+i{goJ|5<% zvpiW=_*Yl-lMND6tkAwfKg{E9J<->$zyzG9*VmInBSdUwLLD%89v_Q}PEL!w8CB z1URQ%9&0%ozD1cnP*@sN)*i|fFz-r?3=kcv4t-3e( zuG3%ck!Vf4(3!`#&b|rkD1IVH^s%yfrC~5W8;p(~%HG^2IX-6^a!&A;mH`Lqua%$#YfVS(x=B_z9YWv0iY+#izItNraP zKfTsaR_uQ7T7xbVa@-yB#~^R=j33IlB+5p~4pK zx2an4wZ%U~xPsnHX-)-287l1#9ta{Z`Bkx$hsDe@R(EFmd`7Up`RsJzE%Ip?W#Dct zWy!%rHb?qF>FU4Qx*uNl*aa_Q#Kn|P9*l`@@V^i!^6CB=J%qc@i_sFToYE0qVBzLJ z&R71r%TtjnESc+cA^lq}k5l1%#pw?(6rMCGYf}zA6)Y1b;XONd)9ElOM=}URR}vcwonc4WHbeTkH z0J1E%>LMq-!}G`FIUG)Y^i(n*+J%X)3c-Je-~5GTspDnyWimH!(-Ca?s}c;K_6T3a*c)kZjvKUJsS}o*G#YrT zzL;#R(DAPiYgbC-(bMGuI$h(XwdJAN#oY_+pEWN530=}>l8&gitcLiv35ZrQeJ?MT zDz(yjwdYpWk#+HRulabMrZZ&v8WA)Q48zt@yBo2kUQhSNAiN9q-f2mCX>j|K#Qe^t zr)1)ZYL5#)ZjyT|DB1Heb?fxi^%A`WLmk8_1jU76!;2lwL_#{KTryvsZ}fjLgnjw( z`upnp$rV7zhufrS_Pf|SYL`t_>pefLqvkS6cPBd89DI{hG8yENo-I745=sQ0;t$sI zyiP9$bYqEZzI{w|mhXITUf7>)`%pEXXMC=`=zcmnG-PBR2!4K1 zeevYMSw2ikY>&VdolUp{_q9h<(o|HK5|_Qwoth)8|2#YV{w(ReYqbeKKPo>Z?X}*BYa+g5 zX)%;!$F)W;Sta5ot-W|u%Ru_o%K=p zuSJO_x|(fdu-oID`MXC+jtXDA6ux|tX1|I+8jO!?eO(;k)Y|;%oe`d=c$9 zAcvWx9bP6Z?V#;<$M(SbgeqHDpIlP;EAf@8emoG(K+88x%HK=d&-UPDrR^WM*A0_r zem?=mk0ySnHMi#DB?=2IpBMWTHa=FZ3A1OV-W)d0=ROJRCsfS9`pozQm_5z@yfAz6 zT`tk$fvM)>2&hmPD_AJ3`t*hgn2_?b0TgFpf~={$45hDsNtSGGB44fcOcg2<#=?5U zc!(FQ_C?199#*D1==an8Oz?y%jX`WMRhZhq43{m<{J4#tys?D=m=go1{a2Cz%zz!gvgaGTF@xkmAYUKsYwpuv5+sDpXD z`{cHI0jm)LQ>VL^O44E#*+#;P;IG#1prf;8prbnkBke$LYT^KJ9fDFc^9jrDhH-ZB zQ#qT--rJO6L;A*2K_|4q>#PJLdJ2L>by_9A^L~F;O8E^p6Qe3&@7Pa^-q)$O+~CgPsc7=4t0MG7-sX*baWyx&Usxbr%#w;n{lvr2QX6G2`cI5s|0RX zXn9lPuH11GAWUmTABU4c3h3=Bn1c;vpZ#t&E>yfzI}2dHd*7a|;RuX(Kmn_S0ls(0 zU^l}Dx@AHVeyt+T-{QctWDHG399Kn*Cl0m*A+q6PxA|0%oefUDDvaEW0mgg9fcO3^ zKyx40FBc$=GpEjAA;^(t*~-axqjD(y%z#7RURsV=NcSJ9ppFbMc|;PX=Q@b%hMSxW=^M0{$LO=(1`>%$8l-H_2ALa9dY`Ac}K!BNGvJnnnx z=sIP#POf}7$dQK$%XtI|dyz^N*5@I(RTx00l>vGG9rQ*6X5CsQpnOjY@*XDeYCj~9 zoJ|!-=@+5BNI*^#q6riv0$zGKm@rHpaHmHMy6mtu2l;y@$UFTS7+YQ7-y1wuaD^aA zo>sw$qilk=Km}jG<#ZUPK#xc@$OtR2JqnyDkjcj?s0hxQ|ASDXIu%n*MR@n~(CTa| zGgpC@@MX{`ZJ5s2wN(7iHNy-DJwm`{Du)cI?YZ|KsI7tePJ%Wo!$<)wV9Xt&^^bF-%?^4503&M4 v4VjJvd~60wIBxzi|9WPjeH;PbvC=ea5@6mbu%8Ju719f82CwNqB&hd4K`B1Q diff --git a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..04160e9888 100644 --- a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:49 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/restdocs/http-client/gradlew b/samples/standalone/restdocs/http-client/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/restdocs/http-client/gradlew +++ b/samples/standalone/restdocs/http-client/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/restdocs/http-client/gradlew.bat b/samples/standalone/restdocs/http-client/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/restdocs/http-client/gradlew.bat +++ b/samples/standalone/restdocs/http-client/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/restdocs/http-client/pom.xml b/samples/standalone/restdocs/http-client/pom.xml index 15941c38e3..20fdc253a2 100644 --- a/samples/standalone/restdocs/http-client/pom.xml +++ b/samples/standalone/restdocs/http-client/pom.xml @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/standalone/restdocs/http-server/build.gradle b/samples/standalone/restdocs/http-server/build.gradle index 59426bb7ea..f4c0302c39 100644 --- a/samples/standalone/restdocs/http-server/build.gradle +++ b/samples/standalone/restdocs/http-server/build.gradle @@ -10,7 +10,7 @@ buildscript { maven { url "http://repo.spring.io/plugins-staging-local/" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.0.M6" + classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE" } } @@ -27,7 +27,6 @@ repositories { apply plugin: 'groovy' apply plugin: 'org.springframework.boot' -apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' apply plugin: 'maven' @@ -55,7 +54,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '2.14' } task stubsJar(type: Jar, dependsOn: ['copySnippets', 'copySources', 'copyClasses']) { diff --git a/samples/standalone/restdocs/http-server/gradle.properties b/samples/standalone/restdocs/http-server/gradle.properties index cb360cc45f..b99fcb4df7 100644 --- a/samples/standalone/restdocs/http-server/gradle.properties +++ b/samples/standalone/restdocs/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false -verifierVersion=2.0.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +verifierVersion=1.2.2.BUILD-SNAPSHOT +BOM_VERSION=Edgware.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 21015 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; delta 21799 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 diff --git a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..8b8a75c0ac 100644 --- a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Fri Aug 19 15:39:42 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip diff --git a/samples/standalone/restdocs/http-server/gradlew b/samples/standalone/restdocs/http-server/gradlew index 4453ccea33..27309d9231 100755 --- a/samples/standalone/restdocs/http-server/gradlew +++ b/samples/standalone/restdocs/http-server/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -154,19 +154,11 @@ if $cygwin ; then esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/samples/standalone/restdocs/http-server/gradlew.bat b/samples/standalone/restdocs/http-server/gradlew.bat index e95643d6a2..832fdb6079 100644 --- a/samples/standalone/restdocs/http-server/gradlew.bat +++ b/samples/standalone/restdocs/http-server/gradlew.bat @@ -1,84 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/standalone/restdocs/http-server/pom.xml b/samples/standalone/restdocs/http-server/pom.xml index fd51a7329b..ac17ca768c 100644 --- a/samples/standalone/restdocs/http-server/pom.xml +++ b/samples/standalone/restdocs/http-server/pom.xml @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT @@ -104,9 +104,7 @@ false true - - ${basedir}/src/assembly/stub.xml - + ${basedir}/src/assembly/stub.xml diff --git a/samples/standalone/restdocs/pom.xml b/samples/standalone/restdocs/pom.xml index ac78d0ad0d..2c4d67c86b 100644 --- a/samples/standalone/restdocs/pom.xml +++ b/samples/standalone/restdocs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-contract-samples-standalone - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -17,7 +17,7 @@ Spring Cloud Contract Standalone Test Samples used for end to end tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/wiremock-jetty/pom.xml b/samples/wiremock-jetty/pom.xml index fb538a4dd2..93b783e9cf 100644 --- a/samples/wiremock-jetty/pom.xml +++ b/samples/wiremock-jetty/pom.xml @@ -4,7 +4,7 @@ 4.0.0 wiremock-jetty - 2.0.0.BUILD-SNAPSHOT + 0.0.1 jar wiremock-jetty @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/wiremock-native/pom.xml b/samples/wiremock-native/pom.xml index 38f1b95acb..e75600c5b1 100644 --- a/samples/wiremock-native/pom.xml +++ b/samples/wiremock-native/pom.xml @@ -4,7 +4,7 @@ 4.0.0 wiremock-native - 2.0.0.BUILD-SNAPSHOT + 0.0.1 jar wiremock-native @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/wiremock-tomcat/pom.xml b/samples/wiremock-tomcat/pom.xml index 835d6e2dca..bddaebc37b 100644 --- a/samples/wiremock-tomcat/pom.xml +++ b/samples/wiremock-tomcat/pom.xml @@ -4,7 +4,7 @@ 4.0.0 wiremock-tomcat - 2.0.0.BUILD-SNAPSHOT + 0.0.1 jar wiremock-tomcat @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/wiremock-undertow-ssl/pom.xml b/samples/wiremock-undertow-ssl/pom.xml index 202fa7d889..9634487f65 100644 --- a/samples/wiremock-undertow-ssl/pom.xml +++ b/samples/wiremock-undertow-ssl/pom.xml @@ -4,7 +4,7 @@ 4.0.0 wiremock-undertow-ssl - 2.0.0.BUILD-SNAPSHOT + 0.0.1 jar wiremock-undertow-ssl @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/samples/wiremock-undertow/pom.xml b/samples/wiremock-undertow/pom.xml index 91e91794c8..db5cb533a4 100644 --- a/samples/wiremock-undertow/pom.xml +++ b/samples/wiremock-undertow/pom.xml @@ -4,7 +4,7 @@ 4.0.0 wiremock-undertow - 2.0.0.BUILD-SNAPSHOT + 0.0.1 jar wiremock-undertow @@ -13,14 +13,14 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.M6 + 1.5.8.RELEASE UTF-8 1.8 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT diff --git a/spring-cloud-contract-dependencies/pom.xml b/spring-cloud-contract-dependencies/pom.xml index 30c12555db..d4afd8f28f 100644 --- a/spring-cloud-contract-dependencies/pom.xml +++ b/spring-cloud-contract-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.0.0.BUILD-SNAPSHOT + 1.3.6.BUILD-SNAPSHOT spring-cloud-contract-dependencies - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT pom spring-cloud-contract-dependencies Spring Cloud Contract Dependencies diff --git a/spring-cloud-contract-shade/pom.xml b/spring-cloud-contract-shade/pom.xml index d9801e51b6..1b678eceba 100644 --- a/spring-cloud-contract-shade/pom.xml +++ b/spring-cloud-contract-shade/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-shade diff --git a/spring-cloud-contract-spec/pom.xml b/spring-cloud-contract-spec/pom.xml index 57b84600ff..7bc987e897 100644 --- a/spring-cloud-contract-spec/pom.xml +++ b/spring-cloud-contract-spec/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-spec diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/BodyMatchers.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/BodyMatchers.groovy index 7fe351c450..b865c32d62 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/BodyMatchers.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/BodyMatchers.groovy @@ -1,7 +1,5 @@ package org.springframework.cloud.contract.spec.internal -import java.util.regex.Pattern - import groovy.transform.Canonical import groovy.transform.CompileStatic import groovy.transform.EqualsAndHashCode @@ -48,12 +46,6 @@ class BodyMatchers { return new MatchingTypeValue(MatchingType.REGEX, regex) } - // Backward compatibility with RegexPatterns - MatchingTypeValue byRegex(Pattern regex) { - assert regex - return new MatchingTypeValue(MatchingType.REGEX, regex) - } - MatchingTypeValue byEquality() { return new MatchingTypeValue(MatchingType.EQUALITY, null) } diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy index 416fbfa367..122d042ef0 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy @@ -113,11 +113,6 @@ class Common { return Pattern.compile(regex) } - // Backward compatibility with RegexPatterns - Pattern regex(Pattern regex) { - return regex - } - OptionalProperty optional(Object object) { return new OptionalProperty(object) } diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.groovy index 6f98c5c630..d8054ca59d 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.groovy @@ -36,8 +36,7 @@ abstract class PatternValueDslProperty { protected abstract T createProperty(Pattern pattern, Object generatedValue) T anyAlphaUnicode() { - return createAndValidateProperty(RegexPatterns.ONLY_ALPHA_UNICODE, - RandomStringGenerator.randomString(20)) + return createAndValidateProperty(RegexPatterns.ONLY_ALPHA_UNICODE, randomString(20)) } T anyNumber() { @@ -89,16 +88,26 @@ abstract class PatternValueDslProperty { } T anyNonBlankString() { - return createAndValidateProperty(RegexPatterns.NON_BLANK, - RandomStringGenerator.randomString(20)) + return createAndValidateProperty(RegexPatterns.NON_BLANK, randomString(20)) } T anyNonEmptyString() { - return createAndValidateProperty(RegexPatterns.NON_EMPTY, - RandomStringGenerator.randomString(20)) + return createAndValidateProperty(RegexPatterns.NON_EMPTY, randomString(20)) } T anyOf(String... values){ return createAndValidateProperty(RegexPatterns.anyOf(values), values[0]) } + + private static String randomString(int length) { + char[] characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray() + Random random = new Random() + char[] result = new char[length] + for (int i = 0; i < result.length; i++) { + // picks a random index out of character set > random character + int randomCharIndex = random.nextInt(characterSet.length) + result[i] = characterSet[randomCharIndex] + } + return new String(result) + } } diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RandomStringGenerator.java b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RandomStringGenerator.java deleted file mode 100644 index 0cddf8713b..0000000000 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RandomStringGenerator.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.springframework.cloud.contract.spec.internal; - -import java.util.Random; - -class RandomStringGenerator { - static String randomString(int length) { - char[] characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); - Random random = new Random(); - char[] result = new char[length]; - for (int i = 0; i < result.length; i++) { - // picks a random index out of character set > random character - int randomCharIndex = random.nextInt(characterSet.length); - result[i] = characterSet[randomCharIndex]; - } - return new String(result); - } -} diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RegexPatterns.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RegexPatterns.groovy index aa85d1b549..17be0c063a 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RegexPatterns.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/RegexPatterns.groovy @@ -52,60 +52,60 @@ class RegexPatterns { return Pattern.compile(values.collect({"^$it\$"}).join("|")) } - Pattern onlyAlphaUnicode() { - return ONLY_ALPHA_UNICODE + String onlyAlphaUnicode() { + return ONLY_ALPHA_UNICODE.pattern() } - Pattern number() { - return NUMBER + String number() { + return NUMBER.pattern() } - Pattern anyBoolean() { - return TRUE_OR_FALSE + String anyBoolean() { + return TRUE_OR_FALSE.pattern() } - Pattern ipAddress() { - return IP_ADDRESS + String ipAddress() { + return IP_ADDRESS.pattern() } - Pattern hostname() { - return HOSTNAME_PATTERN + String hostname() { + return HOSTNAME_PATTERN.pattern() } - Pattern email() { - return EMAIL + String email() { + return EMAIL.pattern() } - Pattern url() { - return URL + String url() { + return URL.pattern() } - Pattern uuid(){ - return UUID + String uuid(){ + return UUID.pattern() } - Pattern isoDate() { - return ANY_DATE + String isoDate() { + return ANY_DATE.pattern() } - Pattern isoDateTime() { - return ANY_DATE_TIME + String isoDateTime() { + return ANY_DATE_TIME.pattern() } - Pattern isoTime() { - return ANY_TIME + String isoTime() { + return ANY_TIME.pattern() } - Pattern iso8601WithOffset() { - return ISO8601_WITH_OFFSET + String iso8601WithOffset() { + return ISO8601_WITH_OFFSET.pattern() } - Pattern nonEmpty() { - return NON_EMPTY + String nonEmpty() { + return NON_EMPTY.pattern() } - Pattern nonBlank() { - return NON_BLANK + String nonBlank() { + return NON_BLANK.pattern() } // end::regexps[] diff --git a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RegexPatternsSpec.groovy b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RegexPatternsSpec.groovy index a4726ce569..5764ac588f 100644 --- a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RegexPatternsSpec.groovy +++ b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RegexPatternsSpec.groovy @@ -18,13 +18,15 @@ package org.springframework.cloud.contract.spec.internal import spock.lang.Specification +import java.util.regex.Pattern + class RegexPatternsSpec extends Specification { RegexPatterns regexPatterns = new RegexPatterns() def "should generate a regex for ip address [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.ipAddress().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.ipAddress()).matcher(textToMatch).matches() where: textToMatch || shouldMatch '123.123.123.123' || true @@ -33,7 +35,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for hostname [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.hostname().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.hostname()).matcher(textToMatch).matches() where: textToMatch || shouldMatch 'https://asd.com' || true @@ -46,7 +48,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for email [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.email().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.email()).matcher(textToMatch).matches() where: textToMatch || shouldMatch 'asd@asd.com' || true @@ -57,7 +59,7 @@ class RegexPatternsSpec extends Specification { // @see http://formvalidation.io/validators/uri/ def "should generate a regex for url [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.url().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.url()).matcher(textToMatch).matches() where: textToMatch || shouldMatch 'ftp://asd.com:9090/asd/a?a=b' || true @@ -128,7 +130,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for a number [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.number().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.number()).matcher(textToMatch).matches() where: textToMatch || shouldMatch '1' || true @@ -140,7 +142,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for a uuid [#textToMatch] that is a match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.uuid().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.uuid()).matcher(textToMatch).matches() where: textToMatch || shouldMatch UUID.randomUUID().toString() || true @@ -153,7 +155,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex with date [#textToMatch] in YYYY-MM-DD format that should match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.isoDate().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.isoDate()).matcher(textToMatch).matches() where: textToMatch || shouldMatch "2014-03-01" || true @@ -171,7 +173,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex with datetime [#textToMatch] in YYYY-MM-DDTHH:mm:ss format that should match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.isoDateTime().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.isoDateTime()).matcher(textToMatch).matches() where: textToMatch || shouldMatch "2014-03-01T12:23:45" || true @@ -196,7 +198,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex with time [#textToMatch] in HH:mm:ss format that should match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.isoTime().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.isoTime()).matcher(textToMatch).matches() where: textToMatch || shouldMatch "12:23:45" || true @@ -212,7 +214,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex with iso8601DateTimeWithTimezone [#textToMatch] in YYYY-MM-DDTHH:mm:ss.SSSZZ format that should match [#shouldMatch]"(){ expect: - shouldMatch == regexPatterns.iso8601WithOffset().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.iso8601WithOffset()).matcher(textToMatch).matches() where: textToMatch || shouldMatch '2014-03-01T12:23:45Z' || true @@ -225,7 +227,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for a non blank string [#textToMatch] that should match [#shouldMatch]"(){ expect: - shouldMatch == regexPatterns.nonBlank().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.nonBlank()).matcher(textToMatch).matches() where: textToMatch || shouldMatch 'Not Empty' || true @@ -239,7 +241,7 @@ class RegexPatternsSpec extends Specification { def "should generate a regex for a non empty string [#textToMatch] that should match [#shouldMatch]"() { expect: - shouldMatch == regexPatterns.nonEmpty().matcher(textToMatch).matches() + shouldMatch == Pattern.compile(regexPatterns.nonEmpty()).matcher(textToMatch).matches() where: textToMatch || shouldMatch 'Not Empty' || true diff --git a/spring-cloud-contract-starters/pom.xml b/spring-cloud-contract-starters/pom.xml index c30ea485dc..3a9f1a8ff8 100644 --- a/spring-cloud-contract-starters/pom.xml +++ b/spring-cloud-contract-starters/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. diff --git a/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner-jetty/pom.xml b/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner-jetty/pom.xml index 8b72e0b72b..9b899e9e1f 100644 --- a/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner-jetty/pom.xml +++ b/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner-jetty/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-starters - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-starter-contract-stub-runner-jetty diff --git a/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner/pom.xml b/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner/pom.xml index 40d2f4f6d5..775e63461c 100644 --- a/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner/pom.xml +++ b/spring-cloud-contract-starters/spring-cloud-starter-contract-stub-runner/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-starters - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-starter-contract-stub-runner @@ -17,6 +17,10 @@ org.springframework.cloud spring-cloud-contract-stub-runner + + org.springframework.integration + spring-integration-java-dsl + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml b/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml index 96270fd5bc..436bcbac20 100644 --- a/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml +++ b/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-starters - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-starter-contract-verifier diff --git a/spring-cloud-contract-stub-runner/pom.xml b/spring-cloud-contract-stub-runner/pom.xml index 9fb26c48b3..45707881ec 100644 --- a/spring-cloud-contract-stub-runner/pom.xml +++ b/spring-cloud-contract-stub-runner/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner @@ -38,7 +38,7 @@ org.springframework.cloud - spring-cloud-starter-netflix-ribbon + spring-cloud-starter-ribbon true @@ -60,6 +60,21 @@ jopt-simple true + + org.apache.camel + camel-spring-boot-starter + true + + + org.apache.camel + camel-jackson + true + + + org.springframework.integration + spring-integration-java-dsl + true + junit junit @@ -116,7 +131,7 @@ org.springframework.cloud - spring-cloud-netflix-eureka-server + spring-cloud-starter-eureka true 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 new file mode 100644 index 0000000000..743224bfd5 --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java @@ -0,0 +1,67 @@ +/* + * Copyright 2013-2017 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.cloud.contract.stubrunner.messaging.camel; + +import java.util.Collection; +import java.util.Map; + +import org.apache.camel.RoutesBuilder; +import org.apache.camel.spring.SpringRouteBuilder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.contract.spec.Contract; +import org.springframework.cloud.contract.stubrunner.BatchStubRunner; +import org.springframework.cloud.contract.stubrunner.StubConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Camel configuration that iterates over the downloaded Groovy DSLs and registers a route + * for each DSL. + * + * @author Marcin Grzejszczak + */ +@Configuration +@ConditionalOnClass(RoutesBuilder.class) +@ConditionalOnProperty(name="stubrunner.camel.enabled", havingValue="true", matchIfMissing=true) +public class StubRunnerCamelConfiguration { + + @Bean + public RoutesBuilder myRouter(final BatchStubRunner batchStubRunner) { + return new SpringRouteBuilder() { + @Override + public void configure() throws Exception { + Map> contracts = batchStubRunner + .getContracts(); + for (Collection list : contracts.values()) { + for (Contract it : list) { + if (it.getInput() != null + && it.getInput().getMessageFrom() != null + && it.getOutputMessage() != null + && it.getOutputMessage().getSentTo() != null) { + from(it.getInput().getMessageFrom().getClientValue()) + .filter(new StubRunnerCamelPredicate(it)) + .process(new StubRunnerCamelProcessor(it)) + .to(it.getOutputMessage().getSentTo() + .getClientValue()); + } + } + } + } + }; + } +} diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java new file mode 100644 index 0000000000..e5cdc683df --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java @@ -0,0 +1,109 @@ +/* + * Copyright 2013-2017 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.cloud.contract.stubrunner.messaging.camel; + +import java.util.Map; +import java.util.regex.Pattern; + +import org.apache.camel.Exchange; +import org.apache.camel.Predicate; +import org.springframework.cloud.contract.spec.Contract; +import org.springframework.cloud.contract.spec.internal.BodyMatcher; +import org.springframework.cloud.contract.spec.internal.BodyMatchers; +import org.springframework.cloud.contract.spec.internal.Header; +import org.springframework.cloud.contract.verifier.util.MapConverter; +import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper; +import org.springframework.cloud.contract.verifier.util.JsonPaths; +import org.springframework.cloud.contract.verifier.util.JsonToJsonPathsConverter; +import org.springframework.cloud.contract.verifier.util.MethodBufferingJsonVerifiable; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.toomuchcoding.jsonassert.JsonAssertion; + +/** + * Passes through a message that matches the one defined in the DSL + * + * @author Marcin Grzejszczak + */ +class StubRunnerCamelPredicate implements Predicate { + + private final Contract groovyDsl; + private final ContractVerifierObjectMapper objectMapper = new ContractVerifierObjectMapper(); + + public StubRunnerCamelPredicate(Contract groovyDsl) { + this.groovyDsl = groovyDsl; + } + + @Override + public boolean matches(Exchange exchange) { + if (!headersMatch(exchange)) { + return false; + } + Object inputMessage = exchange.getIn().getBody(); + BodyMatchers matchers = this.groovyDsl.getInput().getMatchers(); + Object dslBody = MapConverter.getStubSideValues(this.groovyDsl.getInput().getMessageBody()); + Object matchingInputMessage = JsonToJsonPathsConverter + .removeMatchingJsonPaths(dslBody, matchers); + JsonPaths jsonPaths = JsonToJsonPathsConverter + .transformToJsonPathWithStubsSideValuesAndNoArraySizeCheck( + matchingInputMessage); + DocumentContext parsedJson; + try { + parsedJson = JsonPath + .parse(this.objectMapper.writeValueAsString(inputMessage)); + } + catch (JsonProcessingException e) { + throw new IllegalStateException("Cannot serialize to JSON", e); + } + boolean matches = true; + for (MethodBufferingJsonVerifiable path : jsonPaths) { + matches &= matchesJsonPath(parsedJson, path.jsonPath()); + } + if (matchers != null && matchers.hasMatchers()) { + for (BodyMatcher matcher : matchers.jsonPathMatchers()) { + String jsonPath = JsonToJsonPathsConverter.convertJsonPathAndRegexToAJsonPath(matcher, dslBody); + matches &= matchesJsonPath(parsedJson, jsonPath); + } + } + return matches; + } + + private boolean matchesJsonPath(DocumentContext parsedJson, String jsonPath) { + try { + JsonAssertion.assertThat(parsedJson).matchesJsonPath(jsonPath); + return true; + } catch (Exception e) { + return false; + } + } + + private boolean headersMatch(Exchange exchange) { + Map headers = exchange.getIn().getHeaders(); + boolean matches = true; + for (Header it : this.groovyDsl.getInput().getMessageHeaders().getEntries()) { + String name = it.getName(); + Object value = it.getClientValue(); + Object valueInHeader = headers.get(name); + matches &= value instanceof Pattern ? + ((Pattern) value).matcher(valueInHeader.toString()).matches() : + valueInHeader!=null && valueInHeader.equals(value); + } + return matches; + } +} diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java new file mode 100644 index 0000000000..e733c5a817 --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java @@ -0,0 +1,59 @@ +/* + * Copyright 2013-2017 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.cloud.contract.stubrunner.messaging.camel; + +import org.springframework.cloud.contract.verifier.util.BodyExtractor; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.springframework.cloud.contract.spec.Contract; +import org.springframework.cloud.contract.spec.internal.Header; + +/** + * Sends forward a message defined in the DSL. Also removes headers from the input message + * and provides the headers from the DSL. + * + * @author Marcin Grzejszczak + */ +class StubRunnerCamelProcessor implements Processor { + + private final Contract groovyDsl; + + StubRunnerCamelProcessor(Contract groovyDsl) { + this.groovyDsl = groovyDsl; + } + + @Override + public void process(Exchange exchange) throws Exception { + Message input = exchange.getIn(); + if (this.groovyDsl.getInput().getMessageHeaders() != null) { + for (Header entry : this.groovyDsl.getInput().getMessageHeaders().getEntries()) { + input.removeHeader(entry.getName()); + } + } + if (this.groovyDsl.getOutputMessage() == null) { + return; + } + input.setBody(BodyExtractor + .extractStubValueFrom(this.groovyDsl.getOutputMessage().getBody())); + if (this.groovyDsl.getOutputMessage().getHeaders() != null) { + for (Header entry : this.groovyDsl.getOutputMessage().getHeaders().getEntries()) { + input.setHeader(entry.getName(), entry.getClientValue()); + } + } + } +} diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java index c01d094891..49f9683a8b 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java @@ -19,7 +19,6 @@ package org.springframework.cloud.contract.stubrunner.messaging.integration; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; -import java.util.function.Consumer; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -35,6 +34,7 @@ import org.springframework.integration.dsl.FilterEndpointSpec; import org.springframework.integration.dsl.GenericEndpointSpec; import org.springframework.integration.dsl.IntegrationFlowBuilder; import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.dsl.support.Consumer; import org.springframework.integration.transformer.MessageTransformingHandler; import org.springframework.messaging.Message; diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java index 91db4dd200..9d171d4b7e 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java @@ -19,7 +19,6 @@ package org.springframework.cloud.contract.stubrunner.messaging.stream; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; -import java.util.function.Consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +43,7 @@ import org.springframework.integration.dsl.FilterEndpointSpec; import org.springframework.integration.dsl.GenericEndpointSpec; import org.springframework.integration.dsl.IntegrationFlowBuilder; import org.springframework.integration.dsl.IntegrationFlows; +import org.springframework.integration.dsl.support.Consumer; import org.springframework.integration.transformer.MessageTransformingHandler; import org.springframework.messaging.Message; import org.springframework.util.StringUtils; diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java index 8413c934dd..7146153c20 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java @@ -94,8 +94,8 @@ public class WireMockHttpServerStub implements HttpServerStub { @Override public HttpServerStub start() { if (isRunning()) { - if (log.isTraceEnabled()) { - log.trace("The server is already running at port [" + port() + "]"); + if (log.isDebugEnabled()) { + log.debug("The server is already running at port [" + port() + "]"); } return this; } @@ -113,8 +113,8 @@ public class WireMockHttpServerStub implements HttpServerStub { @Override public HttpServerStub stop() { if (!isRunning()) { - if (log.isTraceEnabled()) { - log.trace("Trying to stop a non started server!"); + if (log.isDebugEnabled()) { + log.debug("Trying to stop a non started server!"); } return this; } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerDiscoveryClient.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerDiscoveryClient.java index d98313f262..05af101388 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerDiscoveryClient.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerDiscoveryClient.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.contract.stubrunner.RunningStubs; @@ -50,7 +51,7 @@ class StubRunnerDiscoveryClient implements DiscoveryClient { public StubRunnerDiscoveryClient(DiscoveryClient delegate, StubFinder stubFinder, StubMapperProperties stubMapperProperties, String springAppName) { this.delegate = delegate instanceof StubRunnerDiscoveryClient ? - noOpDiscoveryClient() : delegate; + noOpDiscoveryClient(springAppName) : delegate; if (log.isDebugEnabled()) { log.debug("Will delegate calls to discovery service [" + this.delegate + "] if a stub is not found"); } @@ -60,7 +61,7 @@ class StubRunnerDiscoveryClient implements DiscoveryClient { public StubRunnerDiscoveryClient(StubFinder stubFinder, StubMapperProperties stubMapperProperties, String springAppName) { - this.delegate = noOpDiscoveryClient(); + this.delegate = noOpDiscoveryClient(springAppName); if (log.isDebugEnabled()) { log.debug("Will delegate calls to discovery service [" + this.delegate + "] if a stub is not found"); } @@ -68,8 +69,8 @@ class StubRunnerDiscoveryClient implements DiscoveryClient { this.stubMapperProperties = stubMapperProperties; } - private StubRunnerNoOpDiscoveryClient noOpDiscoveryClient() { - return new StubRunnerNoOpDiscoveryClient(); + private StubRunnerNoOpDiscoveryClient noOpDiscoveryClient(String springAppName) { + return new StubRunnerNoOpDiscoveryClient(new DefaultServiceInstance(springAppName, "localhost", 0, false)); } @Override @@ -84,6 +85,18 @@ class StubRunnerDiscoveryClient implements DiscoveryClient { return ""; } + @Override + public ServiceInstance getLocalServiceInstance() { + try { + return this.delegate.getLocalServiceInstance(); + } catch (Exception e) { + if (log.isDebugEnabled()) { + log.debug("Failed to get local service instance from delegate", e); + } + } + return null; + } + @Override public List getInstances(String serviceId) { String ivyNotation = this.stubMapperProperties.fromServiceIdToIvyNotation(serviceId); @@ -142,11 +155,22 @@ class StubRunnerDiscoveryClient implements DiscoveryClient { class StubRunnerNoOpDiscoveryClient implements DiscoveryClient { + private final ServiceInstance instance; + + public StubRunnerNoOpDiscoveryClient(ServiceInstance instance) { + this.instance = instance; + } + @Override public String description() { return "Spring Cloud Stub Runner No-op DiscoveryClient"; } + @Override + public ServiceInstance getLocalServiceInstance() { + return this.instance; + } + @Override public List getInstances(String serviceId) { return Collections.emptyList(); diff --git a/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories index 6d40105b96..dc3d4e026a 100644 --- a/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories @@ -5,6 +5,7 @@ org.springframework.cloud.contract.stubrunner.spring.cloud.StubRunnerSpringCloud org.springframework.cloud.contract.stubrunner.spring.cloud.ribbon.StubRunnerRibbonAutoConfiguration,\ org.springframework.cloud.contract.stubrunner.messaging.stream.StubRunnerStreamConfiguration,\ org.springframework.cloud.contract.stubrunner.messaging.integration.StubRunnerIntegrationConfiguration,\ +org.springframework.cloud.contract.stubrunner.messaging.camel.StubRunnerCamelConfiguration,\ org.springframework.cloud.contract.stubrunner.spring.cloud.zookeeper.StubRunnerSpringCloudZookeeperAutoConfiguration,\ org.springframework.cloud.contract.stubrunner.spring.cloud.eureka.StubRunnerSpringCloudEurekaAutoConfiguration,\ org.springframework.cloud.contract.stubrunner.spring.cloud.consul.StubRunnerSpringCloudConsulAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerExecutorSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerExecutorSpec.groovy index 9422952229..fdcfbf5f29 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerExecutorSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerExecutorSpec.groovy @@ -28,8 +28,8 @@ import spock.lang.Specification class StubRunnerExecutorSpec extends Specification { - static final int MIN_PORT = 18999 - static final int MAX_PORT = 19999 + static final int MIN_PORT = 8999 + static final int MAX_PORT = 9999 private AvailablePortScanner portScanner private StubRepository repository diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicateSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicateSpec.groovy new file mode 100644 index 0000000000..ba71c68044 --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicateSpec.groovy @@ -0,0 +1,137 @@ +package org.springframework.cloud.contract.stubrunner.messaging.camel + +import org.apache.camel.Exchange +import org.apache.camel.Message +import org.springframework.cloud.contract.spec.Contract +import spock.lang.Specification + +/** + * @author Marcin Grzejszczak + */ +class StubRunnerCamelPredicateSpec extends Specification { + Exchange exchange = Stub(Exchange) + Message message = Stub(Message) + + def "should return false if headers don't match"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageBody(foo: "bar") + messageHeaders { + header("foo", $(c(regex("[0-9]{3}")), p(123))) + } + } + } + and: + StubRunnerCamelPredicate predicate = new StubRunnerCamelPredicate(dsl) + exchange.in >> message + message.headers >> [ + foo: "non matching stuff" + ] + expect: + !predicate.matches(exchange) + } + + def "should return false if headers match and body doesn't"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", 123) + } + messageBody(foo: $(c(regex("[0-9]{3}")), p(123))) + } + } + and: + StubRunnerCamelPredicate predicate = new StubRunnerCamelPredicate(dsl) + exchange.in >> message + message.headers >> [ + foo: 123 + ] + message.body >> [ + foo: "non matching stuff" + ] + expect: + !predicate.matches(exchange) + } + + def "should return false if headers match and body doesn't when it's using matchers"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", 123) + } + messageBody(foo: "non matching stuff") + stubMatchers { + jsonPath('$.foo', byRegex("[0-9]{3}")) + } + } + } + and: + StubRunnerCamelPredicate predicate = new StubRunnerCamelPredicate(dsl) + exchange.in >> message + message.headers >> [ + foo: 123 + ] + message.body >> [ + foo: "non matching stuff" + ] + expect: + !predicate.matches(exchange) + } + def "should return true if headers and body match"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", 123) + } + messageBody(foo: $(c(regex("[0-9]{3}")), p(123))) + + } + } + and: + StubRunnerCamelPredicate predicate = new StubRunnerCamelPredicate(dsl) + exchange.in >> message + message.headers >> [ + foo: 123 + ] + message.body >> [ + foo: 123 + ] + expect: + predicate.matches(exchange) + + } + def "should return true if headers and body using matchers match"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", 123) + } + messageBody(foo: 123) + stubMatchers { + jsonPath('$.foo', byRegex("[0-9]{3}")) + } + } + } + and: + StubRunnerCamelPredicate predicate = new StubRunnerCamelPredicate(dsl) + exchange.in >> message + message.headers >> [ + foo: 123 + ] + message.body >> [ + foo: 123 + ] + expect: + predicate.matches(exchange) + } +} diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy index c436dfc803..197b6c0c3a 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy @@ -16,16 +16,16 @@ package org.springframework.cloud.contract.stubrunner.server -import groovy.json.JsonSlurper import io.restassured.module.mockmvc.RestAssuredMockMvc -import spock.lang.Specification - +import groovy.json.JsonSlurper import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootContextLoader import org.springframework.boot.test.context.SpringBootTest import org.springframework.cloud.contract.stubrunner.StubRunning import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification + /** * @author Marcin Grzejszczak */ @@ -55,7 +55,7 @@ class StubRunnerBootSpec extends Specification { def response = RestAssuredMockMvc.get("/stubs/${stubId}") then: response.statusCode == 200 - Integer.valueOf(response.body.asString()) > 0 + response.body.as(Integer) > 0 where: stubId << ['org.springframework.cloud.contract.verifier.stubs:bootService:+:stubs', 'org.springframework.cloud.contract.verifier.stubs:bootService:0.0.1-SNAPSHOT:stubs', diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootConsulExample.java b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootConsulExample.java index 538edfe53d..9cc35ccab1 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootConsulExample.java +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootConsulExample.java @@ -43,6 +43,7 @@ public class StubRunnerBootConsulExample { -Dstubrunner.ids=org.springframework.cloud.contract.verifier.stubs:loanIssuance,org.springframework.cloud.contract.verifier.stubs:fraudDetectionServer,org.springframework.cloud.contract.verifier.stubs:bootService -Dstubrunner.idsToServiceIds.fraudDetectionServer=someNameThatShouldMapFraudDetectionServer -Dstubrunner.cloud.consul.enabled=true +-Dstubrunner.camel.enabled=false -Dspring.cloud.zookeeper.enabled=false -Deureka.client.enabled=false -Dspring.cloud.zookeeper.discovery.enabled=false diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootEurekaExample.java b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootEurekaExample.java index a8dcc118f3..7973900003 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootEurekaExample.java +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootEurekaExample.java @@ -56,6 +56,7 @@ public class StubRunnerBootEurekaExample { -Dstubrunner.cloud.eureka.enabled=true -Dstubrunner.repositoryRoot=classpath:m2repo/repository/ +-Dstubrunner.camel.enabled=false -Dspring.cloud.zookeeper.enabled=false -Dspring.cloud.zookeeper.discovery.enabled=false -Ddebug=true diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootZookeeperExample.java b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootZookeeperExample.java index 984722d66c..5e6af84c81 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootZookeeperExample.java +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/serverexamples/StubRunnerBootZookeeperExample.java @@ -43,6 +43,7 @@ public class StubRunnerBootZookeeperExample { -Dstubrunner.cloud.stubbed.discovery.enabled=false -Dstubrunner.cloud.zookeepr.enabled=true -Dstubrunner.repositoryRoot=classpath:m2repo/repository/ +-Dstubrunner.camel.enabled=false -Deureka.client.enabled=false -Ddebug=true diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy index 6851b346cb..4dad71a21e 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy @@ -39,6 +39,7 @@ import spock.lang.Specification // tag::test[] @ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest(properties = [" stubrunner.cloud.enabled=false", + "stubrunner.camel.enabled=false", 'foo=${stubrunner.runningstubs.fraudDetectionServer.port}']) @AutoConfigureStubRunner(mappingsOutputFolder = "target/outputmappings/") @DirtiesContext diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy index 272920c915..c51b1496d8 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy @@ -16,8 +16,6 @@ package org.springframework.cloud.contract.stubrunner.spring.cloud -import spock.lang.Specification - import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootContextLoader @@ -34,6 +32,8 @@ import org.springframework.http.ResponseEntity import org.springframework.messaging.Message import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification + /** * @author Marcin Grzejszczak */ diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy index eb61c7b1bf..8e451ff9e6 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy @@ -16,8 +16,6 @@ package org.springframework.cloud.contract.stubrunner.spring.cloud -import spock.lang.Specification - import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootContextLoader @@ -34,6 +32,8 @@ import org.springframework.http.ResponseEntity import org.springframework.messaging.Message import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification + /** * @author Marcin Grzejszczak */ diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy index a2cbcc277e..236e96080c 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy @@ -18,22 +18,22 @@ package org.springframework.cloud.contract.stubrunner.spring.cloud.consul import com.ecwid.consul.v1.ConsulClient import com.ecwid.consul.v1.agent.model.NewService +import org.hamcrest.Description +import org.hamcrest.TypeSafeMatcher import org.junit.AfterClass import org.junit.BeforeClass -import org.mockito.ArgumentMatcher -import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties -import spock.lang.Specification - import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootContextLoader import org.springframework.boot.test.context.SpringBootTest import org.springframework.cloud.client.discovery.EnableDiscoveryClient +import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ContextConfiguration +import spock.lang.Specification import static org.mockito.BDDMockito.then import static org.mockito.Matchers.argThat @@ -43,7 +43,8 @@ import static org.mockito.Mockito.mock */ @ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = ["eureka.client.enabled=false", + properties = ["stubrunner.camel.enabled=false", + "eureka.client.enabled=false", "spring.cloud.zookeeper.enabled=false", "stubrunner.cloud.stubbed.discovery.enabled=false", "stubrunner.cloud.eureka.enabled=false", @@ -80,7 +81,7 @@ class StubRunnerSpringCloudConsulAutoConfigurationSpec extends Specification { serviceName << ['loanIssuance:loanIssuance', 'bootService:bootService', 'fraudDetectionServer:someNameThatShouldMapFraudDetectionServer'] } - private static class NewServiceMatcher implements ArgumentMatcher { + private static class NewServiceMatcher extends TypeSafeMatcher { private final String expectedId private final String expectedName @@ -91,9 +92,14 @@ class StubRunnerSpringCloudConsulAutoConfigurationSpec extends Specification { } @Override - boolean matches(NewService item) { + protected boolean matchesSafely(NewService item) { return item.id == expectedId && item.name == expectedName } + + @Override + void describeTo(Description description) { + + } } @Configuration @@ -108,7 +114,7 @@ class StubRunnerSpringCloudConsulAutoConfigurationSpec extends Specification { @Bean ConsulDiscoveryProperties consulDiscoveryProperties() { - return mock(ConsulDiscoveryProperties) + return new ConsulDiscoveryProperties() } } } diff --git a/spring-cloud-contract-stub-runner/src/test/resources/application-cloudtest.yml b/spring-cloud-contract-stub-runner/src/test/resources/application-cloudtest.yml index ea941760d1..e748b714b5 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/application-cloudtest.yml +++ b/spring-cloud-contract-stub-runner/src/test/resources/application-cloudtest.yml @@ -1,4 +1,5 @@ stubrunner: + camel.enabled: false cloud.stubbed.discovery.enabled: true spring.cloud: zookeeper: diff --git a/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml b/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml index 9541d7973c..1381be8b05 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml +++ b/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml @@ -8,6 +8,8 @@ stubrunner: # end::test[] cloud: enabled: false + camel: + enabled: false spring.cloud: consul.enabled: false diff --git a/spring-cloud-contract-stub-runner/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/producerWithMultipleConsumers/0.0.1-SNAPSHOT/producerWithMultipleConsumers-0.0.1-SNAPSHOT-stubs.jar b/spring-cloud-contract-stub-runner/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/producerWithMultipleConsumers/0.0.1-SNAPSHOT/producerWithMultipleConsumers-0.0.1-SNAPSHOT-stubs.jar index b5a09c6c90c0f4b3a7d5777a9ece1091501589e7..73554a760b9826f3fefa11411160a3b7a5ac1285 100644 GIT binary patch delta 653 zcmaDTvr%S47b7ok(GsuvxS+3_8Gv9iFRRStw_LoF4=~Er&y?nltOw%K3T_5QmKV$n z3}7PE?=)YNfq>2Q^$)I1(vW}P+oR4Lvq#dIYt2-VT`AE?9S`s41`6Be7)`ExqptF|Znl}D_M z{q%OsSnQ|it&p)fvOvG9MO`pjscrJ-c`|FJX6dGg^;j={kgs|pqW7(io*YZZt`FSh zg)4skJi6{+CHqaLn_FKvvz$NmX^ZZ+pA+-{1uJfBkvz@4`2dpx6YrafM|sk@TZH`ie`w^-S~4 z%}a!=gVIC1iyGJ``Mr``uD0@`#iXsD&90pMxSDOHVx8NX>7ri@)eD4YZgRSk+8q)$ zsRHbwfHQ&1MFdP<>g+H-+Lo`h&4ow(`AiiJsm(B2~es85kIJ7#SF>Cw`EayqAl2@&QJ<`t1vDM{WY*(h6<{ zMwahDX%-Qny3qcEs}30mxL$u5UNT)|i~NT&|H8#9q|22iElcKEJJY~(;-?q;XMfau zk(AI@{p_BkO7wAubGNx)O5d5d>(&>GEn6Mud(57aYVh@w?cEagr}2tacOBxrnoK6x zn|Iv(*))YaRdEi#bCOrOO3^hY$K4WB&n#M%656p+z+%an97VU>`E5!~{_G*2;uC#L zZuGsHA)UAJ_EYY9uWdh12&t>BUl6_Ehe;K$m)^JEXKTLijy-wvd)QackBen&*-p&i zTUhR<-d-nradp?tPXBpw0p83klN-1sHXmV9VG{fd42{nXKD*DtLSymjllG_~xcy1qF$FcNtrCfBoxO`glczuA**4>K=H5}7Q-6)Ffy7bt0Bas`(T^8qG? z$&QT5llQapO}@e9!MJv^B6m77CkseaY_cp5@8osd7K#`_%pd^_Yz78k;$moM{03L8 zEeHy7R9hl>beJsICM$4)T<6a;8N&R)#yeS%*NN#JjH@`ghu48=13Oe9FVICIlUe!H K*ortnHUR)*Whhqw diff --git a/spring-cloud-contract-stub-runner/src/test/resources/simulation.json b/spring-cloud-contract-stub-runner/src/test/resources/simulation.json index 2f1571b1ce..93942f7f56 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/simulation.json +++ b/spring-cloud-contract-stub-runner/src/test/resources/simulation.json @@ -1 +1 @@ -{"data":{"pairs":[],"globalActions":{"delays":[]}},"meta":{"schemaVersion":"v1","hoverflyVersion":"v0.9.0","timeExported":"2017-06-26T11:40:47+02:00"}} \ No newline at end of file +{"data":{"pairs":[],"globalActions":{"delays":[]}},"meta":{"schemaVersion":"v1","hoverflyVersion":"v0.9.0","timeExported":"2017-06-26T10:48:01+02:00"}} \ No newline at end of file diff --git a/spring-cloud-contract-tools/pom.xml b/spring-cloud-contract-tools/pom.xml index 1f2a7ae820..656bd286ac 100644 --- a/spring-cloud-contract-tools/pom.xml +++ b/spring-cloud-contract-tools/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-converters/pom.xml index dd49e7e10f..2efc2d4918 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tools - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-converters diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/build.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/build.gradle index d289534e48..5674941167 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/build.gradle +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/build.gradle @@ -23,7 +23,7 @@ ext { ] } -project.version = findProperty('verifierVersion') ?: '2.0.0.BUILD-SNAPSHOT' +project.version = findProperty('verifierVersion') ?: '1.5.4.RELEASE' apply plugin: 'groovy' apply from: "$rootDir/gradle/release.gradle" apply plugin: 'eclipse' @@ -135,5 +135,5 @@ task resolveDependencies { } task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '3.4' } \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle.properties index 1946c9108a..6e0df725d8 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle.properties +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle.properties @@ -16,6 +16,6 @@ nexusUsername = nexusPassword = -verifierVersion=2.0.0.BUILD-SNAPSHOT +verifierVersion=1.2.2.BUILD-SNAPSHOT org.gradle.daemon=false aetherVersion=1.0.2.v20150114 \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar index 96d36c23c86687e8c46a94a1eb0be9628b80422e..deedc7fa5e6310eac3148a7dd0b1f069b07364cb 100644 GIT binary patch delta 16418 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 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml index f6aa31661c..b043a61f4f 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-contract-tools - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle index 2a33e16b91..48c07458e6 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/build.gradle @@ -1,9 +1,6 @@ buildscript { repositories { mavenCentral() - maven { url "http://repo.spring.io/snapshot" } - maven { url "http://repo.spring.io/milestone" } - maven { url "http://repo.spring.io/release" } } } @@ -23,15 +20,12 @@ ext { repositories { mavenCentral() mavenLocal() - maven { url "http://repo.spring.io/snapshot" } - maven { url "http://repo.spring.io/milestone" } - maven { url "http://repo.spring.io/release" } } dependencies { compile "org.springframework:spring-web" compile "org.springframework:spring-context-support" - compile "org.codehaus.groovy:groovy-all:2.5.0-beta-1" + compile "org.codehaus.groovy:groovy-all:2.4.11" compile 'com.jayway.jsonpath:json-path-assert:2.2.0' testCompile "com.github.tomakehurst:wiremock:${wiremockVersion}" @@ -55,7 +49,7 @@ contracts { generateContractTests.dependsOn generateWireMockClientStubs wrapper { - gradleVersion '3.5' + gradleVersion '2.2.1' } test { diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties index 4cde276f6d..2f45204455 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties @@ -15,5 +15,5 @@ # wiremockVersion=2.12.0 jsonAssertVersion=0.4.10 -verifierVersion=2.0.0.BUILD-SNAPSHOT +verifierVersion=1.2.2.BUILD-SNAPSHOT diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.jar b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.jar index 6ffa237849ef3607e39c3b334a92a65367962071..3baa851b28c65f87dd36a6748e1a85cf360c1301 100644 GIT binary patch delta 10718 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 J*Yy|q{{VlTTGIdk delta 10253 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 J*Yy|q{{VlTTGIdk delta 10253 zcmZX41z40pyY{j)(vmCP-Q6W!N(hpY(hW;4AkrZ$-Q7s1gmkxbhk>Mkl*GRR-*=AZ zf3ItI=DO#8?&q1A-I;e{Bpd#720W&^5exIqu0XhR8pb&&_50DdL9uViR zRVBLW83z&oQ2zt~;D&Ol5X4hFshk%0j3zp_m9efFT-eS$zq591QBo z0MsxV1R#pL1(^a=)njjmvWFCZ*+W0O{MaPnt4bMJ^MrB;q9CuW&>SU$Gf0_+5h7;s zO?K{S+1C%RG0VP&1{X0oYLdqER->!+zcG=JZU?>>&}KSI_~1m+Z=5b0yjkU#3+z_R zG6;xe5^&ri>gCotQvb4U!(b)ASj94zu;5ZoownpwZV8c-JIj_ZI0*8bQeG(JPX75z zbePx{zj&-kb&{X7W4uo3Wj180Q8r)iSU3Vm#jMW#bJ2bFSAoY=9X{u*g+0P=VJQTfwqEJxSijr@C}-0%dJ-DDVYTa8a<)nW-pYOzI(kZksN24=i>dA zl9xB7v@ev9>UZ<*sp2IsZ#@rnu`!at7i%VyRoY(VlKrPjWM74syr!Q} zw{0allj&<< zBWrF@^zSBGcJYM8dj85DRz;nDy2u^*Tm?DqRD{z7!=D0(xoy6Fkj8x$U3W<@q0C+v zq0Ig#EGew+emeaT;Z>;YJ7D4>x7OUmS5B#(9XX~(gD)xsw-P>!5;vL=qWAxfYNb~( z0_7Ek7rjXSNW0avOI+F&xz%I-1I)_fD%-6~TDgT0AZ)L#12iY|^?B-G1=i~q2EXdx z0!wv!3$6Ae1GU;VAo(22TfxrXrQPc#NiHdMIr@}`i-zI+Q`$MZ2>5*XKSTL=eDb$U z)2ENZqSZJHH@Hc&Od}Ou)5HK-8+mx<6;7VK%oZs@EA&#oT9K@hdX+?*_RXVKHnHs+ z3i&IVG=j8rPV+TJY%S-F6REJ0y|T0Ol@Bykev`M!dGZP80}u|4*XWi)q)-0&;DVd=~7kr1ye*{eO?5Dvg6Dlc;SQOAIvy_v>tz&?=k+`bzk?MU6p4 z($zhoy0tX$@Vnky&Bp7io*H%<)E)#AtCWcZ??_n}Uq;us#C=L&#u(gtnPXVH-I_yy zDedhSY}t-mW)H!Pwg*ooTD%xNLOcoLco* z*8T`2flGj$I^2|Q_d4V&~=I6n-=QIg+8oOzQgit0$Ckh^}MmF@wo=Co@L**6gn1&l~ z#kk3rO0Fx&da623IYGTOGP9;F`hkkIWx7_w7?+0e&pFO#Oyn_KGjb_#&`Ly$Arn>G z)re1ykSOSdn%OTx_brFLPVoWGUIVId z`&_Voxr8=Nl^&0A%-iiH*>*cg4|Pg89d?3`6N~T@Z{6a~8lZhl$sa+PWchA5=~Hz^ z!ERp`WM2!$v!->=~1eS2f^5~R3V6zR`g?GKZcwH81&iX0dw&s+*TnGgA^GZ1uNBN;AmMV`B^C5vPjMeAglP^^Pm+?`-h4wqpF!1OsjMx}aP)-G2+k)r?W?eR-i%s|D~~u0 zpXli}SlJZ5h|7M#c$^xmRANs3sgnhH#IcT1ZFHcw^_!+#eR-alamD*e?sr68x&D|@ zn9hqVFst>q@0ak|##k8y0$(6Tat%+U40m}$NT8I7f#1P-na zKi`P>%xkXJDR-eGG0t{5bY)N)6r_gd z6Fy!XZ3v2M(KTsBK@;mQCUj;M|AN}mFxLG?sx#?Au~XVd#eb!#u&t?Z>uDncb7GJK zo=?Q#5BxnZL&j$f+GfHDcpOpMFwz5md~4QI8Q(@+HQ* z);!`FEUlRX&o}IoYQ|W7CkKIDh9WD#W};QssUd3Yb%g4k`BU?| z2r$nm?^e5K%<9pO7r#9X7Gr{R+%Bqe%JP!KH|sJB3z+3u zM^>O0=pNvHCxhQ*D&%S$IqNUI9AjF?^byd9Q;(U&X`T=zm7h#_6;J4u^K< zb^MUkiO9^N69FPt~lo^xo+7>JZoLLz=Q9Jb)X#kQ4(e#J`s%2BINBwSJ-I^mPgFDUY5iI;0xSb#%} z>kEG-5lHzI9V12&<#)!*@nTY9Ug4S8I%QE|H}$S5d+M~tFXe9fqj)^1toQ(fj6pI& zDO&DHL7$OceT`0KvR#t3X3ImcbG}j6&+644urmbgSX=~}>@5j|x)jDvD=W<%<7zJy z60(R+$1?0gFEPwZ^1Oog9I9yD^4?j+6)O=hDEKON&5CuW|4inZah2T_uqhQ3nse&P z{PbSAQ3L>KiFb;7!b)Sh5b0h(*%XP*_>R2IG2BFp-K zt`SI(1!mb(Tbtr>`I3~a(h}}{+nTj#!*Irh4FFv!NriB}rQ2>*5UZB9XNdK#6DlsL zjWey}cyoNBi^!Sov=Cy;{(=7M1n&BDYiqev5!xx407+S8gRbKNZ9PftS|QnBuS?*u zY^QQUW#LGy64EyO1>e`)k`gO8tH@+xp$`zwFRon)NRpyTVPz%UwBiFhtF|AF7nYFW z!6`t|0$uy=0j9;0CKJ@^fjcM`oXUl&YIrNPW|eS%kcjH_cR+)DSkvj#JeTj8r(vs-{e1$ikTZ zId|e2$1KcD|NMB7wy~xZyMePk2;=UP*#M$Plwzpn;F8%VX?tc5UPJ|!57w2r7ONg$ zBJCqI!-89VcX08C`cvWx%{RE4(JC7dE-*MQ64hZLehpXknT!Pnb9qMI)PgLpMjt4B zJs9t^8{%5;xz5IU$^NqWZw4^@YVkUQVdXlJ7rsc(w`ddPPOKy8DX4pbbyDga-Zct8 z-nPW;ikS*NF6vCG_K|7g1uA#i^2m0bqJwG;N8UQ`v%Ku}B9=mt-0yL&IH?to4a<=m zPsDDdTSRWZ!ARK{F$KvzKD3lN6g>W-Bi)$f)V|2j9lq!i+XdRqsv>vkFmkWUdkS+7L94emfb z!a}_3>7a4NBzhCOyHVT1OX{ZsNvl5;&6<9BmH)Az+iP|@O^;ZLv3k}{!3 z6$|gSa}wdU&U2*2TpG#4jYwM3^7{T!NW>0gdHM9YOire8T!~fGvp+BW$bOho*etYFoMNcoqS!En(eL{x zO~SRvc9@5r8oszO?{%OgB=RKw<+IbP1?E8EPT-uMPF(7U-S!L*V*PbP6}MwAj!5A7 zZ3d}rRkMcK0X1t$q=TY#xgX+nbz~$Z?)Y;uvK#DQJcpz8ZePZu<;RSSNAr(*8IMmt zyhFt{bNR7XwsQF?d)iWFDecEi3WHTnUQVrq_{EV>ls8c8!3UHh$eFO$$EO3Z6BG+E|lm9 z`LPXzi~t>{YntlKp5h#FuL`SeJ*DYpQ0fwcM73D>>ub6qgo18-2+vqvhI_+{*CTnR zY})M=A42{3Z=6Mew|MgsLi6ETe2IBWG2TwN4wNenv_oLLtKS<<0moRQgzZD7nI~Tytf7*Xsb=yQSefR8$TVb*nX0RO<+;M zZ2nUS$LeRPYZen7%GX3)#;c<9<&u;Pp4wlM!VpZ&xn*fK%wk@J?%yx9H;^hA<`)mqW4<%z9SNN?r!O&)$lk zz@-|Dln=ljwAd+Ews?kzXT%6dzc|&}7H}L;=rHD?yDT0m^&M!QV$zu+3Stx@qy9>o zpBJQQL*3ia{EmbsY z(1m~KtSzG#s`WdT8K#!e8^5BZ$g3u>L;Z58fXIIMTN?$BvOGO1Z{1tFJH&sNk&R)- zyScEHNmb)*LFPiVDr@M1r>T;6O5TkbR!c5#Nb_@IAg1`G6rC zM2WJFs7<60sv=Linbb6nK~2eN@KS;l~SkTG3^>xm#`v$x}%(S z;Ck3L)pmZ-@u`+YDdbnB`1;Q3dHap;;h*+?=$+>UCm^kd0AJX#F?-wH)KY0G8+!z5yp8wCVMtwaRsRYnAu?(PZh@MZ_xAVQyZI3BhY! zi@_=`?nTxz&O@) zw+7i*XlW;4SdWMN^Xnu)Kq*@!Z|OL<|%_0q;~3~oO7SB{e8)P;Y1+x0`CKZa-! z?nZv(gJLRn2)WHIq7aTKu#E4f;#NL{Y1q7*`WzSZmf z7n=kzyMytaF}%%QvL=&`X~Z$RVK`QMV$VV%6{##X5r`E6l}=Ev)QVWB+u50!LL`?U zJj9+1-<%ZlBj}llgLZo*h#x_tOva4{F!DZIzO*ER*c$2roVzE zbyV!t@TeQ1DinB9nMydRFPL+-WFc^FuF(13E)K}6AF<05xv7oOxNd>b@5o&?33<;J z7i_d{)xxxv5ed4}63Txz-Lovvmp^f&bgkG~$$O2|K|AIYkh`^0ESY6@DgH4#cx~ex zbn7q9bO8+(-(puTO?gtUrxxY5y9K%p@36WMzRjV0FU*_X$IYwLq|_= zyQ*%IDW{=8Ot<@q8I{FP>TI#Ag_##VKV-a0Lzb`dGJ84e`8SW5Rn;684-bJCsR9Gom+KCpQdK9S>1W+iIU$ zIDeoCm|>nmqfNS7Fa4-{TJmFcRJqDET5v7`#3;uK8)6CVR%EBrf$6) zDib3c6|2tUM0TqZUOX)$`q9+$jDbB;KP`oB#THBDPfx-eO_ZIwOdcIyXjE%-plx?* z6G9`i3AB~GaSHW2D_xvdtu0n{vZphLlWE{wwnvLqc|}>4+7>IHfiHypoCNEe@uaYU z+;;}0Hnx)~PSKfE5|#d_AUDdH8lSJqjyyuCs>dc3%nYC2_YEYzGE*Zxsqb@P8KA6< zAk&*He)HA6w_uvI%u!u^Sx|QUrzcN130rw2>u*nQL79RIZQb8Mx639T_tE!qs7%A3 zz!V*|!ZX%3o$?%&3uX-vbI+TKiQQG{@3}q;K?dUVrj>;p1{b1gmNQ^If0KFbiBoCA z%MHe^9pOw%L*LFsm+J3t6AuHCuo5qQ-T5_W>H4#nzOBEv{M?0Jr0N<1lB%;C}KYPV>mDQ%u zK`*>oNw#8o!-pi?K#)Ip3;A-$Ihb8+0`>5)Gs>{B0N+#;E zs8XDH%?^R_kS^HjV=Yo&+&6{GuG%)}aQ-x^9>i>N69)Qz3!D>7#=wiR7& zi;5pE488I^GNqy7)ZhyVZgz2Xr#SwkCy8(AIKNUToKdty1l`XpH461;ApDp`PM2lq zn*1k=&@gZBqwe86+jJ|Z=$OD4(sJ@HYui3dfEWU25Ijk6C1k@MPO*u6Y@uwKd}JZX z3Bq7$q>4sK&Y@pPPlGO~1OFW3DK^$3Lr62h(&vPxfU<8C68$*0i4=i2Cb2r{IZZFS z$g+9@KlUlG?0wtZO_7>BLI_Xul{7*c3dpYf@!}$c5J~YW#22n!{M{6K9kF8yLXy%^ z0HfxInwn+?9U6!gA)+q^F+yqt{fn7$1bnH8B6XGcUSgKPY`Otx!RT!^WQ!)yxwgF7 zteb|-TKk=KH(nwZvQlAHppEfY8f_H{p7%4|l6MHR%Ilkq<+Md^#N}Dl-dI5WxyjL8 zD=XF&tr!rGF(RlM|5?>Dm3g%ygLf*YqXa}jnO){h7)uaGg$efbYA zLcntS>!MwjTSPayfv7T}!bC%*F^#VD}#Zabp%#|BC1 zR*;DGuNT!-_@oyM?xX(}3V=rTGwMZ4@ONB#xpb3IRw7gwUeXanN%e@wt`5Ci?UkL{_pJF~jy$(ydzM(gm zRq?)4;%>4%ykXc)?P}QQL)CYR=1PTUCARG#RHEg8I2Ihf*dsEWpAZi#qdSUp`N&oA zwCSpxwJff^d3nZ+)*NsXgn=XEZ;j67hRG53absUJ`L`jjwEMHn=U0k!qqV@P)&h#e+9p2j(@3&z>>l#3rsvE}2JJ_nsX2biKm40@77eSTKqn zNeRm`F7GV1jjI}5Ra2_Rb+&t}@6#~z|Ka`t6;sQSxl`WG*sEipj51fgOF`GMGI}<+ z(q+JQZpU_h%!vNMikMc}m_t0qerV(6fiq64HSTWj9sIxVx(j1C;B44|d>tk<76Ams z=*6tnRxL$(I3_{RLV7$p!F;8Oa*shRjPx+Rz)tcvT!Vz&U@ylZ&@m$l$bcwj7YDk; zhUhCvDZau>;+iVAHvvy*s;Q}XRc7+j$%(*A=bJAG{1TabgIX@1WFv)OzR3+!JyI#q zwjt*B&R6C`+SebjYjSuW`0;u(KyjNO?=l* z&O3A~O#VL=`2r6M2P)^TtTrRg?g zC=a=I7c%&V+`7BaV~)&g3h@Cug55v7mHO3_8Q52a_>M~~Rg zytT*NXkk6VLuqgs@X<%)$HT``NVWc>-dc^sBagaq{1H2A(s<;le2ROpg>JR0A^g3( z0p;u9{`VFK)V+iEq1P%qKt!pJOBr<~I3OPU!{v{^cQT+G9U!=N=yeC^feZQ!g4==O zXc0n{KRnYuv0P|SPWum>5cgZY%@ z|5nG$Yh*1BcBCf?JJRF$j~Xnk3oyfh8H(L|E%4-M(FVd$L;!&NACe5gy*dT~I+UXO z(JMzc2slS{k7pA-g`$k0--`&WHmp2@ZIACU0ss{Mh`>|alSjxg{=e}4IdS~QNT2)O zh?W}!CGC0e@XsdvKjcJ#d$M5<<$Wmscggx6Ze2jGDjXw;WCW^qUHDF!F z`CsF|{fcY^o#+$44};6dJf;v<_yhJ~_=gnt2D&~>1=Tl2f$H|7-;-ZTp^_HE6whJf zpU6LCKa+d1ycr2}Xz+pDTCTzs3nRaSxflJ1>~DTgK5#*XwvQk|$p%R7|J_ir0a%N^ zg_V&&IjjkxQ3L1?cm@myTHo7@*pNc~#~&P!*br2Y!W=BYqT&C?0gdyc141aD#e;wz1r9~5>$VL_+C+N(qbX$k06gu3~Lz6zoGvl^tBRZKmwH*d-f28(HIE$y!u`QtCj@X zJoeDVmgN`+0rea21?Jk7W=bb1 z`VHBi-IG7R_@3Y2&Z7Y^wjmUad38Xn!oHbrvYwbmBv;!~m||}tN5L;$_mOjT4sFE+ zX;V5Wlnd750ss?mYSiJp0>pjXUVL&Ilkl$Slec+r91OVJFcu*hASu>Rri5M>Owfdm z8C)xQfghn?8umhAEWOaAJB`NCu8)fQ8=70%VD;T(PTFE-8MX!cR~ZTR3988)F@Y6? z9`ExBw2<){`N}e++rZ@%;_~vP6Pc|!JPz|9jW^;K4R)bc+3WCa#wGrI4uDQ7*zm(`^G^d6ez11y9)*Y#LtH~;|aOdT7V!Ua$>tANKxG)nZ z))3|~bR4yqlgLxxOvI$ZI?k4;YQXQts( zNx<>BKNu9qFq@OSwFBzW9|iXj4ifn$KOgD!;dCnu?X0qhXS%Q_RT!rIiTLe+MrJ^2 zYA>|rmi9}0L2?|t0wNB6H(mY>wVzFY?!-=MFxBek>AU%U_nB_3o@F&lGgYNMD{)c1 zIn7t^DX!lxkc7TcXv~ZgPz*5Z6+wC}XInwV&CG7P#wA0jTcuaeRm8PWwd(#hq&Ax2 zoQteSnW(K=BT(eIJP~_$Vzuj;1u3JQk9LCvuE{8aS@cm2SZ6YNh>#$dfo&+QJIb$} zX4|rz%5+vOuPPwh5SZjQIbIb@b^WCkb%;P$WeceYA ziA3V;dO?*^W)V8?U|}%rU>1X#u5D4-LVcVi?ZC|?b>&*taU|h480Tr(9(Hwi{bC?& z==LljIxfK)oRi8J5?p+n;fmh7m6NE7kH=dz^5GI$`a;FlE*~u_Y*Hn`$ueo|=XB^d zGNJdU&K40&tw|l41)487D;mEi(j4kG_7f0dlL`qX&VLMqy&nrK^`S>;6dDO-R|;ZK zPAxvjU>+-B7~;ULqwaL%OVkSWJtzZ?ML8-JX6+sYfblAl$(p@i%=R8)?Uc3WmNOk3 z#E{`6%u7ScEz3eTRuG;Q8`aO_M2e0P8L}NC_NbPJ+dR=w3liX|4ol;gV zA0V^9mi`Xms|fmUUD<2c5zGOPL%_P!7ZD^X8oKP=ctQ_Z39|!!7ss!T{#=%;_Mj3< zUZ)lm6|ni5R+6D>lBckpQRParlPo-%&g?0fI#neoqnf})xhLjpRxmZjB4Tpd$Y(T z`O}S}E(LuFi1jz$qR0RM2P6RwAHwvBw5}E_3+|!0$eW{88wlNap!)*( zLv#2i)VctClgC}8?i(Qk;^Q`gMWKcBu#K#BD@OD|8IzGAx#&cY7;aMVs}*fb(VklP zGVE>#PB<4JZf3u-hCFdD4{}H~VWLTjP+?RxyNpyyDGSbC3Y+aM@vr67PCoX~Dqp4b zTlQab;AxLaiy;2PfOSQ zi8eoT-ARFaWXQ@)LBd_}hR5*(W482r{r!8fx_nQi*@@+PJ#AiUuv2-;_{WzpUs#M$ z_Ang#FXv!+%gSYhKuxUUaw@IZgPD{DcUG^$5BmN4E%Io1eF_V zvP!(?LCYjv=5EaxA5i4&mm_phAsmaXtQwHl{OuB|Doh14PFq8Yg)#nfbnFW+V^}sV z0{+Uh-b`$(P^|;I3V3zekJGy%*{LM7xMlZqFU?95@9dELM$yuAw5H-X(XgSFpoNbF zo_CoA+p&$ZyXNRVJ>n}ZpKPK+OnkUG+xqxzs|op9!ClQLcWDUd6 zrvKEBIh=~fLq@MiNf@Qwt=pBin#jnqC}O?4(iR~+Qz45Dj7>s`mRU6Jt0T#nR0OILKVxV{5ow;d)F9$g8@fdD z2PU>w9_cFW z_di~2u*M9459*_4Sf&n1g+fmQ@!j_drgxEqr&J2IKqi2yS;aUU%G#~4KXk$oJL7o? z=5rNUJrGQASlVgy&gOV8!SjG5**i`UT_4U63}@UTFyDB1dnTBFe|Kllq5Nz1AWY!Kpuw9IE3@- zi*=e?tiZ!w$>^ELTN26O<|v-4O@w#JUc)*#PFqT~Am(@vcjpABEE=kpU+CB`R8)u7 zIHfP9+uuYk^i_8q5gvKJVTo(cx{Qu;G`pJIBelhGb}REXI72+&`;FY`f3>)qe>&O) z&dz5x+w9V(@eMpSzxeH{9pHiT3pE>kn3#X%wy1st$rnBOlq{*!z;%zU)f2P7zn}QzR_v??*7@{mT#>JC#SsmBn0eK4)p2tDZt(5x*Vh=&QA|3p&$n6q zR_Fh@o>oi~T_@iE~Q3MX=bwo=q z2LG^c!t}j^cV0C9vi*^R!FM>~S+OdS*>R(X8eF$;0PnHLW3SJGPr)P!*|!##de6lO z`aTN~c0drV8&ZMN&de{s{SDIMn_*YKY#K}tB@2Kt$@lEbT zwvX>MPOK46h}e6+sW<*~ZrCB&RzMxpD;k0=Dh$6BI9tqFk*O`A!mPWKmQ#a09GkZ) zG+w2@v78|{bI%mUZTbd@75#X24EG)BnC>hQGyRB6-fJIym40x8Yi5mzRpBKK9qz{i z?y-niWQ{2LpRwE?xt;0rR`LSG8n-gsFSZQO+IbyJhJ?Yb83uj)8u`R)^)e5?+nuSwRZAs>Ur5yEfGXh^xB$#3CFKa5} zOkNbH6-=DdJ@@-ms2+k*tB-}vowB1eySGOzQHk~CrKSEKj1x>3BkE8* z85vd%!atf55f#tBmn#`=+Hl~oTa4ED(*XZ-k?kDsk&Qcb#?@LqD&s!mP`ZH3jIZ1HIb7_oE#@_gl;e zmHVr}OfW?~Rd8BG>L{mp9KR#Wm=uzjy3{L}=ou97-k=kjwzW)=*mL=|_;ssg<}8?- zIb|W>j%Rrv>ITvKKq!3tRgbRvjSZ!tWy&0I~^IY(y} z%o^?Rn*8}iT{({7OXor48lk3fHd}jXD&OvNuu^b&@rF?9mZhWvTUi;MVRVaXaMI0m z`^0`E@QZ=)ruMJ2SK>L#$!Q*Q@UuoepIw97gwe4C?|J#SY(ckfDg!8y5d(DYAGT@T z$bU?y)@F^;TrIrv`n33MsX)22-^<^Wr4Ds#q}lE=N>h9#-|2PJ^w6Cx(T|pz8~CC= zHL!Efve~3Le2I6Fhl-t55Oe(=?Mb zkryCjXH(2_aXxzpGr}Sl!-bwcdm1mhhQN|l(sE876OwK%E5=_=E>jo9y0l9DLtS&i z6F@HnRbZHRbEC)eELgCavO}EFEzRo~oYO7J+U#o%h`gs8_>;LgYp3W?aQ7=RZo zc1lCqTSyv4JaQPeM;t8hwQvoUrs+urX5KO`k8_y#bq}9ruXp?gDG@6a=08;|}HpNE-x#)SlzeZ?aTo z1tCq)HehuuNeS@v_IWqM>}tr+7a91!b)~G`YlIOAnp%ze){L5}K_)JNt-+U6$5$FD z3PEM6u?9Lb?)nnBC6x|%D_??;b?wR39Nq$ddhCe!XRs`{%zQ!}*{V-Z2?3jgIyk=i za7R^I|Av?C46c5z6H9lwQ}|0_1627_yThi;As|TnMs_3rOx}!g^A&H{7fztBEBG1ss3W+mQxXY% zs42$#l|(_As_cN!Km!{=a59`mt2q3;wwh`9XU#!p*iC%cUcR|-Z3l`pJEt^WWU;ROPe8VMZ>~+mFxmmlqY44gH z^)gXLAr-knXc>|3*RuXTIQ=r{iojx>x9?m(<$a z!%;?Wswt!PMO$E!u96;Qdpg-_Pt+M7-PqA;S8tHH`9#V<7Hdo;E7w~bm1nWcjHXL6 z2MZ)VlE**iO!&9*xSFuyZVva~RFwcpjxQ;e<7d}4_O)#aPS@|BKRp5mg9^)Qp+{f| zLI4oJ^zaV>LoWe1TNlv_cM$I$QF(dRPD=o}ur~?z*&Ath1OUlj5{&L zkJ`QOI=oNNRK$Lq762BaVwf5?+3<)@xmwx{*s4@dEj)T8BcWsz%+i8iv7i9Z!x?R@xt?Rme%%MfdGI-hk}V zd?YTe^mH2w+yd78B#1}eZ_Y$EIH>7M@?Q1qrAXd}28vjP8F!B68IkWo+~muQ$=fq{ zc;lq^#))An!@cYZGSK5O-tb%J?v%F1f=K-(cm5#4g_P#8VeTX- zh7Nwg1Dqa_a4IK39!s_`&vlK^t4TQ)kQ4Xd zz{PbnkH`BMNf~J@Zoj~2nopK3a2+L(6wXF=YA{oj_zDk^H^WXdp5<>5sb#m&y1j6t zoH0`c0>R6ok2WkKu&EwG?Y}-8vb~P>z#kY(!1{0~ZKSqWi}6xtM?y%MC?UxbyKCSX z*o80U&D+5b;hc`jAz~s~2e1Lj?sWy6Z|Pynh0I7|biU>;?hd#mlq)qxpSOzeh#QTP znyiAWd+rd0-l`0;-f7C1Ze5!zzPibNNkpL4I)le;LX*fR^Q}HQtK6$c+~pWn>m}h! z?&NU7ikDl2ztXz5qMfqO&XT_QzbqqtDQ(`17#)s9+QenUck95)KW8YQbUwB&#-88e zCUMj-?s7bu*#2yV1>UY1VbPB86D!DRKnWBJ-lWqmcxFh0*3~!rMypboi1$8OxKN4F zj4y_Zk>@u`m-ZU+%~N)?KLcR66rbiQjfHQz(F7CQ)oUU|ap}J} z!1n&H-PC)3xMp5#ao4T!Db=Vn$-IKRG>^vPr98VI4Pkpxfq1U<(e`B&G0}S?g{Bxh z2^Nzw%M!$KcZN*sk$j6bRV*}9E3=T51$q%kT$*LR zPg>o0T`l87gr!+acO#!D8Gpr8wYXHE{$-{k62WTchtp6-Qbh{n0mF1FSOa-FQx7r ze?*DTt#Uc&9R34zp~xST(faF#=L=Y3cK*t3^2`JsUv$>}O>FJlHWxeDJftEbVJ;1; ziLFpSv?>cZRz_AG+2|v$w@qmfi%2uZ7z*Dm>mQV>W`nSMHT|~uN%kP!H*^>4YWmtRdfJX3a zjL2krYY6M^){i#fQFt^mme*}3Y;>xM=+by&W6xAVZ@ew7>vJ|7-*DwI)TOe{RbTGA zSj*zr&oJhLb%Y%C)g&zFIbeQ#c2xW$Lr?S_A|%?7 z$}SsycT4p!vW1i6`A}0TcjDRSltK5Mq~B$eo&zYd%7*D5___IoS)1%fFA6t~^-5VF z6#^I<%0u&?C-#Yz(&)3_3UFk;EWv5~GE{2XB^SNTC@KSHouKms9i;pU0!x`t63!A0 zGK&Pd4h0P`$480U90^;{$Mfz7AH4WdYIGv)nRB+b8|^mlp0lg2f2JrdHXe3*<2|X} z*%L%gjTMnzYsoW~T~G&`u=3;FPB^GHhkxyl$l5@f!%xjSiFR&Mx1--2HxvcEtAA!r zK`x#XK5HK7J7^zV2l9?h?!W+TQ`knBQ_64{R5z*4j5c_NEk6ePDmO5Py>ZW7-p6;0 zjKRJOE*-J)9ABH!aCsD8h?o?R?C9IT>TLK_W&{C9Wv^caBZWpto4JN=MIyiT#eUWb zqOYmWjB-A~MG2)-UD|r~Yep3zs54M@gIu4GVW0FIe(noT4 ztsq|gVulUn7ib2l9#=U(UmBSy7+*Orks)eUH&I3_o_?P7KDWyjTf9YYS-qZ3mnR}h ze=c{KBg9hjQ$8chE=ZR%A{hrs$#hUqFCPO}#Z@7D&pm4yQx~NZSQCaR4rywF}EX``9~iFR{>eD}SO6>-rBK`rws7k^#kaOL!kCm(&6P~Ca?(&e+E ztsT@TZGx&1ZGjl~-}Wdxh&{FjTme5@4qNM%v@Dm-ejeAhrB*_GPAa=YdH9N5Z9%C; zHMW!Q7`|up?Bsz5kPTd8x%7drW|n*~%4j)UicYW`i1nAIgd>h{ycPs?(ie~o+!s=` zl-CW8?P>$L{Ed1Lkd7p2f29irDdv}ZgE6eyb%x{DB6s6EvtIr%5Q%f?@?~vn6&uII zKlSu)MOdD(S)Vx74lGe~E*yPR)0zE@?;X|} z*!lYHVO>Z2p6Kq-JKDynPcy@gm+aNq!|UTGYnN5#lL)_Xelz9o(6Yd2DHbLx_JfLF zQ@)HsJf=c#KUVn*=$$i zY*#ak7YVk=w2HaU`Qx0%w$%6Cu-fgg4~qW4K0WK!Whky9JZ8ImG!Xt}z=E|jksfbU ztQx+;K8B{$MnlGmJ)tSH80bR?fPCr$fq6$e(0eFwUu!_AAgge zVJu>t+ieQUIa5F)#!}=;oZsJFHRW$Hy8h371SG&;#~?dK z%y54zb$G^Mz=s+n*L3eu6m53@D5{IK-1}Gau}Oq^Y{j%AL&Ey2N@9;+GY(A%t{?ya z{18)j8i?u`LY=MK?mrbxcOh8xzd$OVVf{pC)-W9n;_QzH;fQ=z*X~sc|43)!ck_?f z(ti%|Q6?Hb^-qQsS@w^uE4l>xvDNPV=|7oK{`$X~cu@n~W9zREK-h;`ZN&-j!B2WP zIaDGT0KgjRDYJc;o&^d>G2tEFwNzi{kOu(IZHni^SX3egu z00YE@eZ1oHzZy`F{y&XR5SLES6Wd|h>QqCScyJ3&Bl7zkw_DFmqt_fbaC z1p>kXA7px6ycB=wcMo-6mqAHapbypmu|v!H0B<-b5D!uUhr#l{KEZwPSu=okLk-#m z)+b8l@DEBj-E8A7$^MvP;be8T1qH!GlC|d14|Y z06+l)0HAzA2+)B7*&jgLAydX=&_)vIL;VD#YYcJepPnAT832KsRxEv)r}fG8FZvJNw1h{GW213~*oC9VXhr68y!(I=KrtslV9@C1n- zpn3rBQKOy9LW6<=RN<*x*R~LtY7)r)0QI9atU(Yk*8Y)Tkl|703zb#B{tv0G8|L5n zdu-c;w#|4vv{4K(J<61aKtN2N2i|rsRLJ-4M~|}{3?@sUP835!kiZj+^EdawpN@;J{SMfC*M*Z{x)bp1Vjbwp#KKq|;dGy=qT6+y{cu z5wger9zkWR1^?*+*C^q?aTo;wyNaRHF8Uv@AldDB?NF~MpkA>&@ye?l+9kHXgY~G4 zH3kCuRsJLWzlng#Tx*~M%lse0Co%mA;dCujSq#ED{*O>}90bH`g6NIQJ}e1VJexp7 zs3&dENXPX=aj*HoYG%`aXF{eC=}HtjZ6najGQv;5&)Xirk`w>l2geBzaJ~}~F~NyI J*Yy|q{{VlTTGIdk delta 10253 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 J*Yy|q{{VlTTGIdk delta 10253 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 org.springframework.cloud spring-cloud-contract-tools - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -23,7 +23,7 @@ 3.2.5 - 3.5 + 3.4 UTF-8 UTF-8 @@ -33,7 +33,7 @@ 1.7 - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT 2016 @@ -262,12 +262,6 @@ org.springframework.cloud spring-cloud-contract-converters - - - org.apache.logging.log4j - log4j-to-slf4j - - org.springframework.cloud diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml index 43992aab15..a678e7e0f9 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml @@ -28,7 +28,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.BUILD-SNAPSHOT + 1.3.5.RELEASE diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml index 638a01ec4a..d0215f5907 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml @@ -30,7 +30,7 @@ org.springframework.cloud spring-cloud-contract-maven-plugin - 2.0.0.BUILD-SNAPSHOT + 1.2.0.BUILD-SNAPSHOT com/example/server diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/pact/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/pact/pom.xml index 4a2a27e42f..97e7f6441c 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/pact/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/pact/pom.xml @@ -26,7 +26,7 @@ 0.1 - 2.0.0.BUILD-SNAPSHOT + 1.2.0.BUILD-SNAPSHOT diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml index 205c490878..3c718f96f0 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml @@ -28,7 +28,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.BUILD-SNAPSHOT + 1.5.4.RELEASE @@ -81,64 +81,4 @@ - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/release - - false - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/libs-release-local - - false - - - diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml index e7288e7563..77aacd7970 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml @@ -28,7 +28,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.BUILD-SNAPSHOT + 1.5.4.RELEASE @@ -47,7 +47,6 @@ org.spockframework spock-core - 1.0-groovy-2.4 test @@ -123,63 +122,4 @@ - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/release - - false - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/libs-release-local - - false - - - - diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml index e4763a19c1..3c718f96f0 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml @@ -28,7 +28,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.BUILD-SNAPSHOT + 1.5.4.RELEASE @@ -81,64 +81,4 @@ - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/release - - false - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot-local - - true - - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/libs-milestone-local - - false - - - - spring-releases - Spring Releases - https://repo.spring.io/libs-release-local - - false - - - diff --git a/spring-cloud-contract-tools/spring-cloud-contract-spec-pact/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-spec-pact/pom.xml index 4fe0364be0..010a145f03 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-spec-pact/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-spec-pact/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tools - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-spec-pact diff --git a/spring-cloud-contract-verifier/pom.xml b/spring-cloud-contract-verifier/pom.xml index e42cb45136..1bfbef1670 100644 --- a/spring-cloud-contract-verifier/pom.xml +++ b/spring-cloud-contract-verifier/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-verifier @@ -26,6 +26,11 @@ spring-messaging true + + org.apache.camel + camel-spring + true + org.springframework.cloud spring-cloud-stream-test-support @@ -141,12 +146,6 @@ org.eclipse.jetty test - - javax.ws.rs-api - javax.ws.rs - 2.1 - test - diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy index d9d5ab9303..feda50f68d 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy @@ -391,7 +391,6 @@ abstract class MethodBodyBuilder { protected void methodForEqualityCheck(BodyMatcher bodyMatcher, BlockBuilder bb, Object copiedBody) { String path = quotedAndEscaped(bodyMatcher.path()) Object retrievedValue = value(copiedBody, bodyMatcher) - retrievedValue = retrievedValue instanceof Pattern ? ((Pattern) retrievedValue).pattern() : retrievedValue String valueAsParam = retrievedValue instanceof String ? quotedAndEscaped(retrievedValue.toString()) : retrievedValue.toString() if (arrayRelated(path) && MatchingType.regexRelated(bodyMatcher.matchingType())) { buildCustomMatchingConditionForEachElement(bb, path, valueAsParam) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/BaseWireMockStubStrategy.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/BaseWireMockStubStrategy.groovy index aaa49b7261..d7aecf5570 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/BaseWireMockStubStrategy.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/BaseWireMockStubStrategy.groovy @@ -96,7 +96,9 @@ abstract class BaseWireMockStubStrategy { */ String parseBody(Map map, ContentType contentType) { def transformedMap = MapConverter.getStubSideValues(map) - transformedMap = transformMapIfRequestPresent(transformedMap) + String responseSideBody = toJson(MapConverter.getTestSideValues(contract.request.body)) + DocumentContext context = JsonPath.parse(responseSideBody) + transformedMap = processEntriesForTemplating(transformedMap, context) String json = toJson(transformedMap) // the space is important cause at the end of the json body you also have a } // you can't have 4 } next to each other @@ -104,17 +106,6 @@ abstract class BaseWireMockStubStrategy { return parseBody(unquotedJson, contentType) } - private Object transformMapIfRequestPresent(Object transformedMap) { - def requestBody = contract.request.body - if (requestBody == null) { - return transformedMap - } - String testSideBody = toJson( - MapConverter.getTestSideValues(requestBody)) - DocumentContext context = JsonPath.parse(testSideBody) - return processEntriesForTemplating(transformedMap, context) - } - private Object processEntriesForTemplating(transformedMap, DocumentContext context) { return transformValues(transformedMap, { if (it instanceof String && processor.containsJsonPathTemplateEntry(it)) { diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy index 0449b3d1ab..37da2a9593 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy @@ -94,17 +94,15 @@ class ContractFileScanner { if (!files) { return } - File[] sortedFiles = files.sort() as File[] - for (int i = 0; i < sortedFiles.length; i++) { - File file = sortedFiles[i] + files.sort().eachWithIndex { File file, int index -> boolean excluded = matchesPattern(file, excludeMatchers) if (!excluded) { boolean contractFile = isContractFile(file) boolean included = includeMatcher ? file.absolutePath.matches(includeMatcher) : true if (contractFile && included) { - addContractToTestGeneration(result, files, file, i, ContractVerifierDslConverter.convertAsCollection(baseDir, file)) + addContractToTestGeneration(result, files, file, index, ContractVerifierDslConverter.convertAsCollection(baseDir, file)) } else if (!contractFile && included) { - addContractToTestGeneration(converters, result, files, file, i) + addContractToTestGeneration(converters, result, files, file, index) } else { appendRecursively(file, result) if (log.isDebugEnabled()) { diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java index ab12b92a22..32a0599cee 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java @@ -64,9 +64,8 @@ public class SpringAmqpStubMessages implements @Autowired public SpringAmqpStubMessages(RabbitTemplate rabbitTemplate, MessageListenerAccessor messageListenerAccessor) { - Assert.notNull(rabbitTemplate, "RabbitTemplate must be set"); - Assert.isTrue(mockingDetails(rabbitTemplate).isSpy() || mockingDetails(rabbitTemplate).isMock(), - "StubRunner AMQP will work only if RabbiTemplate is a spy"); //we get send messages by capturing arguments on the spy + Assert.notNull(rabbitTemplate); + Assert.isTrue(mockingDetails(rabbitTemplate).isSpy() || mockingDetails(rabbitTemplate).isMock()); //we get send messages by capturing arguments on the spy this.rabbitTemplate = rabbitTemplate; this.messageListenerAccessor = messageListenerAccessor; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/CamelStubMessages.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/CamelStubMessages.java new file mode 100644 index 0000000000..b5a2461373 --- /dev/null +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/CamelStubMessages.java @@ -0,0 +1,88 @@ +/* + * Copyright 2013-2017 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.cloud.contract.verifier.messaging.camel; + +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.apache.camel.CamelContext; +import org.apache.camel.ConsumerTemplate; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.impl.DefaultExchange; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.stereotype.Component; + +/** + * @author Marcin Grzejszczak + */ +@Component +public class CamelStubMessages implements MessageVerifier { + + private static final Logger log = LoggerFactory.getLogger( + CamelStubMessages.class); + + private final CamelContext context; + private final ContractVerifierCamelMessageBuilder builder = new ContractVerifierCamelMessageBuilder(); + + @Autowired + public CamelStubMessages(CamelContext context) { + this.context = context; + } + + @Override + public void send(Message message, String destination) { + try { + ProducerTemplate producerTemplate = this.context.createProducerTemplate(); + Exchange exchange = new DefaultExchange(this.context); + exchange.setIn(message); + producerTemplate.send(destination, exchange); + } catch (Exception e) { + log.error("Exception occurred while trying to send a message [" + message + "] " + + "to a channel with name [" + destination + "]", e); + throw e; + } + } + + @Override + public void send(T payload, Map headers, String destination) { + send(this.builder.create(payload, headers), destination); + } + + @Override + public Message receive(String destination, long timeout, TimeUnit timeUnit) { + try { + ConsumerTemplate consumerTemplate = this.context.createConsumerTemplate(); + Exchange exchange = consumerTemplate.receive(destination, timeUnit.toMillis(timeout)); + return exchange.getIn(); + } catch (Exception e) { + log.error("Exception occurred while trying to read a message from " + + " a channel with name [" + destination + "]", e); + throw new IllegalStateException(e); + } + } + + @Override + public Message receive(String destination) { + return receive(destination, 5, TimeUnit.SECONDS); + } + +} diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java new file mode 100644 index 0000000000..21f06395b6 --- /dev/null +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java @@ -0,0 +1,65 @@ +/* + * Copyright 2013-2017 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.cloud.contract.verifier.messaging.camel; + +import org.apache.camel.CamelContext; +import org.apache.camel.Message; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage; +import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging; +import org.springframework.cloud.contract.verifier.messaging.noop.NoOpContractVerifierAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Marcin Grzejszczak + */ +@Configuration +@ConditionalOnClass(Message.class) +@AutoConfigureBefore(NoOpContractVerifierAutoConfiguration.class) +public class ContractVerifierCamelConfiguration { + + @Bean + @ConditionalOnMissingBean + MessageVerifier contractVerifierMessageExchange( + CamelContext context) { + return new CamelStubMessages(context); + } + + @Bean + @ConditionalOnMissingBean + public ContractVerifierMessaging contractVerifierMessaging( + MessageVerifier exchange) { + return new ContractVerifierCamelHelper(exchange); + } +} + +class ContractVerifierCamelHelper extends ContractVerifierMessaging { + + public ContractVerifierCamelHelper( + MessageVerifier exchange) { + super(exchange); + } + + @Override + protected ContractVerifierMessage convert(Message receive) { + return new ContractVerifierMessage(receive.getBody(), receive.getHeaders()); + } +} diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelMessageBuilder.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelMessageBuilder.java new file mode 100644 index 0000000000..c2e87c94ca --- /dev/null +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelMessageBuilder.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013-2017 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.cloud.contract.verifier.messaging.camel; + +import java.util.Map; + +import org.apache.camel.Message; +import org.apache.camel.impl.DefaultMessage; + +/** + * @author Marcin Grzejszczak + */ +class ContractVerifierCamelMessageBuilder { + + public Message create(T payload, Map headers) { + DefaultMessage message = new DefaultMessage(); + message.setBody(payload); + message.setHeaders(headers); + return message; + } + +} diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/StreamStubMessages.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/StreamStubMessages.java index fdb7a8b043..00cebd3016 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/StreamStubMessages.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/StreamStubMessages.java @@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; import org.springframework.cloud.stream.config.BindingProperties; import org.springframework.cloud.stream.config.BindingServiceProperties; @@ -40,6 +41,7 @@ public class StreamStubMessages implements MessageVerifier> { private final MessageCollector messageCollector; private final ContractVerifierStreamMessageBuilder builder = new ContractVerifierStreamMessageBuilder(); + @Autowired public StreamStubMessages(ApplicationContext context) { this.context = context; this.messageCollector = context.getBean(MessageCollector.class); diff --git a/spring-cloud-contract-verifier/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-verifier/src/main/resources/META-INF/spring.factories index c7cfc35629..0e6be1c75d 100644 --- a/spring-cloud-contract-verifier/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-verifier/src/main/resources/META-INF/spring.factories @@ -4,4 +4,5 @@ org.springframework.cloud.contract.verifier.messaging.stream.ContractVerifierStr org.springframework.cloud.contract.verifier.messaging.integration.ContractVerifierIntegrationConfiguration,\ org.springframework.cloud.contract.verifier.messaging.amqp.ContractVerifierAmqpAutoConfiguration,\ org.springframework.cloud.contract.verifier.messaging.amqp.RabbitMockConnectionFactoryAutoConfiguration,\ +org.springframework.cloud.contract.verifier.messaging.camel.ContractVerifierCamelConfiguration,\ org.springframework.cloud.contract.verifier.messaging.noop.NoOpContractVerifierAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy index 6373f8386c..f83e35b19d 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -16,20 +16,19 @@ package org.springframework.cloud.contract.verifier.builder -import java.util.regex.Pattern - import org.codehaus.groovy.control.MultipleCompilationErrorsException import org.junit.Rule -import spock.lang.Issue -import spock.lang.Shared -import spock.lang.Specification -import spock.util.environment.RestoreSystemProperties - import org.springframework.boot.test.rule.OutputCapture import org.springframework.cloud.contract.spec.Contract import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import org.springframework.cloud.contract.verifier.dsl.WireMockStubVerifier import org.springframework.cloud.contract.verifier.util.SyntaxChecker +import spock.lang.Issue +import spock.lang.Shared +import spock.lang.Specification +import spock.util.environment.RestoreSystemProperties + +import java.util.regex.Pattern /** * @author Jakub Kubrynski, codearte.io */ diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy index 897321b198..ebc56fc8ac 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy @@ -406,7 +406,7 @@ class SingleTestGeneratorSpec extends Specification { // tag::context_path_baseclass[] import io.restassured.RestAssured; import org.junit.Before; - import org.springframework.boot.web.server.LocalServerPort; + import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest(classes = ContextPathTestingBaseClass.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/SyntaxChecker.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/SyntaxChecker.groovy index e6cb43bcf6..e70d86fe44 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/SyntaxChecker.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/SyntaxChecker.groovy @@ -1,57 +1,35 @@ package org.springframework.cloud.contract.verifier.util -import java.lang.reflect.Method -import javax.inject.Inject -import javax.ws.rs.client.Entity -import javax.ws.rs.client.WebTarget -import javax.ws.rs.core.Response - -import com.jayway.jsonpath.DocumentContext -import com.jayway.jsonpath.JsonPath -import com.toomuchcoding.jsonassert.JsonAssertion import groovy.transform.CompileStatic -import io.restassured.RestAssured -import io.restassured.module.mockmvc.RestAssuredMockMvc -import io.restassured.response.ResponseOptions import org.codehaus.groovy.control.CompilerConfiguration import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer import org.codehaus.groovy.control.customizers.ImportCustomizer -import org.junit.Rule -import org.junit.Test import org.mdkt.compiler.InMemoryJavaCompiler - -import org.springframework.cloud.contract.spec.Contract -import org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions -import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage -import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging -import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper -import org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil import org.springframework.util.ReflectionUtils +import java.lang.reflect.Method + /** * checking the syntax of produced scripts */ @CompileStatic class SyntaxChecker { - WebTarget webTarget - Entity entity - private static final String[] DEFAULT_IMPORTS = [ - Contract.name, - ResponseOptions.name, + "org.springframework.cloud.contract.spec.Contract", + "io.restassured.response.ResponseOptions", "io.restassured.module.mockmvc.specification.*", "io.restassured.module.mockmvc.*", - Test.name, - Rule.name, - DocumentContext.name, - JsonPath.name, - Inject.name, - ContractVerifierObjectMapper.name, - ContractVerifierMessage.name, - ContractVerifierMessaging.name, - WebTarget.name, - Response.name + "org.junit.Test", + "org.junit.Rule", + "com.jayway.jsonpath.DocumentContext", + "com.jayway.jsonpath.JsonPath", + "javax.inject.Inject", + "org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper", + "org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage", + "org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging", + "javax.ws.rs.client.WebTarget", + "javax.ws.rs.core.Response" ] private static final String DEFAULT_IMPORTS_AS_STRING = DEFAULT_IMPORTS.collect { @@ -59,13 +37,13 @@ class SyntaxChecker { }.join("\n") private static final String STATIC_IMPORTS = [ - "${RestAssuredMockMvc.name}.given", - "${RestAssuredMockMvc.name}.when", - "${RestAssured.name}.*", - "${Entity.name}.*", - "${ContractVerifierMessagingUtil.name}.headers", - "${JsonAssertion.name}.assertThatJson", - "${SpringCloudContractAssertions.name}.assertThat" + "io.restassured.module.mockmvc.RestAssuredMockMvc.given", + "io.restassured.module.mockmvc.RestAssuredMockMvc.when", + "io.restassured.RestAssured.*", + "javax.ws.rs.client.Entity.*", + "org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil.headers", + "com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson", + "org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat" ].collect { "import static ${it};"}.join("\n") static void tryToCompile(String builderName, String test) { diff --git a/spring-cloud-contract-wiremock/pom.xml b/spring-cloud-contract-wiremock/pom.xml index dde0ef9318..d8917f583d 100644 --- a/spring-cloud-contract-wiremock/pom.xml +++ b/spring-cloud-contract-wiremock/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-wiremock @@ -17,16 +17,6 @@ com.github.tomakehurst wiremock-standalone - - io.rest-assured - rest-assured - true - - - javax.servlet - javax.servlet-api - true - org.apache.httpcomponents httpclient @@ -49,11 +39,6 @@ spring-restdocs-mockmvc true - - org.springframework.restdocs - spring-restdocs-restassured - true - org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestAssuredConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestAssuredConfiguration.java deleted file mode 100644 index 4e78eade35..0000000000 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestAssuredConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.springframework.cloud.contract.wiremock.restdocs; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.test.autoconfigure.restdocs.RestDocsRestAssuredConfigurationCustomizer; -import org.springframework.context.annotation.Configuration; -import org.springframework.restdocs.restassured3.RestAssuredRestDocumentationConfigurer; - -/** - * Custom configuration for Spring RestDocs that adds a WireMock snippet (for generating - * JSON stubs). Applied automatically if you use - * {@link org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs @AutoConfigureRestDocs} in your test case and this class - * is available. JSON stubs are generated and added to the restdocs path under "stubs". - * - * @see WireMockRestDocs for a convenient entry point for customizing and asserting the - * stub behaviour - * - * @author Eddú Meléndez - */ -@Configuration -@ConditionalOnClass(RestAssuredRestDocumentationConfigurer.class) -public class WireMockRestAssuredConfiguration implements RestDocsRestAssuredConfigurationCustomizer { - - @Override - public void customize(RestAssuredRestDocumentationConfigurer configurer) { - configurer.snippets().withDefaults(new WireMockSnippet()); - } - -} diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java index df5fc11bac..802d37e01e 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java @@ -16,7 +16,6 @@ package org.springframework.cloud.contract.wiremock.restdocs; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.test.autoconfigure.restdocs.RestDocsMockMvcConfigurationCustomizer; import org.springframework.context.annotation.Configuration; import org.springframework.restdocs.mockmvc.MockMvcRestDocumentationConfigurer; @@ -34,7 +33,6 @@ import org.springframework.restdocs.mockmvc.MockMvcRestDocumentationConfigurer; * */ @Configuration -@ConditionalOnClass(MockMvcRestDocumentationConfigurer.class) public class WireMockRestDocsConfiguration implements RestDocsMockMvcConfigurationCustomizer { diff --git a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories index c0e49b7d51..9ac5aa6677 100644 --- a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories @@ -4,5 +4,4 @@ org.springframework.cloud.contract.wiremock.WireMockApplicationListener # RestDocs Auto Configuration org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs=\ -org.springframework.cloud.contract.wiremock.restdocs.WireMockRestDocsConfiguration,\ -org.springframework.cloud.contract.wiremock.restdocs.WireMockRestAssuredConfiguration +org.springframework.cloud.contract.wiremock.restdocs.WireMockRestDocsConfiguration diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestAssuredApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestAssuredApplicationTests.java deleted file mode 100644 index d0830fd5d3..0000000000 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestAssuredApplicationTests.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.springframework.cloud.contract.wiremock; - -import io.restassured.specification.RequestSpecification; -import org.junit.Test; -import org.junit.runner.RunWith; -import wiremock.org.eclipse.jetty.http.HttpStatus; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; -import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; -import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.springframework.restdocs.restassured3.RestAssuredRestDocumentation.document; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = {ServletWebServerFactoryAutoConfiguration.EmbeddedTomcat.class, DispatcherServletAutoConfiguration.class}, - webEnvironment = WebEnvironment.RANDOM_PORT) -@AutoConfigureRestDocs(outputDir = "target/snippets") -public class WiremockServerRestAssuredApplicationTests { - - @Autowired - private RequestSpecification documentationSpec; - - @LocalServerPort - private int port; - - @Test - public void contextLoads() throws Exception { - given() - .port(this.port) - .when() - .get("/resource") - .then() - .assertThat() - .statusCode(is(200)) - .content(equalTo("Hello World")); - } - - @Test - public void statusIsMaintained() throws Exception { - given(this.documentationSpec) - .filter(document("status")) - .when() - .get("/status") - .then() - .assertThat() - .statusCode(is(202)) - .content(equalTo("Hello World")); - } - - @Configuration - @EnableWebMvc - @RestController - protected static class TestConfiguration { - - @ResponseBody - @RequestMapping("/resource") - public String resource() { - return "Hello World"; - } - - @ResponseBody - @RequestMapping("/status") - public ResponseEntity status() { - return ResponseEntity.status(HttpStatus.ACCEPTED_202).body("Hello World"); - } - - } - -} diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java index 9d0f1d83e3..7056e78279 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java @@ -1,7 +1,15 @@ package org.springframework.cloud.contract.wiremock.restdocs; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.util.Collection; + import com.github.tomakehurst.wiremock.matching.EqualToJsonPattern; import com.github.tomakehurst.wiremock.stubbing.StubMapping; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -9,7 +17,8 @@ import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.runners.MockitoJUnitRunner; + import org.springframework.cloud.contract.wiremock.WireMockStubMapping; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -22,19 +31,10 @@ import org.springframework.restdocs.operation.OperationRequest; import org.springframework.restdocs.operation.OperationRequestPart; import org.springframework.restdocs.operation.OperationResponse; import org.springframework.restdocs.operation.Parameters; -import org.springframework.restdocs.operation.RequestCookie; - -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.util.Collection; -import java.util.Collections; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.anyString; /** * @author Marcin Grzejszczak @@ -192,11 +192,6 @@ public class WireMockSnippetTests { public URI getUri() { return URI.create("http://foo/bar"); } - - @Override - public Collection getCookies() { - return Collections.emptySet(); - } }; } @@ -240,11 +235,6 @@ public class WireMockSnippetTests { public URI getUri() { return URI.create("http://foo/bar"); } - - @Override - public Collection getCookies() { - return Collections.emptySet(); - } }; } @@ -286,10 +276,6 @@ public class WireMockSnippetTests { public URI getUri() { return URI.create("http://foo/bar"); } - - @Override public Collection getCookies() { - return Collections.emptySet(); - } }; } } \ No newline at end of file diff --git a/tests/pom.xml b/tests/pom.xml index 94712d4f63..23fc5c696a 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-contract-parent - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. @@ -18,12 +18,14 @@ Spring Cloud Contract Tests + samples-messaging-camel samples-messaging-spring samples-messaging-stream samples-messaging-integration samples-messaging-amqp spring-cloud-contract-stub-runner-boot-eureka spring-cloud-contract-stub-runner-boot-zookeeper + spring-cloud-contract-stub-runner-camel spring-cloud-contract-stub-runner-context-path spring-cloud-contract-stub-runner-moco-contract-jar spring-cloud-contract-stub-runner-moco diff --git a/tests/samples-messaging-amqp/pom.xml b/tests/samples-messaging-amqp/pom.xml index 6d99636ccb..ae65414dcb 100644 --- a/tests/samples-messaging-amqp/pom.xml +++ b/tests/samples-messaging-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-sample-amqp diff --git a/tests/samples-messaging-camel/.springBeans b/tests/samples-messaging-camel/.springBeans new file mode 100644 index 0000000000..b74cfc29b8 --- /dev/null +++ b/tests/samples-messaging-camel/.springBeans @@ -0,0 +1,16 @@ + + + 1 + + + + + + + java:com.example.fraud.CamelMessagingApplication + + + + + + diff --git a/tests/samples-messaging-camel/pom.xml b/tests/samples-messaging-camel/pom.xml new file mode 100644 index 0000000000..e21d43bcc6 --- /dev/null +++ b/tests/samples-messaging-camel/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + org.springframework.cloud + spring-cloud-contract-tests + 1.2.2.BUILD-SNAPSHOT + .. + + spring-cloud-contract-sample-camel + jar + Spring Cloud Contract Sample Camel + Spring Cloud Contract Sample Camel + + + org.apache.camel + camel-spring-boot-starter + + + org.apache.camel + camel-jms + + + org.apache.activemq + activemq-camel + + + org.apache.activemq + activemq-pool + + + org.apache.camel + camel-jackson + + + org.springframework.cloud + spring-cloud-contract-verifier + test + + + org.spockframework + spock-spring + test + + + org.springframework.boot + spring-boot-starter-test + test + + + diff --git a/tests/samples-messaging-camel/src/main/java/com/example/BookDeleted.java b/tests/samples-messaging-camel/src/main/java/com/example/BookDeleted.java new file mode 100644 index 0000000000..15635f725e --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/BookDeleted.java @@ -0,0 +1,31 @@ +/* + * Copyright 2013-2017 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 com.example; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonCreator; + +@SuppressWarnings("serial") +public class BookDeleted implements Serializable { + public final String bookName; + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + public BookDeleted(String bookName) { + this.bookName = bookName; + } +} diff --git a/tests/samples-messaging-camel/src/main/java/com/example/BookDeleter.java b/tests/samples-messaging-camel/src/main/java/com/example/BookDeleter.java new file mode 100644 index 0000000000..31e051f696 --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/BookDeleter.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2017 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 com.example; + +import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.camel.Exchange; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class BookDeleter { + + private static final Logger log = LoggerFactory.getLogger(BookDeleter.class); + + /** + * Scenario for "should generate tests triggered by a message": client side: if sends + * a message to input.messageFrom then message will be sent to output.messageFrom + * server side: will send a message to input, verify the message contents and await + * upon receiving message on the output messageFrom + */ + public void bookDeleted(Exchange exchange) { + BookDeleted bookDeleted = exchange.getIn().getBody(BookDeleted.class); + log.info("Deleting book " + bookDeleted); + this.bookSuccessfulyDeleted.set(true); + log.info("Book successfuly deleted [" + this.bookSuccessfulyDeleted + "]"); + } + + private AtomicBoolean bookSuccessfulyDeleted = new AtomicBoolean(false); +} diff --git a/tests/samples-messaging-camel/src/main/java/com/example/BookReturned.java b/tests/samples-messaging-camel/src/main/java/com/example/BookReturned.java new file mode 100644 index 0000000000..44b6b35003 --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/BookReturned.java @@ -0,0 +1,31 @@ +/* + * Copyright 2013-2017 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 com.example; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonCreator; + +@SuppressWarnings("serial") +public class BookReturned implements Serializable { + public final String bookName; + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + BookReturned(String bookName) { + this.bookName = bookName; + } +} diff --git a/tests/samples-messaging-camel/src/main/java/com/example/BookRouteConfiguration.java b/tests/samples-messaging-camel/src/main/java/com/example/BookRouteConfiguration.java new file mode 100644 index 0000000000..3f4f6c9022 --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/BookRouteConfiguration.java @@ -0,0 +1,56 @@ +/* + * Copyright 2013-2017 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 com.example; + +import org.apache.activemq.camel.component.ActiveMQComponent; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.model.dataformat.JsonLibrary; +import org.apache.camel.spring.SpringRouteBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Marcin Grzejszczak + */ +@Configuration +public class BookRouteConfiguration { + + @Bean + ActiveMQComponent activeMQComponent(@Value("${activemq.url:vm://localhost?broker.persistent=false}") String url) { + ActiveMQComponent component = new ActiveMQComponent(); + component.setBrokerURL(url); + return component; + } + + @Bean + RoutesBuilder myRouter(final BookService bookService, final BookDeleter bookDeleter) { + return new SpringRouteBuilder() { + + @Override + public void configure() throws Exception { + // scenario 1 - from bean to output + from("direct:start").unmarshal().json(JsonLibrary.Jackson, BookReturned.class).bean(bookService).to("jms:output"); + // scenario 2 - from input to output + from("jms:input").unmarshal().json(JsonLibrary.Jackson, BookReturned.class).bean(bookService).to("jms:output"); + // scenario 3 - from input to no output + from("jms:delete").unmarshal().json(JsonLibrary.Jackson, BookDeleted.class).bean(bookDeleter); + } + + }; + } +} diff --git a/tests/samples-messaging-camel/src/main/java/com/example/BookService.java b/tests/samples-messaging-camel/src/main/java/com/example/BookService.java new file mode 100644 index 0000000000..a145e482d6 --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/BookService.java @@ -0,0 +1,43 @@ +/* + * Copyright 2013-2017 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 com.example; + +import org.apache.camel.Exchange; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class BookService { + + private static final Logger log = LoggerFactory.getLogger(BookService.class); + + /** + * Scenario for "should generate tests triggered by a method": client side: must have + * a possibility to "trigger" sending of a message to the given messageFrom server + * side: will run the method and await upon receiving message on the output + * messageFrom + * + * Method triggers sending a message to a source + */ + public void returnBook(Exchange exchange) { + BookReturned bookReturned = exchange.getIn().getBody(BookReturned.class); + log.info("Returning book [$bookReturned]"); + exchange.getOut().setBody(bookReturned); + exchange.getOut().setHeader("BOOK-NAME", bookReturned.bookName); + } +} diff --git a/tests/samples-messaging-camel/src/main/java/com/example/CamelMessagingApplication.java b/tests/samples-messaging-camel/src/main/java/com/example/CamelMessagingApplication.java new file mode 100644 index 0000000000..25ff4fccc4 --- /dev/null +++ b/tests/samples-messaging-camel/src/main/java/com/example/CamelMessagingApplication.java @@ -0,0 +1,28 @@ +/* + * Copyright 2013-2017 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 com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CamelMessagingApplication { + + public static void main(String[] args) { + SpringApplication.run(CamelMessagingApplication.class, args); + } +} diff --git a/tests/samples-messaging-camel/src/test/groovy/com/example/CamelMessagingApplicationSpec.groovy b/tests/samples-messaging-camel/src/test/groovy/com/example/CamelMessagingApplicationSpec.groovy new file mode 100644 index 0000000000..2d43631044 --- /dev/null +++ b/tests/samples-messaging-camel/src/test/groovy/com/example/CamelMessagingApplicationSpec.groovy @@ -0,0 +1,159 @@ +/* + * Copyright 2013-2017 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 com.example + +import javax.inject.Inject + +import org.apache.camel.Message +import org.apache.camel.model.ModelCamelContext +import org.junit.BeforeClass +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootContextLoader +import org.springframework.cloud.contract.spec.Contract +import org.springframework.cloud.contract.verifier.messaging.MessageVerifier +import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier +import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper; +import org.springframework.test.annotation.DirtiesContext +import org.springframework.test.context.ContextConfiguration + +import spock.lang.Specification +import spock.util.concurrent.PollingConditions + +import com.jayway.jsonpath.DocumentContext +import com.jayway.jsonpath.JsonPath +import com.toomuchcoding.jsonassert.JsonAssertion +/** + * SPIKE ON TESTS FROM NOTES IN MessagingSpec + */ +// Context configuration would end up in base class +@ContextConfiguration(classes = [CamelMessagingApplication], loader = SpringBootContextLoader) +@DirtiesContext +@AutoConfigureMessageVerifier +class CamelMessagingApplicationSpec extends Specification { + + // ALL CASES + @Autowired ModelCamelContext camelContext + @Autowired BookDeleter bookDeleter + @Inject MessageVerifier contractVerifierMessaging + + ContractVerifierObjectMapper contractVerifierObjectMapper = new ContractVerifierObjectMapper() + + @BeforeClass + static void init() { + System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*") + } + + def "should work for triggered based messaging"() { + given: + Contract.make { + label 'some_label' + input { + triggeredBy('bookReturnedTriggered()') + } + outputMessage { + sentTo('activemq:output') + body('''{ "bookName" : "foo" }''') + headers { + header('BOOK-NAME', 'foo') + } + } + } + // generated test should look like this: + when: + bookReturnedTriggered() + then: + def response = contractVerifierMessaging.receive('activemq:output') + response.headers.get('BOOK-NAME') == 'foo' + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.body)) + JsonAssertion.assertThat(parsedJson).field('bookName').isEqualTo('foo') + } + + def "should generate tests triggered by a message"() { + given: + Contract.make { + label 'some_label' + input { + messageFrom('jms:input') + messageBody([ + bookName: 'foo' + ]) + messageHeaders { + header('sample', 'header') + + } + } + outputMessage { + sentTo('jms:output') + body([ + bookName: 'foo' + ]) + headers { + header('BOOK-NAME', 'foo') + } + } + } + // generated test should look like this: + when: + contractVerifierMessaging.send( + contractVerifierObjectMapper.writeValueAsString([bookName: 'foo']), + [sample: 'header'], 'jms:input') + then: + def response = contractVerifierMessaging.receive('jms:output') + response.headers.get('BOOK-NAME') == 'foo' + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.body)) + JsonAssertion.assertThat(parsedJson).field('bookName').isEqualTo('foo') + } + + def "should generate tests without destination, triggered by a message"() { + given: + Contract.make { + label 'some_label' + input { + messageFrom('jms:delete') + messageBody([ + bookName: 'foo' + ]) + messageHeaders { + header('sample', 'header') + } + assertThat('bookWasDeleted()') + } + } + // generated test should look like this: + when: + contractVerifierMessaging.send(contractVerifierObjectMapper.writeValueAsString([bookName: 'foo']), + [sample: 'header'], 'jms:delete') + then: + noExceptionThrown() + bookWasDeleted() + } + + void bookReturnedTriggered() { + camelContext.createProducerTemplate().sendBody('direct:start', '''{"bookName" : "foo" }''') + } + + PollingConditions pollingConditions = new PollingConditions() + + void bookWasDeleted() { + pollingConditions.eventually { + assert bookDeleter.bookSuccessfulyDeleted.get() + } + } + +} \ No newline at end of file diff --git a/tests/samples-messaging-integration/pom.xml b/tests/samples-messaging-integration/pom.xml index e586adc71f..61cb05a88b 100644 --- a/tests/samples-messaging-integration/pom.xml +++ b/tests/samples-messaging-integration/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-sample-integration diff --git a/tests/samples-messaging-spring/pom.xml b/tests/samples-messaging-spring/pom.xml index 79a18e3fcd..05a2869d61 100644 --- a/tests/samples-messaging-spring/pom.xml +++ b/tests/samples-messaging-spring/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-sample-spring diff --git a/tests/samples-messaging-stream/pom.xml b/tests/samples-messaging-stream/pom.xml index 9ad4fa8a07..8853057412 100644 --- a/tests/samples-messaging-stream/pom.xml +++ b/tests/samples-messaging-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-sample-stream diff --git a/tests/spring-cloud-contract-stub-runner-amqp/pom.xml b/tests/spring-cloud-contract-stub-runner-amqp/pom.xml index 19e2e84ac2..5bdd5137b1 100644 --- a/tests/spring-cloud-contract-stub-runner-amqp/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-amqp diff --git a/tests/spring-cloud-contract-stub-runner-boot-eureka/pom.xml b/tests/spring-cloud-contract-stub-runner-boot-eureka/pom.xml index bd05d85268..a384873054 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-eureka/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-boot-eureka/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-boot-eureka @@ -24,13 +24,13 @@ org.springframework.cloud - spring-cloud-starter-netflix-eureka-client + spring-cloud-starter-eureka true org.springframework.cloud - spring-cloud-starter-netflix-eureka-server - true + spring-cloud-starter-eureka-server + test junit diff --git a/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/resources/application.yml index 2b91381a2c..be0dd59c16 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/resources/application.yml @@ -1,4 +1,5 @@ stubrunner: + camel.enabled: false idsToServiceIds: fraudDetectionServer: someNameThatShouldMapFraudDetectionServer server: diff --git a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/pom.xml b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/pom.xml index dc43e82d6d..f161ddb383 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-boot-zookeeper diff --git a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy index 82cb2b2eeb..d68ebd4a8f 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy @@ -28,7 +28,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalanced import org.springframework.cloud.contract.stubrunner.StubFinder import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner import org.springframework.cloud.zookeeper.ZookeeperProperties -import org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryClient +import org.springframework.cloud.zookeeper.discovery.ZookeeperServiceDiscovery import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.test.annotation.DirtiesContext @@ -42,7 +42,8 @@ import spock.lang.Specification */ @ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = ["stubrunner.cloud.stubbed.discovery.enabled=false", + properties = ["stubrunner.camel.enabled=false", + "stubrunner.cloud.stubbed.discovery.enabled=false", "debug=true"]) @AutoConfigureStubRunner( ids = ["org.springframework.cloud.contract.verifier.stubs:loanIssuance", @@ -54,7 +55,7 @@ class StubRunnerSpringCloudZookeeperAutoConfigurationSpec extends Specification @Autowired StubFinder stubFinder @Autowired @LoadBalanced RestTemplate restTemplate - @Autowired ZookeeperDiscoveryClient zookeeperServiceDiscovery + @Autowired ZookeeperServiceDiscovery zookeeperServiceDiscovery @BeforeClass @AfterClass @@ -75,8 +76,12 @@ class StubRunnerSpringCloudZookeeperAutoConfigurationSpec extends Specification def 'should have all apps registered in Service Discovery'() { expect: - !zookeeperServiceDiscovery.getInstances('loanIssuance').empty - !zookeeperServiceDiscovery.getInstances('someNameThatShouldMapFraudDetectionServer').empty + !zookeeperServiceDiscovery.serviceDiscoveryRef.get().queryForInstances('loanIssuance').empty + !zookeeperServiceDiscovery.serviceDiscoveryRef.get().queryForInstances('someNameThatShouldMapFraudDetectionServer').empty + } + + def cleanup() { + zookeeperServiceDiscovery?.serviceDiscoveryRef?.get()?.close() } @Configuration diff --git a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/resources/application.yml index abde606911..ddf61bbcac 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/resources/application.yml @@ -1,4 +1,5 @@ stubrunner: + camel.enabled: false idsToServiceIds: fraudDetectionServer: someNameThatShouldMapFraudDetectionServer server: diff --git a/tests/spring-cloud-contract-stub-runner-camel/README.adoc b/tests/spring-cloud-contract-stub-runner-camel/README.adoc new file mode 100644 index 0000000000..8ad67e3ce5 --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/README.adoc @@ -0,0 +1,132 @@ +:input_name: jms:input +:output_name: jms:output + +=== Stub Runner Camel + +Spring Cloud Contract Verifier Stub Runner's messaging module gives you an easy way to +integrate with Apache Camel. For the provided artifacts, it automatically downloads the +stubs and registers the required routes. + +==== Adding the Runner to the Project + +You can have both Apache Camel and Spring Cloud Contract Stub Runner on the classpath. +Remember to annotate your test class with `@AutoConfigureStubRunner`. + +==== Disabling the functionality + +If you need to disable this functionality, set the `stubrunner.camel.enabled=false` +property. + +Assume that you have the following Maven repository with deployed stubs for the +`camelService` application: + +[source,bash,indent=0] +---- +└── .m2 + └── repository + └── io + └── codearte + └── accurest + └── stubs + └── camelService + ├── 0.0.1-SNAPSHOT + │   ├── camelService-0.0.1-SNAPSHOT.pom + │   ├── camelService-0.0.1-SNAPSHOT-stubs.jar + │   └── maven-metadata-local.xml + └── maven-metadata-local.xml +---- + +Further assume that the stubs contain the following structure: + +[source,bash,indent=0] +---- +├── META-INF +│   └── MANIFEST.MF +└── repository + ├── accurest + │   ├── bookDeleted.groovy + │   ├── bookReturned1.groovy + │   └── bookReturned2.groovy + └── mappings +---- + +Consider the following contracts (numbered *1*): + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=sample_dsl,indent=0] +---- + +Now consider *2* + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=sample_dsl_2,indent=0] +---- + +These examples lend themselves to three scenarios: + +* <> +* <> +* <> + +[[camel-scenario-1]] +===== Scenario 1 (no input message) + +To trigger a message via the `return_book_1` label, use the `StubTigger` interface, as +follows: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_trigger,indent=0] +---- + +To listen to the output of the message sent to `{output_name}`: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_trigger_receive,indent=0] +---- + +The received message passes the following assertions: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_trigger_message,indent=0] +---- + +[[camel-scenario-2]] +===== Scenario 2 (output triggered by input) + +Since the route is set for you, you can send a message to the `{output_name}` +destination: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_send,indent=0] +---- + +You can listen to the output of the message sent to `{output_name}`: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_receive,indent=0] +---- + +The received message passes the following assertions: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=client_receive_message,indent=0] +---- + +[[camel-scenario-3]] +===== Scenario 3 (input with no output) + +Since the route is set for you, you can send a message to the `{output_name}` +destination: + +[source,groovy] +---- +include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy[tags=trigger_no_output,indent=0] +---- diff --git a/tests/spring-cloud-contract-stub-runner-camel/pom.xml b/tests/spring-cloud-contract-stub-runner-camel/pom.xml new file mode 100644 index 0000000000..43b9e29099 --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/pom.xml @@ -0,0 +1,93 @@ + + + 4.0.0 + + org.springframework.cloud + spring-cloud-contract-tests + 1.2.2.BUILD-SNAPSHOT + .. + + spring-cloud-contract-stub-runner-camel + jar + Spring Cloud Contract Stub Runner Camel + Spring Cloud Contract Stub Runner Camel + + + org.springframework.cloud + spring-cloud-contract-stub-runner + + + org.springframework.cloud + spring-cloud-starter-contract-stub-runner-jetty + test + + + org.apache.camel + camel-spring-boot-starter + + + org.apache.camel + camel-jackson + + + junit + junit + test + + + org.codehaus.groovy + groovy + + + org.spockframework + spock-core + test + + + org.spockframework + spock-spring + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.activemq + activemq-camel + test + + + org.apache.activemq + activemq-pool + test + + + org.springframework.boot + spring-boot-starter-web + test + + + info.solidsoft.spock + spock-global-unroll + test + + + + + + org.codehaus.gmavenplus + gmavenplus-plugin + + + + testCompile + + + + + + + diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/BookReturned.groovy b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/BookReturned.groovy new file mode 100644 index 0000000000..26428fd9fd --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/BookReturned.groovy @@ -0,0 +1,32 @@ +/* + * Copyright 2013-2017 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.cloud.contract.stubrunner.messaging.camel + +import com.fasterxml.jackson.annotation.JsonCreator +import groovy.transform.CompileStatic +import groovy.transform.EqualsAndHashCode + +@CompileStatic +@EqualsAndHashCode +class BookReturned implements Serializable { + final String bookName + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + BookReturned(String bookName) { + this.bookName = bookName + } +} diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy new file mode 100644 index 0000000000..8c6c525c5b --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/CamelStubRunnerSpec.groovy @@ -0,0 +1,254 @@ +/* + * Copyright 2013-2017 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.cloud.contract.stubrunner.messaging.camel + +import groovy.json.JsonOutput +import groovy.json.JsonSlurper +import org.apache.activemq.camel.component.ActiveMQComponent +import org.apache.activemq.spring.ActiveMQConnectionFactory +import org.apache.camel.CamelContext +import org.apache.camel.Exchange +import org.apache.camel.component.jms.JmsConfiguration +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.boot.autoconfigure.EnableAutoConfiguration +import org.springframework.boot.test.context.SpringBootContextLoader +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.cloud.contract.spec.Contract +import org.springframework.cloud.contract.stubrunner.StubFinder +import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.ComponentScan +import org.springframework.context.annotation.Configuration +import org.springframework.test.context.ContextConfiguration +import spock.lang.IgnoreIf +import spock.lang.Specification +/** + * @author Marcin Grzejszczak + */ +@ContextConfiguration(classes = Config, loader = SpringBootContextLoader) +@SpringBootTest(properties = "debug=true") +@AutoConfigureStubRunner +@IgnoreIf({ os.windows }) +class CamelStubRunnerSpec extends Specification { + + @Autowired StubFinder stubFinder + @Autowired CamelContext camelContext + + def setup() { + // ensure that message were taken from the queue + camelContext.createConsumerTemplate().receive('jms:output', 100) + } + + def 'should download the stub and register a route for it'() { + when: + // tag::client_send[] + camelContext.createProducerTemplate().sendBodyAndHeaders('jms:input', new BookReturned('foo'), [sample: 'header']) + // end::client_send[] + then: + // tag::client_receive[] + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 5000) + // end::client_receive[] + and: + // tag::client_receive_message[] + receivedMessage != null + assertThatBodyContainsBookNameFoo(receivedMessage.in.body) + receivedMessage.in.headers.get('BOOK-NAME') == 'foo' + // end::client_receive_message[] + } + + def 'should trigger a message by label'() { + when: + // tag::client_trigger[] + stubFinder.trigger('return_book_1') + // end::client_trigger[] + then: + // tag::client_trigger_receive[] + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 5000) + // end::client_trigger_receive[] + and: + // tag::client_trigger_message[] + receivedMessage != null + assertThatBodyContainsBookNameFoo(receivedMessage.in.body) + receivedMessage.in.headers.get('BOOK-NAME') == 'foo' + // end::client_trigger_message[] + } + + def 'should trigger a label for the existing groupId:artifactId'() { + when: + // tag::trigger_group_artifact[] + stubFinder.trigger('org.springframework.cloud.contract.verifier.stubs:camelService', 'return_book_1') + // end::trigger_group_artifact[] + then: + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 5000) + and: + receivedMessage != null + assertThatBodyContainsBookNameFoo(receivedMessage.in.body) + receivedMessage.in.headers.get('BOOK-NAME') == 'foo' + } + + def 'should trigger a label for the existing artifactId'() { + when: + // tag::trigger_artifact[] + stubFinder.trigger('camelService', 'return_book_1') + // end::trigger_artifact[] + then: + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 5000) + and: + receivedMessage != null + assertThatBodyContainsBookNameFoo(receivedMessage.in.body) + receivedMessage.in.headers.get('BOOK-NAME') == 'foo' + } + + def 'should throw an exception when missing label is passed'() { + when: + stubFinder.trigger('missing label') + then: + thrown(IllegalArgumentException) + } + + def 'should throw an exception when missing label and artifactid is passed'() { + when: + stubFinder.trigger('some:service', 'return_book_1') + then: + thrown(IllegalArgumentException) + } + + def 'should trigger messages by running all triggers'() { + when: + // tag::trigger_all[] + stubFinder.trigger() + // end::trigger_all[] + then: + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 5000) + and: + receivedMessage != null + assertThatBodyContainsBookNameFoo(receivedMessage.in.body) + receivedMessage.in.headers.get('BOOK-NAME') == 'foo' + } + + def 'should trigger a label with no output message'() { + when: + // tag::trigger_no_output[] + camelContext.createProducerTemplate().sendBodyAndHeaders('jms:delete', new BookReturned('foo'), [sample: 'header']) + // end::trigger_no_output[] + then: + noExceptionThrown() + } + + def 'should not trigger a message that does not match input'() { + when: + camelContext.createProducerTemplate().sendBodyAndHeaders('jms:input', new BookReturned('notmatching'), [wrong: 'header_value']) + then: + Exchange receivedMessage = camelContext.createConsumerTemplate().receive('jms:output', 100) + and: + receivedMessage == null + } + + private boolean assertThatBodyContainsBookNameFoo(Object payload) { + String objectAsString = payload instanceof String ? payload : + JsonOutput.toJson(payload) + def json = new JsonSlurper().parseText(objectAsString) + return json.bookName == 'foo' + } + + @Configuration + @ComponentScan + @EnableAutoConfiguration + static class Config { + + @Bean + ActiveMQConnectionFactory activeMQConnectionFactory(@Value('${activemq.url:vm://localhost?broker.persistent=false}') String url) { + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL: url) + try { + factory.trustAllPackages = true + } catch (Throwable e) { + } + return factory + } + + @Bean + JmsConfiguration jmsConfiguration(ActiveMQConnectionFactory activeMQConnectionFactory) { + return new JmsConfiguration(connectionFactory: activeMQConnectionFactory) + } + + @Bean + ActiveMQComponent activeMQComponent(JmsConfiguration jmsConfiguration) { + return new ActiveMQComponent(configuration: jmsConfiguration) + } + } + + + Contract dsl = + // tag::sample_dsl[] + Contract.make { + label 'return_book_1' + input { + triggeredBy('bookReturnedTriggered()') + } + outputMessage { + sentTo('jms:output') + body('''{ "bookName" : "foo" }''') + headers { + header('BOOK-NAME', 'foo') + } + } + } + // end::sample_dsl[] + + Contract dsl2 = + // tag::sample_dsl_2[] + Contract.make { + label 'return_book_2' + input { + messageFrom('jms:input') + messageBody([ + bookName: 'foo' + ]) + messageHeaders { + header('sample', 'header') + } + } + outputMessage { + sentTo('jms:output') + body([ + bookName: 'foo' + ]) + headers { + header('BOOK-NAME', 'foo') + } + } + } + // end::sample_dsl_2[] + + Contract dsl3 = + // tag::sample_dsl_3[] + Contract.make { + label 'delete_book' + input { + messageFrom('jms:delete') + messageBody([ + bookName: 'foo' + ]) + messageHeaders { + header('sample', 'header') + } + assertThat('bookWasDeleted()') + } + } + // end::sample_dsl_3[] +} diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessorSpec.groovy b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessorSpec.groovy new file mode 100644 index 0000000000..279782c65e --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessorSpec.groovy @@ -0,0 +1,98 @@ +package org.springframework.cloud.contract.stubrunner.messaging.camel + +import org.apache.camel.CamelContext +import org.apache.camel.Exchange +import org.apache.camel.builder.ExchangeBuilder +import org.apache.camel.spring.SpringCamelContext +import org.springframework.cloud.contract.spec.Contract +import spock.lang.Specification + +class StubRunnerCamelProcessorSpec extends Specification { + + CamelContext camelContext = new SpringCamelContext() + Exchange message = ExchangeBuilder.anExchange(camelContext).build() + + def noOutputMessageContract = Contract.make { + label 'return_book_2' + input { + messageFrom('bookStorage') + messageBody([ + bookId: $(consumer(regex('[0-9]+')), producer('123')) + ]) + messageHeaders { + header('sample', 'header') + } + } + } + + def 'should not process the message if there is no output message'() { + given: + StubRunnerCamelProcessor processor = new StubRunnerCamelProcessor(noOutputMessageContract) + when: + processor.process(message) + then: + noExceptionThrown() + } + + def dsl = Contract.make { + label 'return_book_2' + input { + messageFrom('bookStorage') + messageBody([ + bookId: $(consumer(regex('[0-9]+')), producer('123')) + ]) + messageHeaders { + header('sample', 'header') + } + } + outputMessage { + sentTo('returnBook') + body([ + responseId: $(producer(regex('[0-9]+')), consumer('123')) + ]) + headers { + header('BOOK-NAME', 'foo') + } + } + } + + def 'should process message when it has an output message section'() { + given: + StubRunnerCamelProcessor processor = new StubRunnerCamelProcessor(dsl) + when: + processor.process(message) + then: + message.getIn().getBody(String) == '{"responseId":"123"}' + } + + def dslWithRegexInGString = Contract.make { + // Human readable description + description 'Should produce valid sensor data' + // Label by means of which the output message can be triggered + label 'sensor1' + // input to the contract + input { + // the contract will be triggered by a method + triggeredBy('createSensorData()') + } + // output message of the contract + outputMessage { + // destination to which the output message will be sent + sentTo 'sensor-data' + headers { + header('contentType': 'application/json') + } + // the body of the output message + body("""{"id":"${value(producer(regex('[0-9]+')), consumer('99'))}","temperature":"123.45"}""") + } + } + + def 'should convert dsl into message with regex in GString'() { + given: + StubRunnerCamelProcessor processor = new StubRunnerCamelProcessor(dslWithRegexInGString) + when: + processor.process(message) + then: + message.getIn().getBody(String) == '''{"id":"99","temperature":"123.45"}''' + } +} diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml new file mode 100644 index 0000000000..7ba218ad58 --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml @@ -0,0 +1,5 @@ +stubrunner.repositoryRoot: classpath:m2repo/repository/ +stubrunner.ids: org.springframework.cloud.contract.verifier.stubs:camelService +server: + port: 0 +debug: true \ No newline at end of file diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/camelService-0.0.1-SNAPSHOT-stubs.jar b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/camelService-0.0.1-SNAPSHOT-stubs.jar new file mode 100644 index 0000000000000000000000000000000000000000..b27b155a3eeb01c61674ce74417991e9ce662191 GIT binary patch literal 1773 zcmWIWW@h1HVBp|j&|{wF!2kqIAOZ+Df!NnI#8KDN&rP41Apk|;rh2A#(m(~0KrDi+ z(AUw=)6F$FM9W7$;qWfsl_EwJs?>QhW@s@9wxibJlF-~F*7nSXfViN)svK; zpBvJATF)oW?*Fb4m5%VWU^`BL9RmvJPzmY zhEIt#a%7L&yRu@E<%GLSqm$>}mh!ZAN%@~={Z-=LY3~l-cXD^4ic?J=Ox|&N_B^+_ z<|($TkFodo?)&fG{3>9d@Ws_q)to(bDb*`Gcb%3Jx_ImO3uW22tNA$%Uqv9BgE&CSnylcK)lNsXbYjuR-o>A}7;2#!KrDw)<23fKS zES1*kee>*G{)vR}X~(Z-M$05q?e~OY1?w~+fSxU77_e-*EeVnPt$~_ z=fB7E1xdc{%L)}!QHhy2%OZQ@`Nup{6(>q|D|U{`+vM>7CMuE@nY7on7Z`u>5BRSx%}3(lGhcA6y9b> zK6O2^bwVt6jm)Qq$Ib1TzHcxu%d&2%^=dX^mw6|#V*B!X{S|e->c9V{ZJM1wJ@4+$ z`yU#$%j?s@ zOKx*}$Q=lBU9*OTTkz%+Gy7+H(s}+aD(~N^I&QgYA%T_$a}x^+GV{`l!FiC8NrV}9(EjkZM?&1}a@3K!D+|V;PW%RDj^q2=XTcfHW=y zGLbaGOCFF3a?Ft2g<0}QfDHg2}* zB4-0_1LbTywqfQ8WZT4 + + + + 4.0.0 + org.springframework.cloud.contract.verifier.stubs + camelService + 0.0.1-SNAPSHOT + pom + diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/maven-metadata-local.xml b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/maven-metadata-local.xml new file mode 100644 index 0000000000..f0954907f2 --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/0.0.1-SNAPSHOT/maven-metadata-local.xml @@ -0,0 +1,28 @@ + + + + + org.springframework.cloud.contract.verifier.stubs + camelService + 0.0.1-SNAPSHOT + + + true + + 20160409062112 + + diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata-local.xml b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata-local.xml new file mode 100644 index 0000000000..00bf4217ee --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata-local.xml @@ -0,0 +1,28 @@ + + + + + org.springframework.cloud.contract.verifier.stubs + camelService + 0.0.1-SNAPSHOT + + + 0.0.1-SNAPSHOT + + 20160409062112 + + diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata.xml b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata.xml new file mode 100644 index 0000000000..00bf4217ee --- /dev/null +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/m2repo/repository/org/springframework/cloud/contract/verifier/stubs/camelService/maven-metadata.xml @@ -0,0 +1,28 @@ + + + + + org.springframework.cloud.contract.verifier.stubs + camelService + 0.0.1-SNAPSHOT + + + 0.0.1-SNAPSHOT + + 20160409062112 + + diff --git a/tests/spring-cloud-contract-stub-runner-context-path/pom.xml b/tests/spring-cloud-contract-stub-runner-context-path/pom.xml index fb29de0bb2..3d4d50809e 100644 --- a/tests/spring-cloud-contract-stub-runner-context-path/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-context-path/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-context-path diff --git a/tests/spring-cloud-contract-stub-runner-context-path/src/main/java/com/example/loan/Application.java b/tests/spring-cloud-contract-stub-runner-context-path/src/main/java/com/example/loan/Application.java index 56af56d989..6f36301172 100644 --- a/tests/spring-cloud-contract-stub-runner-context-path/src/main/java/com/example/loan/Application.java +++ b/tests/spring-cloud-contract-stub-runner-context-path/src/main/java/com/example/loan/Application.java @@ -2,8 +2,6 @@ package com.example.loan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class Application { @@ -13,12 +11,3 @@ public class Application { } } - - -@RestController -class CustomController { - @GetMapping("/foo") - String foo() { - return "bar"; - } -} \ No newline at end of file diff --git a/tests/spring-cloud-contract-stub-runner-context-path/src/main/resources/application.yml b/tests/spring-cloud-contract-stub-runner-context-path/src/main/resources/application.yml index 4ebaff95d9..0d28926451 100644 --- a/tests/spring-cloud-contract-stub-runner-context-path/src/main/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-context-path/src/main/resources/application.yml @@ -1,4 +1,2 @@ -server: - port: 0 - servlet: - context-path: /my-path \ No newline at end of file +server.port: 0 +server.context-path: /my-path \ No newline at end of file diff --git a/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java index 1a3973195b..5910bd9dcd 100644 --- a/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -4,9 +4,9 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.cloud.contract.stubrunner.StubFinder; import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner; import org.springframework.test.annotation.DirtiesContext; @@ -41,7 +41,7 @@ public class LoanApplicationServiceTests { @Test public void shouldStartThisAppWithContextPath() { String response = new RestTemplate() - .getForObject("http://localhost:" + this.port + "/my-path/foo", String.class); + .getForObject("http://localhost:" + this.port + "/my-path/health", String.class); assertThat(response).isNotEmpty(); } diff --git a/tests/spring-cloud-contract-stub-runner-integration/pom.xml b/tests/spring-cloud-contract-stub-runner-integration/pom.xml index ed4fe4a69b..7f160c2f6b 100644 --- a/tests/spring-cloud-contract-stub-runner-integration/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-integration/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-integration @@ -16,10 +16,6 @@ 1.8 - - org.springframework.boot - spring-boot-starter-integration - org.springframework.cloud spring-cloud-contract-stub-runner @@ -33,6 +29,10 @@ org.springframework.cloud spring-cloud-contract-verifier + + org.springframework.integration + spring-integration-java-dsl + junit junit diff --git a/tests/spring-cloud-contract-stub-runner-moco-contract-jar/pom.xml b/tests/spring-cloud-contract-stub-runner-moco-contract-jar/pom.xml index 40a8270173..c1914d8fd4 100644 --- a/tests/spring-cloud-contract-stub-runner-moco-contract-jar/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-moco-contract-jar/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-moco-contract-jar diff --git a/tests/spring-cloud-contract-stub-runner-moco/pom.xml b/tests/spring-cloud-contract-stub-runner-moco/pom.xml index 536e2b67d4..9e4e1aef0e 100644 --- a/tests/spring-cloud-contract-stub-runner-moco/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-moco/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-moco diff --git a/tests/spring-cloud-contract-stub-runner-stream/pom.xml b/tests/spring-cloud-contract-stub-runner-stream/pom.xml index b514f41d0d..c3ea352ff3 100644 --- a/tests/spring-cloud-contract-stub-runner-stream/pom.xml +++ b/tests/spring-cloud-contract-stub-runner-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-contract-tests - 2.0.0.BUILD-SNAPSHOT + 1.2.2.BUILD-SNAPSHOT .. spring-cloud-contract-stub-runner-stream @@ -36,6 +36,10 @@ spring-cloud-stream-test-support test + + org.springframework.integration + spring-integration-java-dsl + junit junit diff --git a/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy index 2ee278ee21..d47837d955 100644 --- a/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-stream/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy @@ -163,8 +163,7 @@ class StreamStubRunnerSpec extends Specification { private boolean assertJsons(Object payload) { String objectAsString = payload instanceof String ? payload : - payload instanceof byte[] ? new String(payload) - : JsonOutput.toJson(payload) + JsonOutput.toJson(payload) def json = new JsonSlurper().parseText(objectAsString) return json.bookName == 'foo' }