From 917fb8e2465f701163b98baff7bb6ed40c448b5e Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Tue, 30 Apr 2024 12:03:29 -0400 Subject: [PATCH] add new package --- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 5 - jackson-modules/jackson-annotations/README.md | 9 - jackson-modules/jackson-annotations/pom.xml | 50 --- .../bidirection/CustomListDeserializer.java | 29 -- .../bidirection/CustomListSerializer.java | 32 -- .../com/ossez/jackson/bidirection/Item.java | 17 - .../jackson/bidirection/ItemWithIdentity.java | 21 - .../jackson/bidirection/ItemWithIgnore.java | 17 - .../jackson/bidirection/ItemWithRef.java | 21 - .../bidirection/ItemWithSerializer.java | 17 - .../jackson/bidirection/ItemWithView.java | 26 -- .../com/ossez/jackson/bidirection/User.java | 24 -- .../jackson/bidirection/UserWithIdentity.java | 28 -- .../jackson/bidirection/UserWithIgnore.java | 28 -- .../jackson/bidirection/UserWithRef.java | 28 -- .../bidirection/UserWithSerializer.java | 30 -- .../jackson/bidirection/UserWithView.java | 33 -- .../jackson/bidirection/jsonview/Views.java | 9 - .../java/com/ossez/jackson/domain/Person.java | 30 -- .../java/com/ossez/jackson/format/User.java | 37 -- .../java/com/ossez/jackson/jsonview/Item.java | 36 -- .../jsonview/MyBeanSerializerModifier.java | 22 - .../jackson/jsonview/UpperCasingWriter.java | 21 - .../java/com/ossez/jackson/jsonview/User.java | 27 -- .../com/ossez/jackson/jsonview/Views.java | 9 - .../AdvancedAnnotationsUnitTest.java | 133 ------ .../advancedannotations/AppendBeans.java | 58 --- .../IdentityReferenceBeans.java | 62 --- .../advancedannotations/NamingBean.java | 31 -- .../advancedannotations/POJOBuilderBean.java | 51 --- .../PropertyDescriptionBean.java | 25 -- .../advancedannotations/TypeIdBean.java | 30 -- .../TypeIdResolverStructure.java | 130 ------ .../JacksonBidirectionRelationUnitTest.java | 152 ------- .../jackson/format/JsonFormatUnitTest.java | 37 -- .../jsonview/JacksonJsonViewUnitTest.java | 88 ---- .../jackson-conversions-2/README.md | 13 - jackson-modules/jackson-conversions-2/pom.xml | 57 --- .../ossez/jackson/csv/JsonCsvConverter.java | 57 --- .../java/com/ossez/jackson/csv/OrderLine.java | 49 --- .../ossez/jackson/csv/OrderLineForCsv.java | 25 -- .../ossez/jackson/dynamicobject/Product.java | 39 -- .../dynamicobject/ProductJsonNode.java | 35 -- .../jackson/dynamicobject/ProductMap.java | 35 -- .../ossez/jackson/multiplefields/Weather.java | 44 -- .../com/ossez/jackson/tocollection/Book.java | 70 --- .../tocollection/JsonToCollectionUtil.java | 24 -- .../com/ossez/jackson/xmlToJson/Color.java | 5 - .../com/ossez/jackson/xmlToJson/Flower.java | 42 -- .../java/com/ossez/jackson/yaml/Order.java | 68 --- .../com/ossez/jackson/yaml/OrderLine.java | 49 --- .../src/main/resources/csv/orderLines.csv | 3 - .../src/main/resources/csv/orderLines.json | 9 - .../resources/to-java-collection/books.json | 13 - .../resources/to-java-collection/books.xml | 17 - .../com/ossez/jackson/csv/CsvUnitTest.java | 65 --- .../DynamicObjectDeserializationUnitTest.java | 69 --- ...apMultipleFieldsToSingleFieldUnitTest.java | 37 -- .../streaming/StreamingAPIUnitTest.java | 118 ----- .../DeserializeToJavaCollectionUnitTest.java | 130 ------ .../JsonToCollectionUtilUnitTest.java | 51 --- .../jackson/xmlToJson/XmlToJsonUnitTest.java | 43 -- .../com/ossez/jackson/yaml/YamlUnitTest.java | 69 --- .../resources/csv/expectedCsvFromJson.csv | 3 - .../csv/expectedFormattedCsvFromJson.csv | 3 - .../resources/csv/expectedJsonFromCsv.json | 9 - .../deserialize-dynamic-object/embedded.json | 8 - .../deserialize-dynamic-object/flat.json | 6 - .../src/test/resources/yaml/orderInput.yaml | 11 - jackson-modules/jackson-conversions/README.md | 16 - jackson-modules/jackson-conversions/pom.xml | 39 -- .../jackson/date/CustomDateDeserializer.java | 36 -- .../jackson/date/CustomDateSerializer.java | 29 -- .../date/CustomDateTimeSerializer.java | 32 -- .../date/CustomLocalDateTimeSerializer.java | 29 -- .../java/com/ossez/jackson/date/Event.java | 25 -- .../ossez/jackson/date/EventWithFormat.java | 29 -- .../ossez/jackson/date/EventWithJodaTime.java | 29 -- .../jackson/date/EventWithLocalDate.java | 33 -- .../jackson/date/EventWithLocalDateTime.java | 29 -- .../jackson/date/EventWithSerializer.java | 31 -- .../jackson/enums/deserialization/City.java | 15 - .../enums/deserialization/Distance.java | 31 -- .../customdeserializer/City.java | 15 - .../CustomEnumDeserializer.java | 42 -- .../customdeserializer/Distance.java | 33 -- .../deserialization/jsoncreator/City.java | 15 - .../deserialization/jsoncreator/Distance.java | 48 --- .../deserialization/jsonproperty/City.java | 15 - .../jsonproperty/Distance.java | 51 --- .../enums/deserialization/jsonvalue/City.java | 15 - .../deserialization/jsonvalue/Distance.java | 35 -- .../jackson/enums/serialization/Distance.java | 53 --- .../serialization/DistanceSerializer.java | 32 -- .../enums/withEnum/DistanceEnumSimple.java | 26 -- .../withEnum/DistanceEnumWithJsonFormat.java | 29 -- .../enums/withEnum/DistanceEnumWithValue.java | 29 -- .../enums/withEnum/MyDtoWithEnumCustom.java | 59 --- .../withEnum/MyDtoWithEnumJsonFormat.java | 57 --- .../java/com/ossez/jackson/field/MyDto.java | 47 -- .../ossez/jackson/field/MyDtoAccessLevel.java | 23 - .../ossez/jackson/field/MyDtoWithGetter.java | 25 -- .../ossez/jackson/field/MyDtoWithSetter.java | 29 -- .../com/ossez/jackson/immutable/Employee.java | 24 -- .../com/ossez/jackson/immutable/Person.java | 44 -- .../com/ossez/jackson/map/ClassWithAMap.java | 23 - .../java/com/ossez/jackson/map/MyPair.java | 80 ---- .../ossez/jackson/map/MyPairDeserializer.java | 16 - .../ossez/jackson/map/MyPairSerializer.java | 22 - .../java/com/ossez/jackson/mapnull/MyDto.java | 54 --- .../mapnull/MyDtoNullKeySerializer.java | 27 -- .../com/ossez/jackson/tocollection/MyDto.java | 54 --- .../java/com/ossez/jackson/xml/Address.java | 33 -- .../java/com/ossez/jackson/xml/Person.java | 47 -- .../jackson/date/JacksonDateUnitTest.java | 212 --------- .../DefaultEnumDeserializationUnitTest.java | 20 - .../EnumCustomDeserializationUnitTest.java | 19 - ...serializationUsingJsonCreatorUnitTest.java | 20 - ...erializationUsingJsonPropertyUnitTest.java | 21 - ...DeserializationUsingJsonValueUnitTest.java | 20 - .../JacksonEnumSerializationUnitTest.java | 20 - .../JacksonSerializationEnumsUnitTest.java | 77 ---- .../jackson/field/JacksonFieldUnitTest.java | 92 ---- ...mmutableObjectDeserializationUnitTest.java | 38 -- .../map/JacksonMapDeserializeUnitTest.java | 62 --- .../map/JacksonMapSerializeUnitTest.java | 65 --- .../mapnull/JacksonMapNullUnitTest.java | 99 ----- ...serializeWithNestedPropertiesUnitTest.java | 70 --- .../com/ossez/jackson/nested/Product.java | 55 --- .../jackson/nested/ProductDeserializer.java | 40 -- ...ksonCollectionDeserializationUnitTest.java | 75 ---- .../tojsonnode/StringToJsonNodeUnitTest.java | 51 --- .../xml/XMLSerializeDeserializeUnitTest.java | 182 -------- .../src/test/resources/simple_bean.xml | 4 - .../jackson-custom-conversions/README.md | 9 - .../jackson-custom-conversions/pom.xml | 44 -- .../File.java | 25 -- .../Folder.java | 82 ---- .../FolderBeanSerializerModifier.java | 20 - .../FolderSerializer.java | 34 -- ...derSerializerWithCallingOwnSerializer.java | 29 -- ...SerializerWithDefaultSerializerStored.java | 34 -- ...derSerializerWithInternalObjectMapper.java | 33 -- ...olderSerializerWithSerializerProvider.java | 28 -- .../deserialization/ActorJackson.java | 61 --- .../com/baeldung/deserialization/Item.java | 32 -- .../deserialization/ItemDeserializer.java | 39 -- .../ItemDeserializerOnClass.java | 39 -- .../deserialization/ItemWithDeserializer.java | 31 -- .../com/baeldung/deserialization/Movie.java | 50 --- .../com/baeldung/deserialization/User.java | 26 -- .../java/com/baeldung/serialization/Item.java | 32 -- .../serialization/ItemSerializer.java | 31 -- .../serialization/ItemSerializerOnClass.java | 31 -- .../serialization/ItemWithSerializer.java | 32 -- .../java/com/baeldung/serialization/User.java | 26 -- .../java/com/baeldung/skipfields/Address.java | 40 -- .../java/com/baeldung/skipfields/Hidable.java | 8 - .../skipfields/HidableSerializer.java | 29 -- .../baeldung/skipfields/MyDtoWithFilter.java | 50 --- .../java/com/baeldung/skipfields/Person.java | 40 -- .../CallingDefaultSerializerUnitTest.java | 164 ------- .../CustomDeserializationUnitTest.java | 81 ---- .../CustomSerializationUnitTest.java | 49 --- .../IgnoreFieldsWithFilterUnitTest.java | 87 ---- .../JacksonDynamicIgnoreUnitTest.java | 88 ---- jackson-modules/jackson-exceptions/README.md | 7 - jackson-modules/jackson-exceptions/pom.xml | 26 -- .../java/com/baeldung/exceptions/User.java | 26 -- .../baeldung/exceptions/UserWithConflict.java | 25 -- .../UserWithNoDefaultConstructor.java | 21 - .../exceptions/UserWithPrivateFields.java | 16 - .../com/baeldung/exceptions/UserWithRoot.java | 18 - .../java/com/baeldung/exceptions/Zoo.java | 22 - .../baeldung/exceptions/ZooConfigured.java | 25 -- .../mappingexception/MyDtoNoAccessors.java | 21 - .../MyDtoNoAccessorsAndFieldVisibility.java | 25 -- .../exceptions/JacksonExceptionsUnitTest.java | 195 --------- .../JacksonMappingExceptionUnitTest.java | 51 --- jackson-modules/jackson/README.md | 14 - jackson-modules/jackson/pom.xml | 73 ---- .../deserialization/jacksoninject/Person.java | 43 -- .../jsonanysetter/Inventory.java | 20 - .../deserialization/jsondeserialize/Book.java | 75 ---- .../CustomDateDeserializer.java | 33 -- .../java/com/ossez/jackson/domain/Person.java | 30 -- .../com/ossez/jackson/inheritance/Event.java | 25 -- .../IgnoranceAnnotationStructure.java | 96 ----- .../IgnoranceMixinOrIntrospection.java | 91 ---- .../inheritance/ItemIdAddedToUser.java | 28 -- .../inheritance/ItemIdRemovedFromUser.java | 26 -- .../SubTypeConstructorStructure.java | 92 ---- .../SubTypeConversionStructure.java | 87 ---- .../TypeInfoAnnotatedStructure.java | 102 ----- .../inheritance/TypeInfoStructure.java | 96 ----- .../jackson/jacksonvsgson/ActorJackson.java | 61 --- .../jacksonvsgson/ActorJacksonSerializer.java | 32 -- .../ossez/jackson/jacksonvsgson/Movie.java | 50 --- .../jacksonvsgson/MovieWithNullValue.java | 46 -- .../ossez/jackson/node/JsonNodeIterator.java | 62 --- .../jackson/optionalwithjackson/Book.java | 25 -- .../jackson/src/main/resources/example1.json | 12 - .../jackson/src/main/resources/example2.json | 10 - .../jackson/src/main/resources/logback.xml | 19 - .../java/com/ossez/jackson/dtos/Address.java | 33 -- .../java/com/ossez/jackson/dtos/MyDto.java | 54 --- .../java/com/ossez/jackson/dtos/Person.java | 47 -- .../java/com/ossez/jackson/dtos/User.java | 26 -- .../inheritance/IgnoranceUnitTest.java | 92 ---- .../ItemIdRemovedFromUserUnitTest.java | 41 -- .../inheritance/SubTypeHandlingUnitTest.java | 43 -- .../TypeInfoInclusionUnitTest.java | 61 --- .../JacksonDeserializeUnitTest.java | 38 -- .../JacksonSerializeUnitTest.java | 58 --- .../jsoncompare/JsonCompareUnitTest.java | 126 ------ .../ossez/jackson/node/ExampleStructure.java | 18 - .../node/JsonNodeIteratorUnitTest.java | 37 -- .../java/com/ossez/jackson/node/NodeBean.java | 30 -- .../jackson/node/NodeOperationUnitTest.java | 119 ----- .../OptionalTypeUnitTest.java | 61 --- .../sandbox/JacksonPrettyPrintUnitTest.java | 50 --- .../jackson/sandbox/SandboxUnitTest.java | 29 -- .../ossez/jackson/sandbox/TestElement.java | 25 -- .../com/ossez/jackson/test/UnitTestSuite.java | 14 - .../java/com/ossez/jackson/try1/IEntity.java | 5 - .../ossez/jackson/try1/RestLoaderRequest.java | 38 -- .../try1/RestLoaderRequestDeserializer.java | 48 --- .../author-jsonpropertyorder-schema.json | 29 -- .../src/test/resources/node_example-1.json | 65 --- .../src/test/resources/node_example.json | 18 - jackson-modules/pom.xml | 56 --- jackson-simple/README.md | 19 - jackson-simple/pom.xml | 36 -- .../ossez/jackson/annotation/AliasBean.java | 31 -- .../jackson/annotation/BeanWithCreator.java | 15 - .../annotation/BeanWithCustomAnnotation.java | 37 -- .../jackson/annotation/BeanWithFilter.java | 18 - .../jackson/annotation/BeanWithGetter.java | 31 -- .../jackson/annotation/BeanWithIgnore.java | 20 - .../jackson/annotation/BeanWithInject.java | 18 - .../jackson/annotation/ExtendableBean.java | 31 -- .../com/ossez/jackson/annotation/MyBean.java | 33 -- .../ossez/jackson/annotation/PrivateBean.java | 19 - .../com/ossez/jackson/annotation/RawBean.java | 19 - .../jackson/annotation/UnwrappedUser.java | 34 -- .../annotation/UserWithIgnoreType.java | 34 -- .../com/ossez/jackson/annotation/Zoo.java | 56 --- .../bidirection/ItemWithIdentity.java | 21 - .../bidirection/ItemWithIgnore.java | 17 - .../annotation/bidirection/ItemWithRef.java | 21 - .../bidirection/UserWithIdentity.java | 28 -- .../bidirection/UserWithIgnore.java | 28 -- .../annotation/bidirection/UserWithRef.java | 28 -- .../date/CustomDateDeserializer.java | 36 -- .../annotation/date/CustomDateSerializer.java | 29 -- .../annotation/date/EventWithFormat.java | 29 -- .../annotation/date/EventWithSerializer.java | 31 -- .../ItemDeserializerOnClass.java | 41 -- .../ossez/jackson/annotation/dtos/Item.java | 32 -- .../annotation/dtos/ItemWithSerializer.java | 36 -- .../ossez/jackson/annotation/dtos/User.java | 26 -- .../dtos/withEnum/DistanceEnumWithValue.java | 29 -- .../annotation/exception/UserWithRoot.java | 18 - .../exception/UserWithRootNamespace.java | 18 - .../ignore/MyMixInForIgnoreType.java | 8 - .../jackson/annotation/jsonview/Item.java | 36 -- .../jackson/annotation/jsonview/Views.java | 9 - .../serialization/ItemSerializer.java | 32 -- .../serialization/ItemSerializerOnClass.java | 32 -- .../java/com/ossez/jackson/ignore/MyDto.java | 54 --- .../jackson/ignore/MyDtoIgnoreField.java | 42 -- .../ignore/MyDtoIgnoreFieldByName.java | 42 -- .../ossez/jackson/ignore/MyDtoIgnoreNull.java | 51 --- .../ignore/MyDtoIncludeNonDefault.java | 43 -- .../ossez/jackson/ignore/MyDtoWithFilter.java | 50 --- .../jackson/ignore/MyDtoWithSpecialField.java | 54 --- .../jackson/ignore/MyMixInForIgnoreType.java | 8 - .../ossez/jackson/ignorenullfields/MyDto.java | 54 --- .../ignorenullfields/MyDtoIgnoreNull.java | 51 --- .../com/ossez/jackson/jsonproperty/MyDto.java | 54 --- .../jsonproperty/MyDtoFieldNameChanged.java | 50 --- .../objectmapper/CustomCarDeserializer.java | 42 -- .../objectmapper/CustomCarSerializer.java | 29 -- .../ossez/jackson/objectmapper/dto/Car.java | 31 -- .../jackson/objectmapper/dto/Request.java | 24 -- .../jackson/unknownproperties/MyDto.java | 54 --- .../unknownproperties/MyDtoIgnoreType.java | 50 --- .../unknownproperties/MyDtoIgnoreUnknown.java | 50 --- jackson-simple/src/main/resources/logback.xml | 19 - .../annotation/JacksonAnnotationUnitTest.java | 406 ------------------ .../IgnoreFieldsWithFilterUnitTest.java | 87 ---- .../JacksonSerializationIgnoreUnitTest.java | 111 ----- .../IgnoreNullFieldsUnitTest.java | 41 -- .../jsonproperty/JsonPropertyUnitTest.java | 39 -- .../JavaReadWriteJsonExampleUnitTest.java | 114 ----- ...izationDeserializationFeatureUnitTest.java | 85 ---- .../UnknownPropertiesUnitTest.java | 80 ---- .../src/test/resources/json_car.json | 4 - spring-batch/.gitignore | 1 - spring-batch/README.md | 9 - spring-batch/pom.xml | 116 ----- spring-batch/repository.sqlite | Bin 65536 -> 0 bytes .../main/java/com/ossez/spring/batch/App.java | 45 -- .../com/ossez/spring/batch/Application.java | 12 - .../ossez/spring/batch/SpringBatchConfig.java | 145 ------- .../com/ossez/spring/batch/SpringConfig.java | 78 ---- .../ossez/spring/batch/model/Transaction.java | 53 --- .../CustomMultiResourcePartitioner.java | 77 ---- .../SpringbatchPartitionConfig.java | 166 ------- .../SpringbatchPartitionerApp.java | 28 -- .../batch/service/CustomItemProcessor.java | 12 - .../batch/service/CustomSkipPolicy.java | 29 -- .../service/MissingUsernameException.java | 4 - .../service/NegativeAmountException.java | 14 - .../batch/service/RecordFieldSetMapper.java | 35 -- .../batch/service/SkippingItemProcessor.java | 24 -- .../batchscheduler/SpringBatchScheduler.java | 172 -------- .../spring/batchscheduler/model/Book.java | 35 -- .../spring/file2db/BatchConfiguration.java | 82 ---- .../JobCompletionNotificationListener.java | 36 -- .../java/com/ossez/spring/file2db/Person.java | 37 -- .../spring/file2db/PersonItemProcessor.java | 24 -- .../chunks/LineProcessor.java | 36 -- .../taskletsvschunks/chunks/LineReader.java | 36 -- .../taskletsvschunks/chunks/LinesWriter.java | 40 -- .../taskletsvschunks/config/ChunksConfig.java | 91 ---- .../config/TaskletsConfig.java | 104 ----- .../spring/taskletsvschunks/model/Line.java | 55 --- .../tasklets/LinesProcessor.java | 49 --- .../tasklets/LinesReader.java | 53 --- .../tasklets/LinesWriter.java | 51 --- .../taskletsvschunks/utils/FileUtils.java | 95 ---- spring-batch/src/main/resources/books.csv | 4 - .../resources/input/partitioner/record1.csv | 4 - .../resources/input/partitioner/record2.csv | 4 - .../resources/input/partitioner/record3.csv | 4 - .../resources/input/partitioner/record4.csv | 4 - .../resources/input/partitioner/record5.csv | 4 - .../src/main/resources/input/record.csv | 4 - .../resources/input/recordWithInvalidData.csv | 7 - spring-batch/src/main/resources/logback.xml | 24 -- .../src/main/resources/output/output1.xml | 21 - .../src/main/resources/output/output2.xml | 21 - .../src/main/resources/output/output3.xml | 21 - .../src/main/resources/output/output4.xml | 21 - .../src/main/resources/output/output5.xml | 21 - .../src/main/resources/spring-batch-intro.xml | 57 --- spring-batch/src/main/resources/spring.xml | 45 -- .../input/tasklets-vs-chunks.csv | 6 - .../SpringContextIntegrationTest.java | 12 - .../java/org/baeldung/SpringContextTest.java | 14 - .../SpringBatchSchedulerIntegrationTest.java | 61 --- .../chunks/ChunksIntegrationTest.java | 25 -- .../tasklets/TaskletsIntegrationTest.java | 25 -- spring-boot-modules/spring-boot-1st/README.md | 12 - spring-boot-modules/spring-boot-1st/pom.xml | 70 --- .../src/main/java/Example.java | 19 - .../spring-boot-testing/.gitignore | 5 - .../.mvn/wrapper/maven-wrapper.properties | 1 - .../spring-boot-testing/README.md | 12 - spring-boot-modules/spring-boot-testing/mvnw | 227 ---------- .../spring-boot-testing/mvnw.cmd | 145 ------- .../spring-boot-testing/pom.xml | 149 ------- .../java/com/baeldung/boot/Application.java | 14 - .../configurationproperties/Credentials.java | 28 -- .../CustomCredentialsConverter.java | 16 - .../configurationproperties/MailServer.java | 59 --- .../PropertyConversion.java | 67 --- .../configurationproperties/ServerConfig.java | 43 -- .../ServerConfigFactory.java | 15 - .../boot/controller/rest/HomeController.java | 14 - .../boot/controller/rest/WebController.java | 36 -- .../configuration/RedisConfiguration.java | 24 -- .../configuration/RedisProperties.java | 23 - .../boot/embeddedRedis/domain/User.java | 25 -- .../domain/repository/UserRepository.java | 10 - .../com/baeldung/boot/testing/Employee.java | 46 -- .../boot/testing/EmployeeRepository.java | 17 - .../boot/testing/EmployeeRestController.java | 33 -- .../boot/testing/EmployeeService.java | 16 - .../boot/testing/EmployeeServiceImpl.java | 43 -- .../ApplicationCommandLineRunnerApp.java | 11 - .../ApplicationRunnerTaskExecutor.java | 27 -- .../execution/CommandLineTaskExecutor.java | 26 -- .../runner/execution/TaskService.java | 14 - .../resources/application-test.properties | 3 - .../src/main/resources/application.properties | 8 - .../persistence-generic-entity.properties | 8 - .../resources/property-validation.properties | 4 - .../com/baeldung/boot/LoadContextTest.groovy | 23 - .../baeldung/boot/WebControllerTest.groovy | 46 -- .../boot/WebControllerTest.groovy alias | Bin 217036 -> 0 bytes .../ExcludeAutoConfig1IntegrationTest.java | 32 -- .../ExcludeAutoConfig2IntegrationTest.java | 32 -- .../ExcludeAutoConfig3IntegrationTest.java | 33 -- .../ExcludeAutoConfig4IntegrationTest.java | 29 -- .../autoconfig/exclude/TestApplication.java | 13 - .../com/baeldung/boot/SpringContextTest.java | 15 - .../autoconfig/AutoConfigIntegrationTest.java | 36 -- ...indingPropertiesToBeanMethodsUnitTest.java | 36 -- ...ngPropertiesToUserDefinedPOJOUnitTest.java | 32 -- .../BindingYMLPropertiesUnitTest.java | 33 -- ...ridingConfigurationPropertiesUnitTest.java | 33 -- .../PropertyValidationUnitTest.java | 39 -- .../SpringPropertiesConversionUnitTest.java | 44 -- .../embeddedRedis/TestRedisConfiguration.java | 28 -- .../UserRepositoryIntegrationTest.java | 31 -- .../EmployeeControllerIntegrationTest.java | 73 ---- .../EmployeeRepositoryIntegrationTest.java | 72 ---- ...EmployeeRestControllerIntegrationTest.java | 86 ---- .../EmployeeServiceImplIntegrationTest.java | 132 ------ .../com/baeldung/boot/testing/JsonUtil.java | 14 - .../LoadSpringContextIntegrationTest.java | 43 -- .../RunApplicationIntegrationTest.java | 26 -- ...icationWithTestProfileIntegrationTest.java | 33 -- ...tionWithTestPropertiesIntegrationTest.java | 32 -- .../application-integrationtest.properties | 4 - .../resources/application-test.properties | 2 - .../src/test/resources/application.properties | 8 - .../src/test/resources/application.yml | 19 - .../src/test/resources/logback-test.xml | 12 - .../property-validation-test.properties | 4 - .../resources/server-config-test.properties | 6 - .../spring-conversion-test.properties | 10 - spring-remoting-modules-3/README.md | 13 - spring-remoting-modules-3/pom.xml | 53 --- .../remoting-jms-artemis/.idea/.gitignore | 10 - .../.idea/checkstyle-idea.xml | 16 - .../remoting-jms-artemis/.idea/compiler.xml | 15 - .../remoting-jms-artemis/.idea/encodings.xml | 11 - .../.idea/jarRepositories.xml | 30 -- .../remoting-jms-artemis/.idea/jpa-buddy.xml | 7 - .../remoting-jms-artemis/.idea/misc.xml | 18 - .../remoting-jms-artemis/.idea/uiDesigner.xml | 124 ------ .../remoting-jms-artemis/.idea/vcs.xml | 6 - .../remoting-jms-artemis/README.md | 8 - .../remoting-jms-artemis/pom.xml | 21 - .../remoting-jms-artemis-client/pom.xml | 32 -- .../client/JmsArtemisClientApplication.java | 23 - .../com/ossez/artemis/client/JmsProducer.java | 23 - .../client/controller/MQController.java | 30 -- .../src/main/resources/application.properties | 6 - .../src/main/resources/logback.xml | 23 - .../com/ossez/artemis/SpringContextTest.java | 17 - .../remoting-jms-artemis-server/pom.xml | 28 -- .../server/JmsArtemisServerApplication.java | 25 -- .../src/main/resources/application.properties | 13 - .../src/main/resources/logback.xml | 13 - .../ossez/artemis/SpringContextLiveTest.java | 23 - spring-remoting-modules/.idea/.gitignore | 10 - .../.idea/checkstyle-idea.xml | 16 - spring-remoting-modules/.idea/compiler.xml | 17 - spring-remoting-modules/.idea/encodings.xml | 21 - .../.idea/jarRepositories.xml | 30 -- spring-remoting-modules/.idea/jpa-buddy.xml | 7 - spring-remoting-modules/.idea/misc.xml | 18 - spring-remoting-modules/.idea/vcs.xml | 6 - spring-remoting-modules/README.md | 13 - spring-remoting-modules/pom.xml | 58 --- .../remoting-amqp/README.md | 3 - spring-remoting-modules/remoting-amqp/pom.xml | 21 - .../remoting-amqp-client/pom.xml | 35 -- .../java/com/baeldung/client/AmqpClient.java | 46 -- .../src/main/resources/application.properties | 19 - .../src/main/resources/logback.xml | 13 - .../java/org/baeldung/SpringContextTest.java | 17 - .../remoting-amqp-server/pom.xml | 38 -- .../java/com/baeldung/server/AmqpServer.java | 53 --- .../src/main/resources/application.properties | 19 - .../src/main/resources/logback.xml | 13 - .../org/baeldung/SpringContextManualTest.java | 17 - .../remoting-hessian-burlap/README.md | 12 - .../remoting-hessian-burlap/pom.xml | 24 -- .../remoting-hessian-burlap-client/pom.xml | 79 ---- .../com/baeldung/client/BurlapClient.java | 28 -- .../com/baeldung/client/HessianClient.java | 28 -- .../src/main/resources/logback.xml | 13 - .../CabBookingServiceIntegrationTest.java | 74 ---- .../java/org/baeldung/SpringContextTest.java | 18 - .../src/test/resources/application.properties | 1 - .../remoting-hessian-burlap-server/pom.xml | 50 --- .../main/java/com/baeldung/server/Server.java | 41 -- .../src/main/resources/logback.xml | 13 - .../java/org/baeldung/SpringContextTest.java | 17 - .../remoting-http/README.md | 8 - spring-remoting-modules/remoting-http/pom.xml | 23 - .../remoting-http/remoting-http-api/pom.xml | 16 - .../main/java/com/baeldung/api/Booking.java | 17 - .../com/baeldung/api/BookingException.java | 7 - .../com/baeldung/api/CabBookingService.java | 5 - .../remoting-http-client/pom.xml | 34 -- .../main/java/com/baeldug/client/Client.java | 28 -- .../src/main/resources/logback.xml | 13 - .../remoting-http-server/pom.xml | 28 -- .../remoting-http-server/readme.md | 12 - .../server/CabBookingServiceImpl.java | 16 - .../main/java/com/baeldung/server/Server.java | 27 -- .../src/main/resources/logback.xml | 13 - .../java/org/baeldung/SpringContextTest.java | 17 - .../remoting-jms/README.md | 8 - spring-remoting-modules/remoting-jms/pom.xml | 21 - .../remoting-jms/remoting-jms-client/pom.xml | 33 -- .../java/com/baeldung/client/JmsClient.java | 39 -- .../src/main/resources/application.properties | 10 - .../src/main/resources/logback.xml | 13 - .../java/org/baeldung/SpringContextTest.java | 17 - .../remoting-jms/remoting-jms-server/pom.xml | 33 -- .../server/CabBookingServiceImpl.java | 16 - .../java/com/baeldung/server/JmsServer.java | 51 --- .../src/main/resources/application.properties | 10 - .../src/main/resources/logback.xml | 13 - .../com/baeldung/SpringContextLiveTest.java | 23 - .../remoting-rmi/README.md | 7 - spring-remoting-modules/remoting-rmi/pom.xml | 21 - .../remoting-rmi/remoting-rmi-client/pom.xml | 33 -- .../java/com/baeldung/client/RmiClient.java | 26 -- .../src/main/resources/logback.xml | 13 - .../com/baeldung/SpringContextLiveTest.java | 23 - .../remoting-rmi/remoting-rmi-server/pom.xml | 33 -- .../server/CabBookingServiceImpl.java | 16 - .../java/com/baeldung/server/RmiServer.java | 34 -- .../src/main/resources/logback.xml | 13 - .../java/org/baeldung/SpringContextTest.java | 17 - spring-rest-full/.gitignore | 13 - spring-rest-full/README.md | 37 -- spring-rest-full/pom.xml | 297 ------------- .../org/baeldung/persistence/IOperations.java | 22 - .../org/baeldung/persistence/dao/IFooDao.java | 11 - .../org/baeldung/persistence/model/Foo.java | 83 ---- .../org/baeldung/persistence/model/User.java | 94 ---- .../persistence/service/IFooService.java | 10 - .../service/common/AbstractService.java | 45 -- .../persistence/service/impl/FooService.java | 37 -- .../java/org/baeldung/spring/Application.java | 41 -- .../baeldung/spring/PersistenceConfig.java | 85 ---- .../java/org/baeldung/spring/WebConfig.java | 36 -- .../web/controller/FooController.java | 80 ---- .../web/controller/HomeController.java | 14 - .../web/controller/RootController.java | 52 --- .../MyResourceNotFoundException.java | 21 - .../web/metric/ActuatorMetricService.java | 110 ----- .../metric/CustomActuatorMetricService.java | 92 ---- .../web/metric/IActuatorMetricService.java | 5 - .../metric/ICustomActuatorMetricService.java | 8 - .../baeldung/web/metric/IMetricService.java | 14 - .../org/baeldung/web/metric/MetricFilter.java | 49 --- .../baeldung/web/metric/MetricService.java | 122 ------ .../baeldung/web/util/RestPreconditions.java | 48 --- .../src/main/resources/application.properties | 3 - .../src/main/resources/logback.xml | 19 - .../main/resources/persistence-h2.properties | 22 - .../resources/persistence-mysql.properties | 10 - .../resources/springDataPersistenceConfig.xml | 12 - .../src/main/webapp/WEB-INF/api-servlet.xml | 6 - .../src/main/webapp/WEB-INF/view/graph.jsp | 43 -- .../src/main/webapp/WEB-INF/view/homepage.jsp | 7 - .../src/main/webapp/WEB-INF/web.xml | 52 --- .../src/test/java/org/baeldung/Consts.java | 5 - .../SpringContextIntegrationTest.java | 16 - .../java/org/baeldung/SpringContextTest.java | 16 - .../persistence/PersistenceTestSuite.java | 16 - ...ractServicePersistenceIntegrationTest.java | 255 ----------- .../FooServicePersistenceIntegrationTest.java | 76 ---- .../test/java/org/baeldung/util/IDUtil.java | 33 -- .../src/test/resources/.gitignore | 13 - spring-rest-full/src/testFile | 1 - 567 files changed, 21600 deletions(-) delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100644 jackson-modules/jackson-annotations/README.md delete mode 100644 jackson-modules/jackson-annotations/pom.xml delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListDeserializer.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListSerializer.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/Item.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIdentity.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIgnore.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithRef.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithSerializer.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithView.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/User.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIdentity.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIgnore.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithRef.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithSerializer.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithView.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/jsonview/Views.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/domain/Person.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/format/User.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Item.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/MyBeanSerializerModifier.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/UpperCasingWriter.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/User.java delete mode 100644 jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Views.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AdvancedAnnotationsUnitTest.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AppendBeans.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/IdentityReferenceBeans.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/NamingBean.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/POJOBuilderBean.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/PropertyDescriptionBean.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdBean.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdResolverStructure.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/bidirection/JacksonBidirectionRelationUnitTest.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/format/JsonFormatUnitTest.java delete mode 100644 jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/jsonview/JacksonJsonViewUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/README.md delete mode 100644 jackson-modules/jackson-conversions-2/pom.xml delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/JsonCsvConverter.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLine.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLineForCsv.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/Product.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductJsonNode.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductMap.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/multiplefields/Weather.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/Book.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/JsonToCollectionUtil.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Color.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Flower.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/Order.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/OrderLine.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.csv delete mode 100644 jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.json delete mode 100644 jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.json delete mode 100644 jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.xml delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/csv/CsvUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/dynamicobject/DynamicObjectDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/multiplefields/MapMultipleFieldsToSingleFieldUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/streaming/StreamingAPIUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/DeserializeToJavaCollectionUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/JsonToCollectionUtilUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/xmlToJson/XmlToJsonUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/yaml/YamlUnitTest.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedCsvFromJson.csv delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedFormattedCsvFromJson.csv delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedJsonFromCsv.json delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/embedded.json delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/flat.json delete mode 100644 jackson-modules/jackson-conversions-2/src/test/resources/yaml/orderInput.yaml delete mode 100644 jackson-modules/jackson-conversions/README.md delete mode 100644 jackson-modules/jackson-conversions/pom.xml delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateDeserializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateTimeSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomLocalDateTimeSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/Event.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithFormat.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithJodaTime.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDate.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDateTime.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/City.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/City.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/CustomEnumDeserializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/City.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/City.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/City.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/Distance.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/DistanceSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumSimple.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithJsonFormat.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithValue.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumCustom.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumJsonFormat.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDto.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoAccessLevel.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithGetter.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithSetter.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Employee.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Person.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/ClassWithAMap.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPair.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairDeserializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairSerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDto.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDtoNullKeySerializer.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/tocollection/MyDto.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Address.java delete mode 100644 jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Person.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/date/JacksonDateUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/DefaultEnumDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/customdeserializer/EnumCustomDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonEnumSerializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonSerializationEnumsUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/field/JacksonFieldUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/immutable/ImmutableObjectDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapDeserializeUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapSerializeUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/mapnull/JacksonMapNullUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/DeserializeWithNestedPropertiesUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/Product.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/ProductDeserializer.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tocollection/JacksonCollectionDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tojsonnode/StringToJsonNodeUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/xml/XMLSerializeDeserializeUnitTest.java delete mode 100644 jackson-modules/jackson-conversions/src/test/resources/simple_bean.xml delete mode 100644 jackson-modules/jackson-custom-conversions/README.md delete mode 100644 jackson-modules/jackson-custom-conversions/pom.xml delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/File.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/Folder.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderBeanSerializerModifier.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithCallingOwnSerializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithDefaultSerializerStored.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithInternalObjectMapper.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithSerializerProvider.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ActorJackson.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Item.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializerOnClass.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemWithDeserializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Movie.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/User.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/Item.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializerOnClass.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemWithSerializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/User.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Address.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Hidable.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/HidableSerializer.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/MyDtoWithFilter.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Person.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/defaultserializercustomserializer/CallingDefaultSerializerUnitTest.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java delete mode 100644 jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java delete mode 100644 jackson-modules/jackson-exceptions/README.md delete mode 100644 jackson-modules/jackson-exceptions/pom.xml delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/User.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithConflict.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithNoDefaultConstructor.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithPrivateFields.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithRoot.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/Zoo.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/ZooConfigured.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessors.java delete mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessorsAndFieldVisibility.java delete mode 100644 jackson-modules/jackson-exceptions/src/test/java/com/baeldung/exceptions/JacksonExceptionsUnitTest.java delete mode 100644 jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java delete mode 100644 jackson-modules/jackson/README.md delete mode 100644 jackson-modules/jackson/pom.xml delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jacksoninject/Person.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsonanysetter/Inventory.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/Book.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/CustomDateDeserializer.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/domain/Person.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/Event.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceAnnotationStructure.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceMixinOrIntrospection.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdAddedToUser.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUser.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConstructorStructure.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConversionStructure.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoAnnotatedStructure.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoStructure.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJackson.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJacksonSerializer.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/Movie.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/MovieWithNullValue.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/node/JsonNodeIterator.java delete mode 100644 jackson-modules/jackson/src/main/java/com/ossez/jackson/optionalwithjackson/Book.java delete mode 100644 jackson-modules/jackson/src/main/resources/example1.json delete mode 100644 jackson-modules/jackson/src/main/resources/example2.json delete mode 100644 jackson-modules/jackson/src/main/resources/logback.xml delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Address.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/MyDto.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Person.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/User.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/IgnoranceUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUserUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/SubTypeHandlingUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/TypeInfoInclusionUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonDeserializeUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonSerializeUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/jsoncompare/JsonCompareUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/node/ExampleStructure.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/node/JsonNodeIteratorUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeBean.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeOperationUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/optionalwithjackson/OptionalTypeUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/JacksonPrettyPrintUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/SandboxUnitTest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/TestElement.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/test/UnitTestSuite.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/IEntity.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequest.java delete mode 100644 jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequestDeserializer.java delete mode 100644 jackson-modules/jackson/src/test/resources/author-jsonpropertyorder-schema.json delete mode 100644 jackson-modules/jackson/src/test/resources/node_example-1.json delete mode 100644 jackson-modules/jackson/src/test/resources/node_example.json delete mode 100644 jackson-modules/pom.xml delete mode 100644 jackson-simple/README.md delete mode 100644 jackson-simple/pom.xml delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/AliasBean.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCreator.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCustomAnnotation.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithFilter.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithGetter.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithIgnore.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithInject.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/ExtendableBean.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/MyBean.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/PrivateBean.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/RawBean.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/UnwrappedUser.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/UserWithIgnoreType.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/Zoo.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIdentity.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIgnore.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithRef.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIdentity.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIgnore.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithRef.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateDeserializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateSerializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithFormat.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithSerializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/deserialization/ItemDeserializerOnClass.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/Item.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/ItemWithSerializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/User.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/withEnum/DistanceEnumWithValue.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRoot.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRootNamespace.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/ignore/MyMixInForIgnoreType.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Item.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Views.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializerOnClass.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDto.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreField.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreFieldByName.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreNull.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIncludeNonDefault.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithFilter.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithSpecialField.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignore/MyMixInForIgnoreType.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDto.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDtoIgnoreNull.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDto.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDtoFieldNameChanged.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarDeserializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarSerializer.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Car.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Request.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDto.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreType.java delete mode 100644 jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreUnknown.java delete mode 100644 jackson-simple/src/main/resources/logback.xml delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/annotation/JacksonAnnotationUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/ignore/IgnoreFieldsWithFilterUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/ignore/JacksonSerializationIgnoreUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/ignorenullfields/IgnoreNullFieldsUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/jsonproperty/JsonPropertyUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/objectmapper/JavaReadWriteJsonExampleUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/objectmapper/SerializationDeserializationFeatureUnitTest.java delete mode 100644 jackson-simple/src/test/java/com/ossez/jackson/unknownproperties/UnknownPropertiesUnitTest.java delete mode 100644 jackson-simple/src/test/resources/json_car.json delete mode 100644 spring-batch/.gitignore delete mode 100644 spring-batch/README.md delete mode 100644 spring-batch/pom.xml delete mode 100644 spring-batch/repository.sqlite delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/App.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/Application.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/SpringBatchConfig.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/SpringConfig.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/model/Transaction.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/partitioner/CustomMultiResourcePartitioner.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionConfig.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionerApp.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/CustomItemProcessor.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/CustomSkipPolicy.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/MissingUsernameException.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/NegativeAmountException.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/RecordFieldSetMapper.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batch/service/SkippingItemProcessor.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batchscheduler/SpringBatchScheduler.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/batchscheduler/model/Book.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/file2db/BatchConfiguration.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/file2db/JobCompletionNotificationListener.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/file2db/Person.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/file2db/PersonItemProcessor.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineProcessor.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineReader.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LinesWriter.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/ChunksConfig.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/TaskletsConfig.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/model/Line.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesProcessor.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesReader.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesWriter.java delete mode 100644 spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/utils/FileUtils.java delete mode 100644 spring-batch/src/main/resources/books.csv delete mode 100644 spring-batch/src/main/resources/input/partitioner/record1.csv delete mode 100644 spring-batch/src/main/resources/input/partitioner/record2.csv delete mode 100644 spring-batch/src/main/resources/input/partitioner/record3.csv delete mode 100644 spring-batch/src/main/resources/input/partitioner/record4.csv delete mode 100644 spring-batch/src/main/resources/input/partitioner/record5.csv delete mode 100644 spring-batch/src/main/resources/input/record.csv delete mode 100644 spring-batch/src/main/resources/input/recordWithInvalidData.csv delete mode 100644 spring-batch/src/main/resources/logback.xml delete mode 100644 spring-batch/src/main/resources/output/output1.xml delete mode 100644 spring-batch/src/main/resources/output/output2.xml delete mode 100644 spring-batch/src/main/resources/output/output3.xml delete mode 100644 spring-batch/src/main/resources/output/output4.xml delete mode 100644 spring-batch/src/main/resources/output/output5.xml delete mode 100644 spring-batch/src/main/resources/spring-batch-intro.xml delete mode 100644 spring-batch/src/main/resources/spring.xml delete mode 100644 spring-batch/src/main/resources/taskletsvschunks/input/tasklets-vs-chunks.csv delete mode 100644 spring-batch/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-batch/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-batch/src/test/java/org/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java delete mode 100644 spring-batch/src/test/java/org/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java delete mode 100644 spring-batch/src/test/java/org/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-1st/README.md delete mode 100644 spring-boot-modules/spring-boot-1st/pom.xml delete mode 100644 spring-boot-modules/spring-boot-1st/src/main/java/Example.java delete mode 100644 spring-boot-modules/spring-boot-testing/.gitignore delete mode 100644 spring-boot-modules/spring-boot-testing/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-boot-modules/spring-boot-testing/README.md delete mode 100644 spring-boot-modules/spring-boot-testing/mvnw delete mode 100644 spring-boot-modules/spring-boot-testing/mvnw.cmd delete mode 100644 spring-boot-modules/spring-boot-testing/pom.xml delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/Application.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/Credentials.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/CustomCredentialsConverter.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/MailServer.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/PropertyConversion.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfig.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfigFactory.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/HomeController.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/WebController.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisConfiguration.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisProperties.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/User.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepository.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/Employee.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRepository.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRestController.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeService.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeServiceImpl.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationCommandLineRunnerApp.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationRunnerTaskExecutor.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/CommandLineTaskExecutor.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/TaskService.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/resources/application-test.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/resources/application.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/resources/persistence-generic-entity.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/main/resources/property-validation.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/LoadContextTest.groovy delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy alias delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/autoconfig/exclude/ExcludeAutoConfig1IntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/autoconfig/exclude/ExcludeAutoConfig2IntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/autoconfig/exclude/ExcludeAutoConfig3IntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/autoconfig/exclude/ExcludeAutoConfig4IntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/autoconfig/exclude/TestApplication.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/SpringContextTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/autoconfig/AutoConfigIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingPropertiesToBeanMethodsUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingPropertiesToUserDefinedPOJOUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingYMLPropertiesUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/OverridingConfigurationPropertiesUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/PropertyValidationUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/SpringPropertiesConversionUnitTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/TestRedisConfiguration.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepositoryIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeControllerIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRepositoryIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRestControllerIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeServiceImplIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/JsonUtil.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/LoadSpringContextIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestProfileIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestPropertiesIntegrationTest.java delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/application-integrationtest.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/application-test.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/application.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/application.yml delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/logback-test.xml delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/property-validation-test.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/server-config-test.properties delete mode 100644 spring-boot-modules/spring-boot-testing/src/test/resources/spring-conversion-test.properties delete mode 100644 spring-remoting-modules-3/README.md delete mode 100644 spring-remoting-modules-3/pom.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/.gitignore delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/checkstyle-idea.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/compiler.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/encodings.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/jarRepositories.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/jpa-buddy.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/misc.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/uiDesigner.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/.idea/vcs.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/README.md delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/pom.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/pom.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsArtemisClientApplication.java delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsProducer.java delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/controller/MQController.java delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/application.properties delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/test/java/com/ossez/artemis/SpringContextTest.java delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/pom.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/java/com/ossez/artemis/server/JmsArtemisServerApplication.java delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/application.properties delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/test/java/com/ossez/artemis/SpringContextLiveTest.java delete mode 100644 spring-remoting-modules/.idea/.gitignore delete mode 100644 spring-remoting-modules/.idea/checkstyle-idea.xml delete mode 100644 spring-remoting-modules/.idea/compiler.xml delete mode 100644 spring-remoting-modules/.idea/encodings.xml delete mode 100644 spring-remoting-modules/.idea/jarRepositories.xml delete mode 100644 spring-remoting-modules/.idea/jpa-buddy.xml delete mode 100644 spring-remoting-modules/.idea/misc.xml delete mode 100644 spring-remoting-modules/.idea/vcs.xml delete mode 100644 spring-remoting-modules/README.md delete mode 100644 spring-remoting-modules/pom.xml delete mode 100644 spring-remoting-modules/remoting-amqp/README.md delete mode 100644 spring-remoting-modules/remoting-amqp/pom.xml delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-client/pom.xml delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/java/com/baeldung/client/AmqpClient.java delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/application.properties delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-server/pom.xml delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/java/com/baeldung/server/AmqpServer.java delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/application.properties delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/test/java/org/baeldung/SpringContextManualTest.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/README.md delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/pom.xml delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/BurlapClient.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/HessianClient.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/com/baeldung/client/CabBookingServiceIntegrationTest.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/resources/application.properties delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/java/com/baeldung/server/Server.java delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-remoting-modules/remoting-http/README.md delete mode 100644 spring-remoting-modules/remoting-http/pom.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-api/pom.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/Booking.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/BookingException.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/CabBookingService.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-client/pom.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-client/src/main/java/com/baeldug/client/Client.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/pom.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/readme.md delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/Server.java delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-http/remoting-http-server/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-remoting-modules/remoting-jms/README.md delete mode 100644 spring-remoting-modules/remoting-jms/pom.xml delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-client/pom.xml delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/java/com/baeldung/client/JmsClient.java delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/application.properties delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-client/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/pom.xml delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/JmsServer.java delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/application.properties delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java delete mode 100644 spring-remoting-modules/remoting-rmi/README.md delete mode 100644 spring-remoting-modules/remoting-rmi/pom.xml delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-client/pom.xml delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-server/pom.xml delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/resources/logback.xml delete mode 100644 spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-rest-full/.gitignore delete mode 100644 spring-rest-full/README.md delete mode 100644 spring-rest-full/pom.xml delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/IOperations.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/model/Foo.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/model/User.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/spring/Application.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/spring/WebConfig.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/controller/FooController.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/controller/RootController.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/exception/MyResourceNotFoundException.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/IActuatorMetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/ICustomActuatorMetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/IMetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/MetricFilter.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/metric/MetricService.java delete mode 100644 spring-rest-full/src/main/java/org/baeldung/web/util/RestPreconditions.java delete mode 100644 spring-rest-full/src/main/resources/application.properties delete mode 100644 spring-rest-full/src/main/resources/logback.xml delete mode 100644 spring-rest-full/src/main/resources/persistence-h2.properties delete mode 100644 spring-rest-full/src/main/resources/persistence-mysql.properties delete mode 100644 spring-rest-full/src/main/resources/springDataPersistenceConfig.xml delete mode 100644 spring-rest-full/src/main/webapp/WEB-INF/api-servlet.xml delete mode 100644 spring-rest-full/src/main/webapp/WEB-INF/view/graph.jsp delete mode 100644 spring-rest-full/src/main/webapp/WEB-INF/view/homepage.jsp delete mode 100644 spring-rest-full/src/main/webapp/WEB-INF/web.xml delete mode 100644 spring-rest-full/src/test/java/org/baeldung/Consts.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/persistence/service/AbstractServicePersistenceIntegrationTest.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java delete mode 100644 spring-rest-full/src/test/java/org/baeldung/util/IDUtil.java delete mode 100644 spring-rest-full/src/test/resources/.gitignore delete mode 100644 spring-rest-full/src/testFile diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index da9702f9e7..0000000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/jackson-modules/jackson-annotations/README.md b/jackson-modules/jackson-annotations/README.md deleted file mode 100644 index 783a06605b..0000000000 --- a/jackson-modules/jackson-annotations/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Jackson Annotations - -This module contains articles about Jackson annotations. - -### Relevant Articles: -- [Guide to @JsonFormat in Jackson](https://www.baeldung.com/jackson-jsonformat) -- [More Jackson Annotations](https://www.baeldung.com/jackson-advanced-annotations) -- [Jackson – Bidirectional Relationships](https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion) -- [Jackson JSON Views](https://www.baeldung.com/jackson-json-view-annotation) diff --git a/jackson-modules/jackson-annotations/pom.xml b/jackson-modules/jackson-annotations/pom.xml deleted file mode 100644 index 0da73e5791..0000000000 --- a/jackson-modules/jackson-annotations/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - jackson-annotations - 0.0.1-SNAPSHOT - jackson-annotations - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - ${jackson.version} - - - io.rest-assured - json-path - ${rest-assured.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - - - jackson-annotations - - - src/main/resources - true - - - - - - 3.1.1 - - - \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListDeserializer.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListDeserializer.java deleted file mode 100644 index 5e46c0abd5..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListDeserializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomListDeserializer extends StdDeserializer> { - - private static final long serialVersionUID = 1095767961632979804L; - - public CustomListDeserializer() { - this(null); - } - - public CustomListDeserializer(final Class vc) { - super(vc); - } - - @Override - public List deserialize(final JsonParser jsonparser, final DeserializationContext context) throws IOException, JsonProcessingException { - return new ArrayList(); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListSerializer.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListSerializer.java deleted file mode 100644 index 376aba09e3..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/CustomListSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomListSerializer extends StdSerializer> { - - private static final long serialVersionUID = 3698763098000900856L; - - public CustomListSerializer() { - this(null); - } - - public CustomListSerializer(final Class> t) { - super(t); - } - - @Override - public void serialize(final List items, final JsonGenerator generator, final SerializerProvider provider) throws IOException, JsonProcessingException { - final List ids = new ArrayList(); - for (final ItemWithSerializer item : items) { - ids.add(item.id); - } - generator.writeObject(ids); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/Item.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/Item.java deleted file mode 100644 index a3bc3af89d..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/Item.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ossez.jackson.bidirection; - -public class Item { - public int id; - public String itemName; - public User owner; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIdentity.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIdentity.java deleted file mode 100644 index d2ca1392ed..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIdentity.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.bidirection; - -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") -public class ItemWithIdentity { - public int id; - public String itemName; - public UserWithIdentity owner; - - public ItemWithIdentity() { - super(); - } - - public ItemWithIdentity(final int id, final String itemName, final UserWithIdentity owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIgnore.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIgnore.java deleted file mode 100644 index 9cfa9e6056..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithIgnore.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ossez.jackson.bidirection; - -public class ItemWithIgnore { - public int id; - public String itemName; - public UserWithIgnore owner; - - public ItemWithIgnore() { - super(); - } - - public ItemWithIgnore(final int id, final String itemName, final UserWithIgnore owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithRef.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithRef.java deleted file mode 100644 index 5db219f428..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithRef.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.bidirection; - -import com.fasterxml.jackson.annotation.JsonBackReference; - -public class ItemWithRef { - public int id; - public String itemName; - - @JsonBackReference - public UserWithRef owner; - - public ItemWithRef() { - super(); - } - - public ItemWithRef(final int id, final String itemName, final UserWithRef owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithSerializer.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithSerializer.java deleted file mode 100644 index dc889d49e8..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithSerializer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ossez.jackson.bidirection; - -public class ItemWithSerializer { - public int id; - public String itemName; - public UserWithSerializer owner; - - public ItemWithSerializer() { - super(); - } - - public ItemWithSerializer(final int id, final String itemName, final UserWithSerializer owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithView.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithView.java deleted file mode 100644 index c22a765b7c..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/ItemWithView.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ossez.jackson.bidirection; - -import com.ossez.jackson.bidirection.jsonview.Views; - -import com.fasterxml.jackson.annotation.JsonView; - -public class ItemWithView { - @JsonView(Views.Public.class) - public int id; - - @JsonView(Views.Public.class) - public String itemName; - - @JsonView(Views.Public.class) - public UserWithView owner; - - public ItemWithView() { - super(); - } - - public ItemWithView(final int id, final String itemName, final UserWithView owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/User.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/User.java deleted file mode 100644 index 4f7cfadc05..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/User.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -public class User { - public int id; - public String name; - public List userItems; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final Item item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIdentity.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIdentity.java deleted file mode 100644 index 90baaca4db..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIdentity.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") -public class UserWithIdentity { - public int id; - public String name; - public List userItems; - - public UserWithIdentity() { - super(); - } - - public UserWithIdentity(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithIdentity item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIgnore.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIgnore.java deleted file mode 100644 index 19fb6b63fe..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithIgnore.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class UserWithIgnore { - public int id; - public String name; - - @JsonIgnore - public List userItems; - - public UserWithIgnore() { - super(); - } - - public UserWithIgnore(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithIgnore item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithRef.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithRef.java deleted file mode 100644 index 8236103627..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithRef.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonManagedReference; - -public class UserWithRef { - public int id; - public String name; - - @JsonManagedReference - public List userItems; - - public UserWithRef() { - super(); - } - - public UserWithRef(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList<>(); - } - - public void addItem(final ItemWithRef item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithSerializer.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithSerializer.java deleted file mode 100644 index 7b4f2d01d3..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithSerializer.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -public class UserWithSerializer { - public int id; - public String name; - - @JsonSerialize(using = CustomListSerializer.class) - @JsonDeserialize(using = CustomListDeserializer.class) - public List userItems; - - public UserWithSerializer() { - super(); - } - - public UserWithSerializer(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithSerializer item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithView.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithView.java deleted file mode 100644 index d1835e6a4e..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/UserWithView.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.ossez.jackson.bidirection.jsonview.Views; - -import com.fasterxml.jackson.annotation.JsonView; - -public class UserWithView { - @JsonView(Views.Public.class) - public int id; - - @JsonView(Views.Public.class) - public String name; - - @JsonView(Views.Internal.class) - public List userItems; - - public UserWithView() { - super(); - } - - public UserWithView(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithView item) { - userItems.add(item); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/jsonview/Views.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/jsonview/Views.java deleted file mode 100644 index 5f1dea2908..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/bidirection/jsonview/Views.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.ossez.jackson.bidirection.jsonview; - -public class Views { - public static class Public { - } - - public static class Internal extends Public { - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/domain/Person.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/domain/Person.java deleted file mode 100644 index 026d52cfaa..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/domain/Person.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.jackson.domain; - -public class Person { - - private String firstName; - private String lastName; - - public Person(String firstName, String lastName) { - super(); - this.firstName = firstName; - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } -} - diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/format/User.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/format/User.java deleted file mode 100644 index 6a18331273..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/format/User.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ossez.jackson.format; - -import java.util.Date; - -import com.ossez.jackson.domain.Person; -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * @author Jay Sridhar - * @version 1.0 - */ -public class User extends Person { - private String firstName; - private String lastName; - - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ") - private Date createdDate; - - public User(String firstName, String lastName) { - super(firstName, lastName); - this.createdDate = new Date(); - } - - public Date getCreatedDate() { - return createdDate; - } - - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ", locale = "en_GB") - public Date getCurrentDate() { - return new Date(); - } - - @JsonFormat(shape = JsonFormat.Shape.NUMBER) - public Date getDateNum() { - return new Date(); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Item.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Item.java deleted file mode 100644 index 2d9fe2c1c6..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Item.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.jackson.jsonview; - -import com.fasterxml.jackson.annotation.JsonView; - -public class Item { - @JsonView(Views.Public.class) - public int id; - - @JsonView(Views.Public.class) - public String itemName; - - @JsonView(Views.Internal.class) - public String ownerName; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final String ownerName) { - this.id = id; - this.itemName = itemName; - this.ownerName = ownerName; - } - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public String getOwnerName() { - return ownerName; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/MyBeanSerializerModifier.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/MyBeanSerializerModifier.java deleted file mode 100644 index 5dd24a7790..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/MyBeanSerializerModifier.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ossez.jackson.jsonview; - -import java.util.List; - -import com.fasterxml.jackson.databind.BeanDescription; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; -import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; - -public class MyBeanSerializerModifier extends BeanSerializerModifier { - - @Override - public List changeProperties(final SerializationConfig config, final BeanDescription beanDesc, final List beanProperties) { - for (int i = 0; i < beanProperties.size(); i++) { - final BeanPropertyWriter beanPropertyWriter = beanProperties.get(i); - if (beanPropertyWriter.getName() == "name") { - beanProperties.set(i, new UpperCasingWriter(beanPropertyWriter)); - } - } - return beanProperties; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/UpperCasingWriter.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/UpperCasingWriter.java deleted file mode 100644 index 95dc39bc46..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/UpperCasingWriter.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.jsonview; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; - -public class UpperCasingWriter extends BeanPropertyWriter { - final BeanPropertyWriter _writer; - - public UpperCasingWriter(final BeanPropertyWriter w) { - super(w); - _writer = w; - } - - @Override - public void serializeAsField(final Object bean, final JsonGenerator gen, final SerializerProvider prov) throws Exception { - String value = ((User) bean).name; - value = (value == null) ? "" : value.toUpperCase(); - gen.writeStringField("name", value); - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/User.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/User.java deleted file mode 100644 index 2f602c8e1b..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/User.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ossez.jackson.jsonview; - -import com.fasterxml.jackson.annotation.JsonView; - -public class User { - public int id; - - @JsonView(Views.Public.class) - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Views.java b/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Views.java deleted file mode 100644 index 26e3c91a66..0000000000 --- a/jackson-modules/jackson-annotations/src/main/java/com/ossez/jackson/jsonview/Views.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.ossez.jackson.jsonview; - -public class Views { - public static class Public { - } - - public static class Internal extends Public { - } -} diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AdvancedAnnotationsUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AdvancedAnnotationsUnitTest.java deleted file mode 100644 index f610d69724..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AdvancedAnnotationsUnitTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import org.junit.Test; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import com.ossez.jackson.advancedannotations.AppendBeans.BeanWithAppend; -import com.ossez.jackson.advancedannotations.AppendBeans.BeanWithoutAppend; -import com.ossez.jackson.advancedannotations.IdentityReferenceBeans.BeanWithIdentityReference; -import com.ossez.jackson.advancedannotations.IdentityReferenceBeans.BeanWithoutIdentityReference; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.module.jsonSchema.JsonSchema; -import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper; - -public class AdvancedAnnotationsUnitTest { - @Test - public void whenNotUsingJsonIdentityReferenceAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - BeanWithoutIdentityReference bean = new BeanWithoutIdentityReference(1, "Bean Without Identity Reference Annotation"); - String jsonString = mapper.writeValueAsString(bean); - - assertThat(jsonString, containsString("Bean Without Identity Reference Annotation")); - } - - @Test - public void whenUsingJsonIdentityReferenceAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - BeanWithIdentityReference bean = new BeanWithIdentityReference(1, "Bean With Identity Reference Annotation"); - String jsonString = mapper.writeValueAsString(bean); - - assertEquals("1", jsonString); - } - - @Test - public void whenNotUsingJsonAppendAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - - BeanWithoutAppend bean = new BeanWithoutAppend(2, "Bean Without Append Annotation"); - ObjectWriter writer = mapper.writerFor(BeanWithoutAppend.class) - .withAttribute("version", "1.0"); - String jsonString = writer.writeValueAsString(bean); - - assertThat(jsonString, not(containsString("version"))); - assertThat(jsonString, not(containsString("1.0"))); - } - - @Test - public void whenUsingJsonAppendAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - - BeanWithAppend bean = new BeanWithAppend(2, "Bean With Append Annotation"); - ObjectWriter writer = mapper.writerFor(BeanWithAppend.class) - .withAttribute("version", "1.0"); - String jsonString = writer.writeValueAsString(bean); - - assertThat(jsonString, containsString("version")); - assertThat(jsonString, containsString("1.0")); - } - - @Test - public void whenUsingJsonNamingAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - NamingBean bean = new NamingBean(3, "Naming Bean"); - String jsonString = mapper.writeValueAsString(bean); - - assertThat(jsonString, containsString("bean_name")); - } - - @Test - public void whenUsingJsonPropertyDescriptionAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - SchemaFactoryWrapper wrapper = new SchemaFactoryWrapper(); - mapper.acceptJsonFormatVisitor(PropertyDescriptionBean.class, wrapper); - JsonSchema jsonSchema = wrapper.finalSchema(); - String jsonString = mapper.writeValueAsString(jsonSchema); - System.out.println(jsonString); - assertThat(jsonString, containsString("This is a description of the name property")); - } - - @Test - public void whenUsingJsonPOJOBuilderAnnotation_thenCorrect() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - String jsonString = "{\"id\":5,\"name\":\"POJO Builder Bean\"}"; - POJOBuilderBean bean = mapper.readValue(jsonString, POJOBuilderBean.class); - - assertEquals(5, bean.getIdentity()); - assertEquals("POJO Builder Bean", bean.getBeanName()); - } - - @Test - public void whenUsingJsonTypeIdAnnotation_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(DefaultTyping.NON_FINAL); - TypeIdBean bean = new TypeIdBean(6, "Type Id Bean"); - String jsonString = mapper.writeValueAsString(bean); - - assertThat(jsonString, containsString("Type Id Bean")); - } - - @Test - public void whenUsingJsonTypeIdResolverAnnotation_thenCorrect() throws IOException { - TypeIdResolverStructure.FirstBean bean1 = new TypeIdResolverStructure.FirstBean(1, "Bean 1"); - TypeIdResolverStructure.LastBean bean2 = new TypeIdResolverStructure.LastBean(2, "Bean 2"); - - List beans = new ArrayList<>(); - beans.add(bean1); - beans.add(bean2); - - TypeIdResolverStructure.BeanContainer serializedContainer = new TypeIdResolverStructure.BeanContainer(); - serializedContainer.setBeans(beans); - - ObjectMapper mapper = new ObjectMapper(); - String jsonString = mapper.writeValueAsString(serializedContainer); - assertThat(jsonString, containsString("bean1")); - assertThat(jsonString, containsString("bean2")); - - TypeIdResolverStructure.BeanContainer deserializedContainer = mapper.readValue(jsonString, TypeIdResolverStructure.BeanContainer.class); - List beanList = deserializedContainer.getBeans(); - assertThat(beanList.get(0), instanceOf(TypeIdResolverStructure.FirstBean.class)); - assertThat(beanList.get(1), instanceOf(TypeIdResolverStructure.LastBean.class)); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AppendBeans.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AppendBeans.java deleted file mode 100644 index 6f28dbe42b..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/AppendBeans.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.databind.annotation.JsonAppend; - -public class AppendBeans { - public static class BeanWithoutAppend { - private int id; - private String name; - - public BeanWithoutAppend(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @JsonAppend(attrs = { @JsonAppend.Attr(value = "version") }) - public static class BeanWithAppend { - private int id; - private String name; - - public BeanWithAppend(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/IdentityReferenceBeans.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/IdentityReferenceBeans.java deleted file mode 100644 index a825b7c19c..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/IdentityReferenceBeans.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.JsonIdentityReference; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - -public class IdentityReferenceBeans { - @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") - public static class BeanWithoutIdentityReference { - private int id; - private String name; - - public BeanWithoutIdentityReference(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") - @JsonIdentityReference(alwaysAsId = true) - public static class BeanWithIdentityReference { - private int id; - private String name; - - public BeanWithIdentityReference(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/NamingBean.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/NamingBean.java deleted file mode 100644 index 93b84b1c2a..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/NamingBean.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; - -@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) -public class NamingBean { - private int id; - private String beanName; - - public NamingBean(int id, String beanName) { - this.id = id; - this.beanName = beanName; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getBeanName() { - return beanName; - } - - public void setBeanName(String beanName) { - this.beanName = beanName; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/POJOBuilderBean.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/POJOBuilderBean.java deleted file mode 100644 index 682917edc5..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/POJOBuilderBean.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; - -@JsonDeserialize(builder = POJOBuilderBean.BeanBuilder.class) -public class POJOBuilderBean { - private int identity; - private String beanName; - - @JsonPOJOBuilder(buildMethodName = "createBean", withPrefix = "construct") - public static class BeanBuilder { - private int idValue; - private String nameValue; - - public BeanBuilder constructId(int id) { - idValue = id; - return this; - } - - public BeanBuilder constructName(String name) { - nameValue = name; - return this; - } - - public POJOBuilderBean createBean() { - return new POJOBuilderBean(idValue, nameValue); - } - } - - public POJOBuilderBean(int identity, String beanName) { - this.identity = identity; - this.beanName = beanName; - } - - public int getIdentity() { - return identity; - } - - public void setIdentity(int identity) { - this.identity = identity; - } - - public String getBeanName() { - return beanName; - } - - public void setBeanName(String beanName) { - this.beanName = beanName; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/PropertyDescriptionBean.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/PropertyDescriptionBean.java deleted file mode 100644 index b9178a2777..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/PropertyDescriptionBean.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.annotation.JsonPropertyDescription; - -public class PropertyDescriptionBean { - private int id; - @JsonPropertyDescription("This is a description of the name property") - private String name; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdBean.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdBean.java deleted file mode 100644 index 532941c551..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdBean.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import com.fasterxml.jackson.annotation.JsonTypeId; - -public class TypeIdBean { - private int id; - @JsonTypeId - private String name; - - public TypeIdBean(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdResolverStructure.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdResolverStructure.java deleted file mode 100644 index eb65f1df70..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/advancedannotations/TypeIdResolverStructure.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.ossez.jackson.advancedannotations; - -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; -import com.fasterxml.jackson.databind.DatabindContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver; -import com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase; - -public class TypeIdResolverStructure { - public static class BeanContainer { - private List beans; - - public List getBeans() { - return beans; - } - - public void setBeans(List beans) { - this.beans = beans; - } - } - - @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type") - @JsonTypeIdResolver(BeanIdResolver.class) - public static class AbstractBean { - private int id; - - protected AbstractBean() { - } - - protected AbstractBean(int id) { - this.id = id; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - } - - public static class FirstBean extends AbstractBean { - String firstName; - - public FirstBean() { - } - - public FirstBean(int id, String name) { - super(id); - setFirstName(name); - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String name) { - firstName = name; - } - } - - public static class LastBean extends AbstractBean { - String lastName; - - public LastBean() { - } - - public LastBean(int id, String name) { - super(id); - setLastName(name); - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String name) { - lastName = name; - } - } - - public static class BeanIdResolver extends TypeIdResolverBase { - private JavaType superType; - - @Override - public void init(JavaType baseType) { - superType = baseType; - } - - @Override - public Id getMechanism() { - return Id.NAME; - } - - @Override - public String idFromValue(Object obj) { - return idFromValueAndType(obj, obj.getClass()); - } - - @Override - public String idFromValueAndType(Object obj, Class subType) { - String typeId = null; - switch (subType.getSimpleName()) { - case "FirstBean": - typeId = "bean1"; - break; - case "LastBean": - typeId = "bean2"; - } - return typeId; - } - - @Override - public JavaType typeFromId(DatabindContext context, String id) { - Class subType = null; - switch (id) { - case "bean1": - subType = FirstBean.class; - break; - case "bean2": - subType = LastBean.class; - } - return context.constructSpecializedType(superType, subType); - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/bidirection/JacksonBidirectionRelationUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/bidirection/JacksonBidirectionRelationUnitTest.java deleted file mode 100644 index b04ac4da9d..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/bidirection/JacksonBidirectionRelationUnitTest.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.ossez.jackson.bidirection; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import com.ossez.jackson.bidirection.jsonview.Views; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonBidirectionRelationUnitTest { - - @Test (expected = JsonMappingException.class) - public void givenBidirectionRelation_whenSerializing_thenException() throws JsonProcessingException { - final User user = new User(1, "John"); - final Item item = new Item(2, "book", user); - user.addItem(item); - - new ObjectMapper().writeValueAsString(item); - } - - @Test - public void givenBidirectionRelation_whenUsingJacksonReferenceAnnotationWithSerialization_thenCorrect() throws JsonProcessingException { - final UserWithRef user = new UserWithRef(1, "John"); - final ItemWithRef item = new ItemWithRef(2, "book", user); - user.addItem(item); - - final String itemJson = new ObjectMapper().writeValueAsString(item); - final String userJson = new ObjectMapper().writeValueAsString(user); - - assertThat(itemJson, containsString("book")); - assertThat(itemJson, not(containsString("John"))); - - assertThat(userJson, containsString("John")); - assertThat(userJson, containsString("userItems")); - assertThat(userJson, containsString("book")); - } - - @Test - public void givenBidirectionRelation_whenUsingJacksonReferenceAnnotationWithDeserialization_thenCorrect() throws JsonProcessingException { - final UserWithRef user = new UserWithRef(1, "John"); - final ItemWithRef item = new ItemWithRef(2, "book", user); - user.addItem(item); - - final String itemJson = new ObjectMapper().writeValueAsString(item); - final String userJson = new ObjectMapper().writeValueAsString(user); - - final ItemWithRef itemRead = new ObjectMapper().readValue(itemJson, ItemWithRef.class); - final UserWithRef userRead = new ObjectMapper().readValue(userJson, UserWithRef.class); - - assertThat(itemRead.itemName, is("book")); - assertThat(itemRead.owner, nullValue()); - - assertThat(userRead.name, is("John")); - assertThat(userRead.userItems.get(0).itemName, is("book")); - } - - @Test - public void givenBidirectionRelation_whenUsingJsonIdentityInfo_thenCorrect() throws JsonProcessingException { - final UserWithIdentity user = new UserWithIdentity(1, "John"); - final ItemWithIdentity item = new ItemWithIdentity(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, containsString("userItems")); - } - - @Test - public void givenBidirectionRelation_whenUsingJsonIgnore_thenCorrect() throws JsonProcessingException { - final UserWithIgnore user = new UserWithIgnore(1, "John"); - final ItemWithIgnore item = new ItemWithIgnore(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, not(containsString("userItems"))); - } - - @Test - public void givenBidirectionRelation_whenUsingCustomSerializer_thenCorrect() throws JsonProcessingException { - final UserWithSerializer user = new UserWithSerializer(1, "John"); - final ItemWithSerializer item = new ItemWithSerializer(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, containsString("userItems")); - } - - @Test - public void givenBidirectionRelation_whenDeserializingUsingIdentity_thenCorrect() throws JsonProcessingException, IOException { - final String json = "{\"id\":2,\"itemName\":\"book\",\"owner\":{\"id\":1,\"name\":\"John\",\"userItems\":[2]}}"; - - final ItemWithIdentity item = new ObjectMapper().readerFor(ItemWithIdentity.class) - .readValue(json); - - assertEquals(2, item.id); - assertEquals("book", item.itemName); - assertEquals("John", item.owner.name); - } - - @Test - public void givenBidirectionRelation_whenUsingCustomDeserializer_thenCorrect() throws JsonProcessingException, IOException { - final String json = "{\"id\":2,\"itemName\":\"book\",\"owner\":{\"id\":1,\"name\":\"John\",\"userItems\":[2]}}"; - - final ItemWithSerializer item = new ObjectMapper().readerFor(ItemWithSerializer.class) - .readValue(json); - assertEquals(2, item.id); - assertEquals("book", item.itemName); - assertEquals("John", item.owner.name); - } - - @Test - public void givenBidirectionRelation_whenUsingPublicJsonView_thenCorrect() throws JsonProcessingException { - final UserWithView user = new UserWithView(1, "John"); - final ItemWithView item = new ItemWithView(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writerWithView(Views.Public.class) - .writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, not(containsString("userItems"))); - } - - @Test(expected = JsonMappingException.class) - public void givenBidirectionRelation_whenUsingInternalJsonView_thenException() throws JsonProcessingException { - final UserWithView user = new UserWithView(1, "John"); - final ItemWithView item = new ItemWithView(2, "book", user); - user.addItem(item); - - new ObjectMapper().writerWithView(Views.Internal.class) - .writeValueAsString(item); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/format/JsonFormatUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/format/JsonFormatUnitTest.java deleted file mode 100644 index 5771df25f7..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/format/JsonFormatUnitTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ossez.jackson.format; - -import java.util.Date; - -import com.fasterxml.jackson.core.JsonProcessingException; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import org.junit.Test; - -import static io.restassured.path.json.JsonPath.from; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.data.Percentage.withPercentage; - -/** - * @author Jay Sridhar - * @version 1.0 - */ -public class JsonFormatUnitTest { - - @Test - public void whenSerializedDateFormat_thenCorrect() throws JsonProcessingException { - - User user = new User("Jay", "Sridhar"); - - String result = new ObjectMapper().writeValueAsString(user); - - // Expected to match: "2016-12-19@09:34:42.628+0000" - assertThat(from(result).getString("createdDate")).matches("\\d{4}\\-\\d{2}\\-\\d{2}@\\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\+\\d{4}"); - - // Expected to be close to current time - long now = new Date().getTime(); - assertThat(from(result).getLong("dateNum")).isCloseTo(now, withPercentage(10.0)); - - } -} diff --git a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/jsonview/JacksonJsonViewUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/jsonview/JacksonJsonViewUnitTest.java deleted file mode 100644 index e658982009..0000000000 --- a/jackson-modules/jackson-annotations/src/test/java/com/ossez/jackson/jsonview/JacksonJsonViewUnitTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.ossez.jackson.jsonview; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.MapperFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; -import com.fasterxml.jackson.databind.ser.SerializerFactory; - -public class JacksonJsonViewUnitTest { - - @Test - public void whenUseJsonViewToSerialize_thenCorrect() throws JsonProcessingException { - final User user = new User(1, "John"); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION); - - final String result = mapper.writerWithView(Views.Public.class) - .writeValueAsString(user); - - assertThat(result, containsString("John")); - assertThat(result, not(containsString("1"))); - } - - @Test - public void whenUsePublicView_thenOnlyPublicSerialized() throws JsonProcessingException { - final Item item = new Item(2, "book", "John"); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writerWithView(Views.Public.class) - .writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("2")); - - assertThat(result, not(containsString("John"))); - } - - @Test - public void whenUseInternalView_thenAllSerialized() throws JsonProcessingException { - final Item item = new Item(2, "book", "John"); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writerWithView(Views.Internal.class) - .writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("2")); - - assertThat(result, containsString("John")); - } - - @Test - public void whenUseJsonViewToDeserialize_thenCorrect() throws IOException { - final String json = "{\"id\":1,\"name\":\"John\"}"; - - final ObjectMapper mapper = new ObjectMapper(); - - final User user = mapper.readerWithView(Views.Public.class) - .forType(User.class) - .readValue(json); - assertEquals(1, user.getId()); - assertEquals("John", user.getName()); - } - - @Test - public void whenUseCustomJsonViewToSerialize_thenCorrect() throws JsonProcessingException { - final User user = new User(1, "John"); - final SerializerFactory serializerFactory = BeanSerializerFactory.instance.withSerializerModifier(new MyBeanSerializerModifier()); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializerFactory(serializerFactory); - - final String result = mapper.writerWithView(Views.Public.class) - .writeValueAsString(user); - assertThat(result, containsString("JOHN")); - assertThat(result, containsString("1")); - } -} diff --git a/jackson-modules/jackson-conversions-2/README.md b/jackson-modules/jackson-conversions-2/README.md deleted file mode 100644 index ca81512fa3..0000000000 --- a/jackson-modules/jackson-conversions-2/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## Jackson 转换 - -本模块中包含有关 Jackson 转换(Jackson conversions)有关的文章。 - -### 相关文章: -- [Mapping a Dynamic JSON Object with Jackson](https://www.baeldung.com/jackson-mapping-dynamic-object) -- [Mapping Multiple JSON Fields to a Single Java Field](https://www.baeldung.com/json-multiple-fields-single-java-field) -- [Convert XML to JSON Using Jackson](https://www.baeldung.com/jackson-convert-xml-json) -- [Converting JSON to CSV in Java](https://www.baeldung.com/java-converting-json-to-csv) -- [How to Process YAML with Jackson](https://www.baeldung.com/jackson-yaml) -- [Jackson Streaming API](https://www.baeldung.com/jackson-streaming-api) -- [Jackson: java.util.LinkedHashMap cannot be cast to X](https://www.baeldung.com/jackson-linkedhashmap-cannot-be-cast) -- More articles: [[<-- prev]](../jackson-conversions) diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml deleted file mode 100644 index 58de10fbd9..0000000000 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - jackson-conversions-2 - 0.0.1-SNAPSHOT - jackson-conversions-2 - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${jackson.version} - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson-datatype.version} - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-csv - ${jackson.version} - - - org.assertj - assertj-core - ${assertj.version} - test - - - - - jackson-conversions-2 - - - src/main/resources - true - - - - - - 2.9.8 - - - \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/JsonCsvConverter.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/JsonCsvConverter.java deleted file mode 100644 index b907b9301f..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/JsonCsvConverter.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ossez.jackson.csv; - -import java.io.File; -import java.io.IOException; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.MappingIterator; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.dataformat.csv.CsvMapper; -import com.fasterxml.jackson.dataformat.csv.CsvSchema; -import com.fasterxml.jackson.dataformat.csv.CsvSchema.Builder; - -public class JsonCsvConverter { - - public static void JsonToCsv(File jsonFile, File csvFile) throws IOException { - JsonNode jsonTree = new ObjectMapper().readTree(jsonFile); - - Builder csvSchemaBuilder = CsvSchema.builder(); - JsonNode firstObject = jsonTree.elements().next(); - firstObject.fieldNames().forEachRemaining(fieldName -> {csvSchemaBuilder.addColumn(fieldName);} ); - CsvSchema csvSchema = csvSchemaBuilder - .build() - .withHeader(); - - CsvMapper csvMapper = new CsvMapper(); - csvMapper.writerFor(JsonNode.class) - .with(csvSchema) - .writeValue(csvFile, jsonTree); - } - - public static void csvToJson(File csvFile, File jsonFile) throws IOException { - CsvSchema orderLineSchema = CsvSchema.emptySchema().withHeader(); - CsvMapper csvMapper = new CsvMapper(); - MappingIterator orderLines = csvMapper.readerFor(OrderLine.class) - .with(orderLineSchema) - .readValues(csvFile); - - new ObjectMapper() - .configure(SerializationFeature.INDENT_OUTPUT, true) - .writeValue(jsonFile, orderLines.readAll()); - } - - public static void JsonToFormattedCsv(File jsonFile, File csvFile) throws IOException { - CsvMapper csvMapper = new CsvMapper(); - CsvSchema csvSchema = csvMapper - .schemaFor(OrderLineForCsv.class) - .withHeader(); - csvMapper.addMixIn(OrderLine.class, OrderLineForCsv.class); - - OrderLine[] orderLines = new ObjectMapper() - .readValue(jsonFile, OrderLine[].class); - csvMapper.writerFor(OrderLine[].class) - .with(csvSchema) - .writeValue(csvFile, orderLines); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLine.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLine.java deleted file mode 100644 index 7c028aa70c..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLine.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ossez.jackson.csv; - -import java.math.BigDecimal; - -public class OrderLine { - private String item; - private int quantity; - private BigDecimal unitPrice; - - public OrderLine() { - - } - - public OrderLine(String item, int quantity, BigDecimal unitPrice) { - super(); - this.item = item; - this.quantity = quantity; - this.unitPrice = unitPrice; - } - - public String getItem() { - return item; - } - - public void setItem(String item) { - this.item = item; - } - - public int getQuantity() { - return quantity; - } - - public void setQuantity(int quantity) { - this.quantity = quantity; - } - - public BigDecimal getUnitPrice() { - return unitPrice; - } - - public void setUnitPrice(BigDecimal unitPrice) { - this.unitPrice = unitPrice; - } - - @Override - public String toString() { - return "OrderLine [item=" + item + ", quantity=" + quantity + ", unitPrice=" + unitPrice + "]"; - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLineForCsv.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLineForCsv.java deleted file mode 100644 index 7e89d12a1c..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/csv/OrderLineForCsv.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.csv; - -import java.math.BigDecimal; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@JsonPropertyOrder({ - "count", - "name" -}) -public abstract class OrderLineForCsv { - - @JsonProperty("name") - private String item; - - @JsonProperty("count") - private int quantity; - - @JsonIgnore - private BigDecimal unitPrice; - - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/Product.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/Product.java deleted file mode 100644 index 2b1b5b995e..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/Product.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.ossez.jackson.dynamicobject; - -import java.util.LinkedHashMap; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonAnySetter; - -public class Product { - - private String name; - private String category; - private Map details = new LinkedHashMap<>(); - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public Map getDetails() { - return details; - } - - @JsonAnySetter - public void setDetail(String key, Object value) { - details.put(key, value); - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductJsonNode.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductJsonNode.java deleted file mode 100644 index 5c399a8411..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductJsonNode.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ossez.jackson.dynamicobject; - -import com.fasterxml.jackson.databind.JsonNode; - -public class ProductJsonNode { - - private String name; - private String category; - private JsonNode details; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public JsonNode getDetails() { - return details; - } - - public void setDetails(JsonNode details) { - this.details = details; - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductMap.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductMap.java deleted file mode 100644 index 290bb50ef6..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/dynamicobject/ProductMap.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ossez.jackson.dynamicobject; - -import java.util.Map; - -public class ProductMap { - - private String name; - private String category; - private Map details; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public Map getDetails() { - return details; - } - - public void setDetails(Map details) { - this.details = details; - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/multiplefields/Weather.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/multiplefields/Weather.java deleted file mode 100644 index 45d0322bfa..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/multiplefields/Weather.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.ossez.jackson.multiplefields; - -import com.fasterxml.jackson.annotation.JsonAlias; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class Weather { - - @JsonProperty("location") - @JsonAlias("place") - private String location; - - @JsonProperty("temp") - @JsonAlias("temperature") - private int temp; - - @JsonProperty("outlook") - @JsonAlias("weather") - private String outlook; - - public String getLocation() { - return location; - } - - public void setLocation(String location) { - this.location = location; - } - - public int getTemp() { - return temp; - } - - public void setTemp(int temp) { - this.temp = temp; - } - - public String getOutlook() { - return outlook; - } - - public void setOutlook(String outlook) { - this.outlook = outlook; - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/Book.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/Book.java deleted file mode 100644 index 9f0dd4db28..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/Book.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.ossez.jackson.tocollection; - - -import java.util.Objects; - -public class Book { - private Integer bookId; - private String title; - private String author; - - public Book() {} - - public Book(Integer bookId, String title, String author) { - this.bookId = bookId; - this.title = title; - this.author = author; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof Book)) { - return false; - } - - Book book = (Book) o; - - if (!Objects.equals(bookId, book.bookId)) { - return false; - } - if (!Objects.equals(title, book.title)) { - return false; - } - return Objects.equals(author, book.author); - } - - @Override - public int hashCode() { - int result = bookId != null ? bookId.hashCode() : 0; - result = 31 * result + (title != null ? title.hashCode() : 0); - result = 31 * result + (author != null ? author.hashCode() : 0); - return result; - } - - public Integer getBookId() { - return bookId; - } - - public void setBookId(Integer bookId) { - this.bookId = bookId; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/JsonToCollectionUtil.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/JsonToCollectionUtil.java deleted file mode 100644 index f60a3cde5a..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/tocollection/JsonToCollectionUtil.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ossez.jackson.tocollection; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.CollectionType; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public class JsonToCollectionUtil { - - private JsonToCollectionUtil(){} - - public static List jsonArrayToList(String json, Class elementClass) throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, elementClass); - return objectMapper.readValue(json, listType); - } - - public static List jsonArrayToList2(String json, Class elementClass) throws IOException { - return new ObjectMapper().readValue(json, new TypeReference>() {}); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Color.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Color.java deleted file mode 100644 index da3c3fa590..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Color.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ossez.jackson.xmlToJson; - -public enum Color { - PINK, BLUE, YELLOW, RED; -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Flower.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Flower.java deleted file mode 100644 index 8963c52c27..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/xmlToJson/Flower.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ossez.jackson.xmlToJson; - -public class Flower { - - private String name; - - private Color color; - - private Integer petals; - - public Flower() { } - - public Flower(String name, Color color, Integer petals) { - this.name = name; - this.color = color; - this.petals = petals; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Color getColor() { - return color; - } - - public void setColor(Color color) { - this.color = color; - } - - public Integer getPetals() { - return petals; - } - - public void setPetals(Integer petals) { - this.petals = petals; - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/Order.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/Order.java deleted file mode 100644 index b9739544e9..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/Order.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.ossez.jackson.yaml; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -public class Order { - private String orderNo; - private LocalDate date; - private String customerName; - private List orderLines; - - public Order() { - - } - - public Order(String orderNo, LocalDate date, String customerName, List orderLines) { - super(); - this.orderNo = orderNo; - this.date = date; - this.customerName = customerName; - this.orderLines = orderLines; - } - - public String getOrderNo() { - return orderNo; - } - - public void setOrderNo(String orderNo) { - this.orderNo = orderNo; - } - - public LocalDate getDate() { - return date; - } - - public void setDate(LocalDate date) { - this.date = date; - } - - public String getCustomerName() { - return customerName; - } - - public void setCustomerName(String customerName) { - this.customerName = customerName; - } - - public List getOrderLines() { - if (orderLines == null) { - orderLines = new ArrayList<>(); - } - return orderLines; - } - - public void setOrderLines(List orderLines) { - if (orderLines == null) { - orderLines = new ArrayList<>(); - } - this.orderLines = orderLines; - } - - @Override - public String toString() { - return "Order [orderNo=" + orderNo + ", date=" + date + ", customerName=" + customerName + ", orderLines=" + orderLines + "]"; - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/OrderLine.java b/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/OrderLine.java deleted file mode 100644 index c30a5fd120..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/ossez/jackson/yaml/OrderLine.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ossez.jackson.yaml; - -import java.math.BigDecimal; - -public class OrderLine { - private String item; - private int quantity; - private BigDecimal unitPrice; - - public OrderLine() { - - } - - public OrderLine(String item, int quantity, BigDecimal unitPrice) { - super(); - this.item = item; - this.quantity = quantity; - this.unitPrice = unitPrice; - } - - public String getItem() { - return item; - } - - public void setItem(String item) { - this.item = item; - } - - public int getQuantity() { - return quantity; - } - - public void setQuantity(int quantity) { - this.quantity = quantity; - } - - public BigDecimal getUnitPrice() { - return unitPrice; - } - - public void setUnitPrice(BigDecimal unitPrice) { - this.unitPrice = unitPrice; - } - - @Override - public String toString() { - return "OrderLine [item=" + item + ", quantity=" + quantity + ", unitPrice=" + unitPrice + "]"; - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.csv b/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.csv deleted file mode 100644 index e15e12f2bf..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.csv +++ /dev/null @@ -1,3 +0,0 @@ -item,quantity,unitPrice -"No. 9 Sprockets",12,1.23 -"Widget (10mm)",4,3.45 diff --git a/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.json b/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.json deleted file mode 100644 index 64f18e1673..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/resources/csv/orderLines.json +++ /dev/null @@ -1,9 +0,0 @@ -[ { - "item" : "No. 9 Sprockets", - "quantity" : 12, - "unitPrice" : 1.23 -}, { - "item" : "Widget (10mm)", - "quantity" : 4, - "unitPrice" : 3.45 -} ] \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.json b/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.json deleted file mode 100644 index 6daf426736..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.json +++ /dev/null @@ -1,13 +0,0 @@ -[ { - "bookId" : 1, - "title" : "A Song of Ice and Fire", - "author" : "George R. R. Martin" -}, { - "bookId" : 2, - "title" : "The Hitchhiker's Guide to the Galaxy", - "author" : "Douglas Adams" -}, { - "bookId" : 3, - "title" : "Hackers And Painters", - "author" : "Paul Graham" -} ] diff --git a/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.xml b/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.xml deleted file mode 100644 index b2f951315b..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/resources/to-java-collection/books.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - 1 - A Song of Ice and Fire - George R. R. Martin - - - 2 - The Hitchhiker's Guide to the Galaxy - Douglas Adams - - - 3 - Hackers And Painters - Paul Graham - - diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/csv/CsvUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/csv/CsvUnitTest.java deleted file mode 100644 index 31f49da723..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/csv/CsvUnitTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.ossez.jackson.csv; - -import static org.junit.Assert.assertEquals; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.List; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.google.common.io.Files; - -public class CsvUnitTest { - - private File csvFromJson; - private File jsonFromCsv; - private File formattedCsvFromJson; - - @Before - public void setup() { - csvFromJson = new File("src/main/resources/csv/csvFromJson.csv"); - jsonFromCsv = new File("src/main/resources/csv/jsonFromCsv.json"); - formattedCsvFromJson = new File("src/main/resources/csv/formattedCsvFromJson.csv"); - } - - @After - public void cleanup() { - csvFromJson.deleteOnExit(); - jsonFromCsv.deleteOnExit(); - formattedCsvFromJson.deleteOnExit(); - } - - @Test - public void givenJsonInput_thenWriteCsv() throws JsonParseException, JsonMappingException, IOException { - JsonCsvConverter.JsonToCsv(new File("src/main/resources/csv/orderLines.json"), csvFromJson); - - assertEquals(readFile(csvFromJson.getAbsolutePath()), readFile("src/test/resources/csv/expectedCsvFromJson.csv")); - } - - @Test - public void givenCsvInput_thenWritesJson() throws JsonParseException, JsonMappingException, IOException { - JsonCsvConverter.csvToJson(new File("src/main/resources/csv/orderLines.csv"), jsonFromCsv); - - assertEquals(readFile(jsonFromCsv.getAbsolutePath()), readFile("src/test/resources/csv/expectedJsonFromCsv.json")); - - } - - @Test - public void givenJsonInput_thenWriteFormattedCsvOutput() throws JsonParseException, JsonMappingException, IOException { - JsonCsvConverter.JsonToFormattedCsv(new File("src/main/resources/csv/orderLines.json"), formattedCsvFromJson); - - assertEquals(readFile(formattedCsvFromJson.getAbsolutePath()), readFile("src/test/resources/csv/expectedFormattedCsvFromJson.csv")); - - } - - private List readFile(String filename) throws IOException { - return Files.readLines(new File(filename), Charset.forName("utf-8")); - } - -}; \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/dynamicobject/DynamicObjectDeserializationUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/dynamicobject/DynamicObjectDeserializationUnitTest.java deleted file mode 100644 index f037bb398f..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/dynamicobject/DynamicObjectDeserializationUnitTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ossez.jackson.dynamicobject; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.IOException; -import java.util.Scanner; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class DynamicObjectDeserializationUnitTest { - - private ObjectMapper objectMapper; - - @BeforeEach - void setup() { - objectMapper = new ObjectMapper(); - } - - private String readResource(String path) { - try (Scanner scanner = new Scanner(getClass().getResourceAsStream(path), "UTF-8")) { - return scanner.useDelimiter("\\A").next(); - } - } - - @Test - void givenJsonString_whenParsingToJsonNode_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException { - // given - String json = readResource("/deserialize-dynamic-object/embedded.json"); - - // when - ProductJsonNode product = objectMapper.readValue(json, ProductJsonNode.class); - - // then - assertThat(product.getName()).isEqualTo("Pear yPhone 72"); - assertThat(product.getDetails().get("audioConnector").asText()).isEqualTo("none"); - } - - @Test - void givenJsonString_whenParsingToMap_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException { - // given - String json = readResource("/deserialize-dynamic-object/embedded.json"); - - // when - ProductMap product = objectMapper.readValue(json, ProductMap.class); - - // then - assertThat(product.getName()).isEqualTo("Pear yPhone 72"); - assertThat(product.getDetails().get("audioConnector")).isEqualTo("none"); - } - - @Test - void givenJsonString_whenParsingWithJsonAnySetter_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException { - // given - String json = readResource("/deserialize-dynamic-object/flat.json"); - - // when - Product product = objectMapper.readValue(json, Product.class); - - // then - assertThat(product.getName()).isEqualTo("Pear yPhone 72"); - assertThat(product.getDetails().get("audioConnector")).isEqualTo("none"); - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/multiplefields/MapMultipleFieldsToSingleFieldUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/multiplefields/MapMultipleFieldsToSingleFieldUnitTest.java deleted file mode 100644 index fa8659bacd..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/multiplefields/MapMultipleFieldsToSingleFieldUnitTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ossez.jackson.multiplefields; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class MapMultipleFieldsToSingleFieldUnitTest { - - @Test - public void givenTwoJsonFormats_whenDeserialized_thenWeatherObjectsCreated() throws Exception { - - ObjectMapper mapper = new ObjectMapper(); - - Weather weather = mapper.readValue("{" + - "\"location\": \"London\"," + - "\"temp\": 15," + - "\"weather\": \"Cloudy\"" + - "}", Weather.class); - - assertEquals("London", weather.getLocation()); - assertEquals("Cloudy", weather.getOutlook()); - assertEquals(15, weather.getTemp()); - - weather = mapper.readValue("{" + - "\"place\": \"Lisbon\"," + - "\"temperature\": 35," + - "\"outlook\": \"Sunny\"" + - "}", Weather.class); - - assertEquals("Lisbon", weather.getLocation()); - assertEquals("Sunny", weather.getOutlook()); - assertEquals(35, weather.getTemp()); - - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/streaming/StreamingAPIUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/streaming/StreamingAPIUnitTest.java deleted file mode 100644 index 4e987a9d7c..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/streaming/StreamingAPIUnitTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.ossez.jackson.streaming; - -import com.fasterxml.jackson.core.*; -import org.junit.Test; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import static junit.framework.Assert.assertNull; -import static junit.framework.Assert.assertTrue; -import static junit.framework.TestCase.assertEquals; - -public class StreamingAPIUnitTest { - - @Test - public void givenJsonGenerator_whenAppendJsonToIt_thenGenerateJson() throws IOException { - // given - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - JsonFactory jfactory = new JsonFactory(); - JsonGenerator jGenerator = jfactory.createGenerator(stream, JsonEncoding.UTF8); - - // when - jGenerator.writeStartObject(); - jGenerator.writeStringField("name", "Tom"); - jGenerator.writeNumberField("age", 25); - jGenerator.writeFieldName("address"); - jGenerator.writeStartArray(); - jGenerator.writeString("Poland"); - jGenerator.writeString("5th avenue"); - jGenerator.writeEndArray(); - jGenerator.writeEndObject(); - jGenerator.close(); - - // then - String json = new String(stream.toByteArray(), "UTF-8"); - assertEquals(json, "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}"); - } - - @Test - public void givenJson_whenReadItUsingStreamAPI_thenShouldCreateProperJsonObject() throws IOException { - // given - String json = "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}"; - JsonFactory jfactory = new JsonFactory(); - JsonParser jParser = jfactory.createParser(json); - - String parsedName = null; - Integer parsedAge = null; - List addresses = new LinkedList<>(); - - // when - while (jParser.nextToken() != JsonToken.END_OBJECT) { - - String fieldname = jParser.getCurrentName(); - if ("name".equals(fieldname)) { - jParser.nextToken(); - parsedName = jParser.getText(); - - } - - if ("age".equals(fieldname)) { - jParser.nextToken(); - parsedAge = jParser.getIntValue(); - - } - - if ("address".equals(fieldname)) { - jParser.nextToken(); - - while (jParser.nextToken() != JsonToken.END_ARRAY) { - addresses.add(jParser.getText()); - } - } - - } - jParser.close(); - - // then - assertEquals(parsedName, "Tom"); - assertEquals(parsedAge, (Integer) 25); - assertEquals(addresses, Arrays.asList("Poland", "5th avenue")); - - } - - @Test - public void givenJson_whenWantToExtractPartOfIt_thenShouldExtractOnlyNeededFieldWithoutGoingThroughWholeJSON() throws IOException { - // given - String json = "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}"; - JsonFactory jfactory = new JsonFactory(); - JsonParser jParser = jfactory.createParser(json); - - String parsedName = null; - Integer parsedAge = null; - List addresses = new LinkedList<>(); - - // when - while (jParser.nextToken() != JsonToken.END_OBJECT) { - - String fieldname = jParser.getCurrentName(); - - if ("age".equals(fieldname)) { - jParser.nextToken(); - parsedAge = jParser.getIntValue(); - return; - } - - } - jParser.close(); - - // then - assertNull(parsedName); - assertEquals(parsedAge, (Integer) 25); - assertTrue(addresses.isEmpty()); - - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/DeserializeToJavaCollectionUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/DeserializeToJavaCollectionUnitTest.java deleted file mode 100644 index bf340fbb74..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/DeserializeToJavaCollectionUnitTest.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.ossez.jackson.tocollection; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.CollectionType; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -public class DeserializeToJavaCollectionUnitTest { - private ObjectMapper objectMapper; - private XmlMapper xmlMapper; - private List expectedBookList; - - - @BeforeEach - void setup() { - objectMapper = new ObjectMapper(); - xmlMapper = new XmlMapper(); - expectedBookList = Lists.newArrayList( - new Book(1, "A Song of Ice and Fire", "George R. R. Martin"), - new Book(2, "The Hitchhiker's Guide to the Galaxy", "Douglas Adams"), - new Book(3, "Hackers And Painters", "Paul Graham")); - } - - private String readFile(String path) { - try (Scanner scanner = new Scanner(getClass().getResourceAsStream(path), "UTF-8")) { - return scanner.useDelimiter("\\A").next(); - } - } - - /*==================== - * JSON tests - *==================== - */ - @Test - void givenJsonString_whenDeserializingToList_thenThrowingClassCastException() throws JsonProcessingException { - String jsonString = readFile("/to-java-collection/books.json"); - List bookList = objectMapper.readValue(jsonString, ArrayList.class); - assertThat(bookList).size().isEqualTo(3); - assertThatExceptionOfType(ClassCastException.class) - .isThrownBy(() -> bookList.get(0).getBookId()) - .withMessageMatching(".*java.util.LinkedHashMap cannot be cast to .*com.baeldung.jackson.tocollection.Book.*"); - } - - @Test - void givenJsonString_whenDeserializingWithTypeReference_thenGetExpectedList() throws JsonProcessingException { - String jsonString = readFile("/to-java-collection/books.json"); - List bookList = objectMapper.readValue(jsonString, new TypeReference>() {}); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenJsonString_whenDeserializingWithJavaType_thenGetExpectedList() throws JsonProcessingException { - String jsonString = readFile("/to-java-collection/books.json"); - CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Book.class); - List bookList = objectMapper.readValue(jsonString, listType); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenJsonString_whenDeserializingWithConvertValueAndTypeReference_thenGetExpectedList() throws JsonProcessingException { - String jsonString = readFile("/to-java-collection/books.json"); - JsonNode jsonNode = objectMapper.readTree(jsonString); - List bookList = objectMapper.convertValue(jsonNode, new TypeReference>() {}); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenJsonString_whenDeserializingWithConvertValueAndJavaType_thenGetExpectedList() throws JsonProcessingException { - String jsonString = readFile("/to-java-collection/books.json"); - JsonNode jsonNode = objectMapper.readTree(jsonString); - List bookList = objectMapper.convertValue(jsonNode, objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Book.class)); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - /*==================== - * XML tests - *==================== - */ - @Test - void givenXml_whenDeserializingToList_thenThrowingClassCastException() throws JsonProcessingException { - String xml = readFile("/to-java-collection/books.xml"); - List bookList = xmlMapper.readValue(xml, ArrayList.class); - assertThat(bookList).size().isEqualTo(3); - assertThatExceptionOfType(ClassCastException.class) - .isThrownBy(() -> bookList.get(0).getBookId()) - .withMessageMatching(".*java.util.LinkedHashMap cannot be cast to .*com.baeldung.jackson.tocollection.Book.*"); - } - - @Test - void givenXml_whenDeserializingWithTypeReference_thenGetExpectedList() throws JsonProcessingException { - String xml = readFile("/to-java-collection/books.xml"); - List bookList = xmlMapper.readValue(xml, new TypeReference>() {}); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenXml_whenDeserializingWithConvertValueAndTypeReference_thenGetExpectedList() throws JsonProcessingException { - String xml = readFile("/to-java-collection/books.xml"); - List node = xmlMapper.readValue(xml, List.class); - List bookList = xmlMapper.convertValue(node, new TypeReference>() {}); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenXml_whenDeserializingWithConvertValueAndJavaType_thenGetExpectedList() throws JsonProcessingException { - String xml = readFile("/to-java-collection/books.xml"); - List node = xmlMapper.readValue(xml, List.class); - List bookList = xmlMapper.convertValue(node, objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Book.class)); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/JsonToCollectionUtilUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/JsonToCollectionUtilUnitTest.java deleted file mode 100644 index 1cd14f3504..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/tocollection/JsonToCollectionUtilUnitTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.tocollection; - -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; -import java.util.Scanner; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -class JsonToCollectionUtilUnitTest { - - private List expectedBookList; - - - @BeforeEach - void setup() { - expectedBookList = Lists.newArrayList( - new Book(1, "A Song of Ice and Fire", "George R. R. Martin"), - new Book(2, "The Hitchhiker's Guide to the Galaxy", "Douglas Adams"), - new Book(3, "Hackers And Painters", "Paul Graham")); - } - - private String readFile(String path) { - try (Scanner scanner = new Scanner(getClass().getResourceAsStream(path), "UTF-8")) { - return scanner.useDelimiter("\\A").next(); - } - } - - @Test - void givenJsonString_whenCalljsonArrayToList_thenGetExpectedList() throws IOException { - String jsonString = readFile("/to-java-collection/books.json"); - List bookList = JsonToCollectionUtil.jsonArrayToList(jsonString, Book.class); - assertThat(bookList.get(0)).isInstanceOf(Book.class); - assertThat(bookList).isEqualTo(expectedBookList); - } - - @Test - void givenJsonString_whenCalljsonArrayToList2_thenGetException() throws IOException { - String jsonString = readFile("/to-java-collection/books.json"); - List bookList = JsonToCollectionUtil.jsonArrayToList2(jsonString, Book.class); - assertThat(bookList).size().isEqualTo(3); - assertThatExceptionOfType(ClassCastException.class) - .isThrownBy(() -> bookList.get(0).getBookId()) - .withMessageMatching(".*java.util.LinkedHashMap cannot be cast to .*com.baeldung.jackson.tocollection.Book.*"); - } - -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/xmlToJson/XmlToJsonUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/xmlToJson/XmlToJsonUnitTest.java deleted file mode 100644 index 170b1db71e..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/xmlToJson/XmlToJsonUnitTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ossez.jackson.xmlToJson; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import org.junit.Test; - -import static org.junit.Assert.*; - -import java.io.IOException; - -public class XmlToJsonUnitTest { - - @Test - public void givenAnXML_whenUseDataBidingToConvertToJSON_thenReturnDataOK() throws IOException{ - String flowerXML = "PoppyRED9"; - - XmlMapper xmlMapper = new XmlMapper(); - Flower poppy = xmlMapper.readValue(flowerXML, Flower.class); - - assertEquals(poppy.getName(), "Poppy"); - assertEquals(poppy.getColor(), Color.RED); - assertEquals(poppy.getPetals(), new Integer(9)); - - ObjectMapper mapper = new ObjectMapper(); - String json = mapper.writeValueAsString(poppy); - - assertEquals(json, "{\"name\":\"Poppy\",\"color\":\"RED\",\"petals\":9}"); - } - - @Test - public void givenAnXML_whenUseATreeConvertToJSON_thenReturnDataOK() throws IOException { - String flowerXML = "PoppyRED9"; - - XmlMapper xmlMapper = new XmlMapper(); - JsonNode node = xmlMapper.readTree(flowerXML.getBytes()); - - ObjectMapper jsonMapper = new ObjectMapper(); - String json = jsonMapper.writeValueAsString(node); - - assertEquals(json, "{\"name\":\"Poppy\",\"color\":\"RED\",\"petals\":\"9\"}"); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/yaml/YamlUnitTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/yaml/YamlUnitTest.java deleted file mode 100644 index 92a008d17e..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/ossez/jackson/yaml/YamlUnitTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ossez.jackson.yaml; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.io.IOException; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.Feature; - -public class YamlUnitTest { - private ObjectMapper mapper; - private File orderOutput; - - @Before - public void setup() { - mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER)); - mapper.findAndRegisterModules(); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - orderOutput = new File("src/test/resources/yaml/orderOutput.yaml"); - } - - @After - public void cleanup() { - orderOutput.deleteOnExit(); - } - - @Test - public void givenYamlInput_ObjectCreated() throws JsonParseException, JsonMappingException, IOException { - Order order = mapper.readValue(new File("src/test/resources/yaml/orderInput.yaml"), Order.class); - assertEquals("A001", order.getOrderNo()); - assertEquals(LocalDate.parse("2019-04-17", DateTimeFormatter.ISO_DATE), order.getDate()); - assertEquals("Customer, Joe", order.getCustomerName()); - assertEquals(2, order.getOrderLines() - .size()); - } - - @Test - public void givenYamlObject_FileWritten() throws JsonGenerationException, JsonMappingException, IOException { - List lines = new ArrayList<>(); - lines.add(new OrderLine("Copper Wire (200ft)", 1, new BigDecimal(50.67).setScale(2, RoundingMode.HALF_UP))); - lines.add(new OrderLine("Washers (1/4\")", 24, new BigDecimal(.15).setScale(2, RoundingMode.HALF_UP))); - Order order = new Order( - "B-9910", - LocalDate.parse("2019-04-18", DateTimeFormatter.ISO_DATE), - "Customer, Jane", - lines); - mapper.writeValue(orderOutput, order); - - File outputYaml = new File(orderOutput.getAbsolutePath()); - assertTrue(outputYaml.exists()); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedCsvFromJson.csv b/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedCsvFromJson.csv deleted file mode 100644 index e15e12f2bf..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedCsvFromJson.csv +++ /dev/null @@ -1,3 +0,0 @@ -item,quantity,unitPrice -"No. 9 Sprockets",12,1.23 -"Widget (10mm)",4,3.45 diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedFormattedCsvFromJson.csv b/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedFormattedCsvFromJson.csv deleted file mode 100644 index 5a60ba602a..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedFormattedCsvFromJson.csv +++ /dev/null @@ -1,3 +0,0 @@ -count,name -12,"No. 9 Sprockets" -4,"Widget (10mm)" diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedJsonFromCsv.json b/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedJsonFromCsv.json deleted file mode 100644 index 64f18e1673..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/csv/expectedJsonFromCsv.json +++ /dev/null @@ -1,9 +0,0 @@ -[ { - "item" : "No. 9 Sprockets", - "quantity" : 12, - "unitPrice" : 1.23 -}, { - "item" : "Widget (10mm)", - "quantity" : 4, - "unitPrice" : 3.45 -} ] \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/embedded.json b/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/embedded.json deleted file mode 100644 index e4f11f7f1f..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/embedded.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Pear yPhone 72", - "category": "cellphone", - "details": { - "displayAspectRatio": "97:3", - "audioConnector": "none" - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/flat.json b/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/flat.json deleted file mode 100644 index 799ea9339d..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/deserialize-dynamic-object/flat.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Pear yPhone 72", - "category": "cellphone", - "displayAspectRatio": "97:3", - "audioConnector": "none" -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/test/resources/yaml/orderInput.yaml b/jackson-modules/jackson-conversions-2/src/test/resources/yaml/orderInput.yaml deleted file mode 100644 index 0aaa6186a2..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/resources/yaml/orderInput.yaml +++ /dev/null @@ -1,11 +0,0 @@ -orderNo: A001 -date: 2019-04-17 -customerName: Customer, Joe -orderLines: - - item: No. 9 Sprockets - quantity: 12 - unitPrice: 1.23 - - item: Widget (10mm) - quantity: 4 - unitPrice: 3.45 - \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/README.md b/jackson-modules/jackson-conversions/README.md deleted file mode 100644 index 25e299800a..0000000000 --- a/jackson-modules/jackson-conversions/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## Jackson 转换 - -这个模块主要是针对 Jackson 转换(Jackson Conversions) 有关的文章。 - -### Relevant Articles: -- [Jackson – Unmarshall to Collection/Array](https://www.baeldung.com/jackson-collection-array) -- [Jackson Date](https://www.baeldung.com/jackson-serialize-dates) -- [Jackson – Working with Maps and Nulls](https://www.baeldung.com/jackson-map-null-values-or-null-key) -- [Jackson – Decide What Fields Get Serialized/Deserialized](https://www.baeldung.com/jackson-field-serializable-deserializable-or-not) -- [XML Serialization and Deserialization with Jackson](https://www.baeldung.com/jackson-xml-serialization-and-deserialization) -- [Map Serialization and Deserialization with Jackson](https://www.baeldung.com/jackson-map) -- [How to Serialize and Deserialize Enums with Jackson](https://www.baeldung.com/jackson-serialize-enums) -- [使用 Jackson – 将字符串转换为 JsonNode 对象](https://www.ossez.com/t/jackson-jsonnode/13724) -- [Mapping Nested Values with Jackson](https://www.baeldung.com/jackson-nested-values) -- [Deserialize Immutable Objects with Jackson](https://www.baeldung.com/jackson-deserialize-immutable-objects) -- More articles: [[next -->]](../jackson-conversions-2) diff --git a/jackson-modules/jackson-conversions/pom.xml b/jackson-modules/jackson-conversions/pom.xml deleted file mode 100644 index f11e2b35fd..0000000000 --- a/jackson-modules/jackson-conversions/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - jackson-conversions - 0.0.1-SNAPSHOT - jackson-conversions - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - ${jackson.version} - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson.version} - - - - - jackson-conversions - - - src/main/resources - true - - - - - \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateDeserializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateDeserializer.java deleted file mode 100644 index 6d0fe42cde..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateDeserializer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.jackson.date; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomDateDeserializer extends StdDeserializer { - - private static final long serialVersionUID = -5451717385630622729L; - private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - public CustomDateDeserializer() { - this(null); - } - - public CustomDateDeserializer(final Class vc) { - super(vc); - } - - @Override - public Date deserialize(final JsonParser jsonparser, final DeserializationContext context) throws IOException, JsonProcessingException { - final String date = jsonparser.getText(); - try { - return formatter.parse(date); - } catch (final ParseException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateSerializer.java deleted file mode 100644 index db5d68c746..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.date; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomDateSerializer extends StdSerializer { - - private static final long serialVersionUID = -2894356342227378312L; - private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - public CustomDateSerializer() { - this(null); - } - - public CustomDateSerializer(final Class t) { - super(t); - } - - @Override - public void serialize(final Date value, final JsonGenerator gen, final SerializerProvider arg2) throws IOException, JsonProcessingException { - gen.writeString(formatter.format(value)); - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateTimeSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateTimeSerializer.java deleted file mode 100644 index 9d72a89292..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomDateTimeSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.date; - -import java.io.IOException; - -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomDateTimeSerializer extends StdSerializer { - - private static final long serialVersionUID = -3927232057990121460L; - - public CustomDateTimeSerializer() { - this(null); - } - - public CustomDateTimeSerializer(final Class t) { - super(t); - } - - private static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"); - - @Override - public void serialize(final DateTime value, final JsonGenerator gen, final SerializerProvider arg2) throws IOException, JsonProcessingException { - gen.writeString(formatter.print(value)); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomLocalDateTimeSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomLocalDateTimeSerializer.java deleted file mode 100644 index e6fea554d3..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/CustomLocalDateTimeSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.date; - -import java.io.IOException; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomLocalDateTimeSerializer extends StdSerializer { - - private static final long serialVersionUID = -7449444168934819290L; - private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); - - public CustomLocalDateTimeSerializer() { - this(null); - } - - public CustomLocalDateTimeSerializer(final Class t) { - super(t); - } - - @Override - public void serialize(final LocalDateTime value, final JsonGenerator gen, final SerializerProvider arg2) throws IOException, JsonProcessingException { - gen.writeString(formatter.format(value)); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/Event.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/Event.java deleted file mode 100644 index 7762d5907b..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/Event.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.date; - -import java.util.Date; - -public class Event { - public String name; - public Date eventDate; - - public Event() { - super(); - } - - public Event(final String name, final Date eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public Date getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithFormat.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithFormat.java deleted file mode 100644 index fe73f551c7..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithFormat.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.date; - -import java.util.Date; - -import com.fasterxml.jackson.annotation.JsonFormat; - -public class EventWithFormat { - public String name; - - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") - public Date eventDate; - - public EventWithFormat() { - super(); - } - - public EventWithFormat(final String name, final Date eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public Date getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithJodaTime.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithJodaTime.java deleted file mode 100644 index b9e0a8672f..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithJodaTime.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.date; - -import org.joda.time.DateTime; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -public class EventWithJodaTime { - public String name; - - @JsonSerialize(using = CustomDateTimeSerializer.class) - public DateTime eventDate; - - public EventWithJodaTime() { - super(); - } - - public EventWithJodaTime(final String name, final DateTime eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public DateTime getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDate.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDate.java deleted file mode 100644 index 1562987b5b..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDate.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.date; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; - -import java.time.LocalDate; - -public class EventWithLocalDate { - public String name; - - @JsonDeserialize(using = LocalDateDeserializer.class) - @JsonSerialize(using = LocalDateSerializer.class) - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") - public LocalDate eventDate; - - public EventWithLocalDate() {} - - public EventWithLocalDate(final String name, final LocalDate eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public LocalDate getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDateTime.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDateTime.java deleted file mode 100644 index f5d048fa93..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithLocalDateTime.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.date; - -import java.time.LocalDateTime; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -public class EventWithLocalDateTime { - public String name; - - @JsonSerialize(using = CustomLocalDateTimeSerializer.class) - public LocalDateTime eventDate; - - public EventWithLocalDateTime() { - super(); - } - - public EventWithLocalDateTime(final String name, final LocalDateTime eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public LocalDateTime getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithSerializer.java deleted file mode 100644 index 595bcb8f76..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/date/EventWithSerializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.date; - -import java.util.Date; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -public class EventWithSerializer { - public String name; - - @JsonDeserialize(using = CustomDateDeserializer.class) - @JsonSerialize(using = CustomDateSerializer.class) - public Date eventDate; - - public EventWithSerializer() { - super(); - } - - public EventWithSerializer(final String name, final Date eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public Date getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/City.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/City.java deleted file mode 100644 index c86868de6e..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/City.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.enums.deserialization; - -public class City { - - private Distance distance; - - public Distance getDistance() { - return distance; - } - - public void setDistance(Distance distance) { - this.distance = distance; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/Distance.java deleted file mode 100644 index 96829dc3c9..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/Distance.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.enums.deserialization; - -public enum Distance { - - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public void setMeters(double meters) { - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } -} - diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/City.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/City.java deleted file mode 100644 index 42425f8c07..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/City.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.enums.deserialization.customdeserializer; - -public class City { - - private Distance distance; - - public Distance getDistance() { - return distance; - } - - public void setDistance(Distance distance) { - this.distance = distance; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/CustomEnumDeserializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/CustomEnumDeserializer.java deleted file mode 100644 index bb26606741..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/CustomEnumDeserializer.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ossez.jackson.enums.deserialization.customdeserializer; - -import java.io.IOException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomEnumDeserializer extends StdDeserializer { - - private static final long serialVersionUID = -1166032307856492833L; - - public CustomEnumDeserializer() { - this(null); - } - - public CustomEnumDeserializer(Class c) { - super(c); - } - - @Override - public Distance deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { - - JsonNode node = jsonParser.getCodec().readTree(jsonParser); - - String unit = node.get("unit").asText(); - double meters = node.get("meters").asDouble(); - - for (Distance distance : Distance.values()) { - - if (distance.getUnit().equals(unit) && - Double.compare(distance.getMeters(), meters) == 0) { - - return distance; - } - } - - return null; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/Distance.java deleted file mode 100644 index b6053f01d8..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/customdeserializer/Distance.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.enums.deserialization.customdeserializer; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -@JsonDeserialize(using = CustomEnumDeserializer.class) -public enum Distance { - - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public void setMeters(double meters) { - this.meters = meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/City.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/City.java deleted file mode 100644 index 734af4e548..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/City.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsoncreator; - -public class City { - - private Distance distance; - - public Distance getDistance() { - return distance; - } - - public void setDistance(Distance distance) { - this.distance = distance; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/Distance.java deleted file mode 100644 index 1c6bdfaad8..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsoncreator/Distance.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsoncreator; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public enum Distance { - - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public void setMeters(double meters) { - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - - @JsonCreator - public static Distance forValues(@JsonProperty("unit") String unit, @JsonProperty("meters") double meters) { - - for (Distance distance : Distance.values()) { - if (distance.unit.equals(unit) && Double.compare(distance.meters, meters) == 0) { - - return distance; - } - } - - return null; - - } -} - diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/City.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/City.java deleted file mode 100644 index 8d3ce1b326..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/City.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonproperty; - -public class City { - - private Distance distance; - - public Distance getDistance() { - return distance; - } - - public void setDistance(Distance distance) { - this.distance = distance; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/Distance.java deleted file mode 100644 index 656a3dceee..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonproperty/Distance.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonproperty; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public enum Distance { - - @JsonProperty("distance-in-km") - KILOMETER("km", 1000), - - @JsonProperty("distance-in-miles") - MILE("miles", 1609.34), - - @JsonProperty("distance-in-meters") - METER("meters", 1), - - @JsonProperty("distance-in-inches") - INCH("inches", 0.0254), - - @JsonProperty("distance-in-cm") - CENTIMETER("cm", 0.01), - - @JsonProperty("distance-in-mm") - MILLIMETER("mm", 0.001); - - private String unit; - private double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public void setMeters(double meters) { - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} - - diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/City.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/City.java deleted file mode 100644 index bfe7f3c6e9..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/City.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonvalue; - -public class City { - - private Distance distance; - - public Distance getDistance() { - return distance; - } - - public void setDistance(Distance distance) { - this.distance = distance; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/Distance.java deleted file mode 100644 index 530ddf9047..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/deserialization/jsonvalue/Distance.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonvalue; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum Distance { - - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public void setMeters(double meters) { - this.meters = meters; - } - - @JsonValue - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} - diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/Distance.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/Distance.java deleted file mode 100644 index 18ef758dfc..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/Distance.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.ossez.jackson.enums.serialization; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -/** - * Use @JsonFormat to handle representation of Enum as JSON (available since Jackson 2.1.2) - * Use @JsonSerialize to configure a custom Jackson serializer - */ -// @JsonFormat(shape = JsonFormat.Shape.OBJECT) -@JsonSerialize(using = DistanceSerializer.class) -public enum Distance { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private final double meters; - - private Distance(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - /** - * Use @JsonValue to control marshalling output for an enum - */ - // @JsonValue - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - - /** - * Usage example: Distance.MILE.convertFromMeters(1205.5); - */ - public double convertFromMeters(double distanceInMeters) { - return distanceInMeters / meters; - - } - - /** - * Usage example: Distance.MILE.convertToMeters(0.5); - */ - public double convertToMeters(double distanceInMeters) { - return distanceInMeters * meters; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/DistanceSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/DistanceSerializer.java deleted file mode 100644 index 8fc9458daf..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/serialization/DistanceSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.enums.serialization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class DistanceSerializer extends StdSerializer { - - private static final long serialVersionUID = 1376504304439963619L; - - public DistanceSerializer() { - super(Distance.class); - } - - public DistanceSerializer(Class t) { - super(t); - } - - public void serialize(Distance distance, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException { - generator.writeStartObject(); - generator.writeFieldName("name"); - generator.writeString(distance.name()); - generator.writeFieldName("unit"); - generator.writeString(distance.getUnit()); - generator.writeFieldName("meters"); - generator.writeNumber(distance.getMeters()); - generator.writeEndObject(); - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumSimple.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumSimple.java deleted file mode 100644 index a282e9e35f..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumSimple.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ossez.jackson.enums.withEnum; - -public enum DistanceEnumSimple { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private final double meters; - - private DistanceEnumSimple(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithJsonFormat.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithJsonFormat.java deleted file mode 100644 index c3d0050f31..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithJsonFormat.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.enums.withEnum; - -import com.fasterxml.jackson.annotation.JsonFormat; - -@JsonFormat(shape = JsonFormat.Shape.OBJECT) -public enum DistanceEnumWithJsonFormat { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private final double meters; - - private DistanceEnumWithJsonFormat(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithValue.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithValue.java deleted file mode 100644 index a94cdde511..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/DistanceEnumWithValue.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.enums.withEnum; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum DistanceEnumWithValue { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private final double meters; - - private DistanceEnumWithValue(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - @JsonValue - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumCustom.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumCustom.java deleted file mode 100644 index 9895d03262..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumCustom.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.ossez.jackson.enums.withEnum; - -import com.ossez.jackson.enums.serialization.Distance; - -public class MyDtoWithEnumCustom { - - private String stringValue; - private int intValue; - private boolean booleanValue; - private Distance type; - - public MyDtoWithEnumCustom() { - super(); - } - - public MyDtoWithEnumCustom(final String stringValue, final int intValue, final boolean booleanValue, final Distance type) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - this.type = type; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - public Distance getType() { - return type; - } - - public void setType(final Distance type) { - this.type = type; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumJsonFormat.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumJsonFormat.java deleted file mode 100644 index c58b20b87d..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/enums/withEnum/MyDtoWithEnumJsonFormat.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ossez.jackson.enums.withEnum; - -public class MyDtoWithEnumJsonFormat { - - private String stringValue; - private int intValue; - private boolean booleanValue; - private DistanceEnumWithJsonFormat distanceType; - - public MyDtoWithEnumJsonFormat() { - super(); - } - - public MyDtoWithEnumJsonFormat(final String stringValue, final int intValue, final boolean booleanValue, final DistanceEnumWithJsonFormat type) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - this.distanceType = type; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - public DistanceEnumWithJsonFormat getDistanceType() { - return distanceType; - } - - public void setDistanceType(final DistanceEnumWithJsonFormat type) { - this.distanceType = type; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDto.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDto.java deleted file mode 100644 index a4583c8b44..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDto.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ossez.jackson.field; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean getBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoAccessLevel.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoAccessLevel.java deleted file mode 100644 index 7c0604990f..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoAccessLevel.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ossez.jackson.field; - -public class MyDtoAccessLevel { - - private String stringValue; - int intValue; - protected float floatValue; - public boolean booleanValue; - - public MyDtoAccessLevel() { - super(); - } - - public MyDtoAccessLevel(final String stringValue, final int intValue, final float floatValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.floatValue = floatValue; - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithGetter.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithGetter.java deleted file mode 100644 index 7d60251959..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithGetter.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.field; - -public class MyDtoWithGetter { - - private String stringValue; - private int intValue; - - public MyDtoWithGetter() { - super(); - } - - public MyDtoWithGetter(final String stringValue, final int intValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithSetter.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithSetter.java deleted file mode 100644 index f32c5d2151..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/field/MyDtoWithSetter.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.field; - -public class MyDtoWithSetter { - - private int intValue; - public boolean booleanValue; - - public MyDtoWithSetter() { - super(); - } - - public MyDtoWithSetter(final int intValue, final boolean booleanValue) { - super(); - - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public int accessIntValue() { - return intValue; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Employee.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Employee.java deleted file mode 100644 index 46f44161cd..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Employee.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ossez.jackson.immutable; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class Employee { - - private final long id; - private final String name; - - @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - public Employee(@JsonProperty("id") long id, @JsonProperty("name") String name) { - this.id = id; - this.name = name; - } - - public long getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Person.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Person.java deleted file mode 100644 index 9df9f8c808..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/immutable/Person.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.ossez.jackson.immutable; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; - -@JsonDeserialize(builder = Person.Builder.class) -public class Person { - - private final String name; - private final Integer age; - - private Person(String name, Integer age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public Integer getAge() { - return age; - } - - @JsonPOJOBuilder - static class Builder { - String name; - Integer age; - - Builder withName(String name) { - this.name = name; - return this; - } - - Builder withAge(Integer age) { - this.age = age; - return this; - } - - Person build() { - return new Person(name, age); - } - } -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/ClassWithAMap.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/ClassWithAMap.java deleted file mode 100644 index 09a9818630..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/ClassWithAMap.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ossez.jackson.map; - -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -public class ClassWithAMap { - - @JsonProperty("map") - @JsonDeserialize(keyUsing = MyPairDeserializer.class) - private final Map map; - - @JsonCreator - public ClassWithAMap(Map map) { - this.map = map; - } - - public Map getMap() { - return map; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPair.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPair.java deleted file mode 100644 index 4578aea4f2..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPair.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.ossez.jackson.map; - -import com.fasterxml.jackson.annotation.JsonValue; - -public class MyPair { - - private String first; - private String second; - - public MyPair(String first, String second) { - this.first = first; - this.second = second; - } - - public MyPair(String both) { - String[] pairs = both.split("and"); - this.first = pairs[0].trim(); - this.second = pairs[1].trim(); - } - - @Override - @JsonValue - public String toString() { - return first + " and " + second; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((first == null) ? 0 : first.hashCode()); - result = prime * result + ((second == null) ? 0 : second.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof MyPair)) { - return false; - } - MyPair other = (MyPair) obj; - if (first == null) { - if (other.first != null) { - return false; - } - } else if (!first.equals(other.first)) { - return false; - } - if (second == null) { - if (other.second != null) { - return false; - } - } else if (!second.equals(other.second)) { - return false; - } - return true; - } - - public String getFirst() { - return first; - } - - public void setFirst(String first) { - this.first = first; - } - - public String getSecond() { - return second; - } - - public void setSecond(String second) { - this.second = second; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairDeserializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairDeserializer.java deleted file mode 100644 index 5feb836b11..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairDeserializer.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ossez.jackson.map; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.KeyDeserializer; - -public class MyPairDeserializer extends KeyDeserializer { - - @Override - public MyPair deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException { - - return new MyPair(key); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairSerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairSerializer.java deleted file mode 100644 index 4fe480ff0d..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/map/MyPairSerializer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ossez.jackson.map; - -import java.io.IOException; -import java.io.StringWriter; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; - -public class MyPairSerializer extends JsonSerializer { - - private final ObjectMapper mapper = new ObjectMapper(); - - @Override - public void serialize(MyPair value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { - StringWriter writer = new StringWriter(); - mapper.writeValue(writer, value); - gen.writeFieldName(writer.toString()); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDto.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDto.java deleted file mode 100644 index 202c4c9aea..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.mapnull; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDtoNullKeySerializer.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDtoNullKeySerializer.java deleted file mode 100644 index 299ef45305..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/mapnull/MyDtoNullKeySerializer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ossez.jackson.mapnull; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class MyDtoNullKeySerializer extends StdSerializer { - - private static final long serialVersionUID = -4478531309177369056L; - - public MyDtoNullKeySerializer() { - this(null); - } - - public MyDtoNullKeySerializer(final Class t) { - super(t); - } - - @Override - public void serialize(final Object value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - jgen.writeFieldName(""); - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/tocollection/MyDto.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/tocollection/MyDto.java deleted file mode 100644 index 9b005299f0..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/tocollection/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.tocollection; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Address.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Address.java deleted file mode 100644 index fcf78d025b..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Address.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.xml; - -public class Address { - - String streetNumber; - String streetName; - String city; - - public String getStreetNumber() { - return streetNumber; - } - - public void setStreetNumber(String streetNumber) { - this.streetNumber = streetNumber; - } - - public String getStreetName() { - return streetName; - } - - public void setStreetName(String streetName) { - this.streetName = streetName; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - -} diff --git a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Person.java b/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Person.java deleted file mode 100644 index 08ea503ccc..0000000000 --- a/jackson-modules/jackson-conversions/src/main/java/com/ossez/jackson/xml/Person.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ossez.jackson.xml; - -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; - -import java.util.ArrayList; -import java.util.List; - -@JacksonXmlRootElement(localName = "person") -public final class Person { - private String firstName; - private String lastName; - private List phoneNumbers = new ArrayList<>(); - private List
address = new ArrayList<>(); - - public List
getAddress() { - return address; - } - - public void setAddress(List
address) { - this.address = address; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public List getPhoneNumbers() { - return phoneNumbers; - } - - public void setPhoneNumbers(List phoneNumbers) { - this.phoneNumbers = phoneNumbers; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/date/JacksonDateUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/date/JacksonDateUnitTest.java deleted file mode 100644 index 1171c9e432..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/date/JacksonDateUnitTest.java +++ /dev/null @@ -1,212 +0,0 @@ -package com.ossez.jackson.date; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.TimeZone; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; -import com.fasterxml.jackson.datatype.joda.JodaModule; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -public class JacksonDateUnitTest { - - @Test - public void whenSerializingDateWithJackson_thenSerializedToTimestamp() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - final String toParse = "01-01-1970 01:00"; - final Date date = df.parse(toParse); - final Event event = new Event("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString("3600000")); - } - - @Test - public void whenSerializingDateToISO8601_thenSerializedToText() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - final String toParse = "01-01-1970 02:30"; - final Date date = df.parse(toParse); - final Event event = new Event("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - - // StdDateFormat is ISO8601 since jackson 2.9 - mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true)); - - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString("1970-01-01T02:30:00.000+00:00")); - } - - @Test - public void whenDeserialisingZonedDateTimeWithDefaults_thenNotCorrect() - throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC")); - String converted = objectMapper.writeValueAsString(now); - - ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class); - System.out.println("serialized: " + now); - System.out.println("restored: " + restored); - assertThat(now, is(restored)); - } - - @Test - public void whenSettingObjectMapperDateFormat_thenCorrect() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm"); - - final String toParse = "20-12-2014 02:30"; - final Date date = df.parse(toParse); - final Event event = new Event("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(df); - - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString(toParse)); - } - - @Test - public void whenUsingJsonFormatAnnotationToFormatDate_thenCorrect() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - final String toParse = "20-12-2014 02:30:00"; - final Date date = df.parse(toParse); - final EventWithFormat event = new EventWithFormat("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString(toParse)); - } - - @Test - public void whenUsingCustomDateSerializer_thenCorrect() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - final String toParse = "20-12-2014 02:30:00"; - final Date date = df.parse(toParse); - final EventWithSerializer event = new EventWithSerializer("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString(toParse)); - } - - @Test - public void whenSerializingJodaTimeWithJackson_thenCorrect() throws JsonProcessingException { - final DateTime date = new DateTime(2014, 12, 20, 2, 30); - final EventWithJodaTime event = new EventWithJodaTime("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString("2014-12-20 02:30")); - } - - @Test - public void whenSerializingJava8DateWithCustomSerializer_thenCorrect() throws JsonProcessingException { - final LocalDateTime date = LocalDateTime.of(2014, 12, 20, 2, 30); - final EventWithLocalDateTime event = new EventWithLocalDateTime("party", date); - - final ObjectMapper mapper = new ObjectMapper(); - final String result = mapper.writeValueAsString(event); - assertThat(result, containsString("2014-12-20 02:30")); - } - - @Test - public void whenDeserializingDateWithJackson_thenCorrect() throws IOException { - final String json = "{\"name\":\"party\",\"eventDate\":\"20-12-2014 02:30:00\"}"; - - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - final ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(df); - - final Event event = mapper.readerFor(Event.class) - .readValue(json); - assertEquals("20-12-2014 02:30:00", df.format(event.eventDate)); - } - - @Test - public void whenDeserializingDateUsingCustomDeserializer_thenCorrect() throws IOException { - final String json = "{\"name\":\"party\",\"eventDate\":\"20-12-2014 02:30:00\"}"; - - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - final ObjectMapper mapper = new ObjectMapper(); - - final EventWithSerializer event = mapper.readerFor(EventWithSerializer.class) - .readValue(json); - assertEquals("20-12-2014 02:30:00", df.format(event.eventDate)); - } - - @Test - public void whenSerializingJava8Date_thenCorrect() throws JsonProcessingException { - final LocalDateTime date = LocalDateTime.of(2014, 12, 20, 2, 30); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - - final String result = mapper.writeValueAsString(date); - assertThat(result, containsString("2014-12-20T02:30")); - } - - @Test - public void whenSerializingJava8DateAndReadingValue_thenCorrect() throws IOException { - String stringDate = "\"2014-12-20\""; - - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - - LocalDate result = mapper.readValue(stringDate, LocalDate.class); - assertThat(result.toString(), containsString("2014-12-20")); - } - - @Test - public void whenSerializingJava8DateAndReadingFromEntity_thenCorrect() throws IOException { - String json = "{\"name\":\"party\",\"eventDate\":\"20-12-2014\"}"; - - ObjectMapper mapper = new ObjectMapper(); - - EventWithLocalDate result = mapper.readValue(json, EventWithLocalDate.class); - assertThat(result.getEventDate().toString(), containsString("2014-12-20")); - } - - @Test - public void whenSerializingJodaTime_thenCorrect() throws JsonProcessingException { - final DateTime date = new DateTime(2014, 12, 20, 2, 30, DateTimeZone.forID("Europe/London")); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JodaModule()); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - - final String result = mapper.writeValueAsString(date); - assertThat(result, containsString("2014-12-20T02:30:00.000Z")); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/DefaultEnumDeserializationUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/DefaultEnumDeserializationUnitTest.java deleted file mode 100644 index 12596336cc..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/DefaultEnumDeserializationUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.enums.deserialization; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class DefaultEnumDeserializationUnitTest { - - @Test - public void givenEnum_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\":\"KILOMETER\"}"; - City city = new ObjectMapper().readValue(json, City.class); - - assertEquals(Distance.KILOMETER, city.getDistance()); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/customdeserializer/EnumCustomDeserializationUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/customdeserializer/EnumCustomDeserializationUnitTest.java deleted file mode 100644 index f3f561e021..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/customdeserializer/EnumCustomDeserializationUnitTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ossez.jackson.enums.deserialization.customdeserializer; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class EnumCustomDeserializationUnitTest { - - @Test - public void givenEnumWithCustomDeserializer_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.MILE, city.getDistance()); - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java deleted file mode 100644 index 239e36b261..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsoncreator/EnumDeserializationUsingJsonCreatorUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsoncreator; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class EnumDeserializationUsingJsonCreatorUnitTest { - - @Test - public void givenEnumWithJsonCreator_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": {\"unit\":\"miles\",\"meters\":1609.34}}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.MILE, city.getDistance()); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java deleted file mode 100644 index 883e1d7d57..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonproperty/EnumDeserializationUsingJsonPropertyUnitTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonproperty; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class EnumDeserializationUsingJsonPropertyUnitTest { - - @Test - public void givenEnumWithJsonProperty_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": \"distance-in-km\"}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.KILOMETER, city.getDistance()); - - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java deleted file mode 100644 index 1b38340684..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/deserialization/jsonvalue/EnumDeserializationUsingJsonValueUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.enums.deserialization.jsonvalue; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class EnumDeserializationUsingJsonValueUnitTest { - - @Test - public void givenEnumWithJsonValue_whenDeserializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - String json = "{\"distance\": \"0.0254\"}"; - - City city = new ObjectMapper().readValue(json, City.class); - assertEquals(Distance.INCH, city.getDistance()); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonEnumSerializationUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonEnumSerializationUnitTest.java deleted file mode 100644 index f3f0440a92..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonEnumSerializationUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.enums.serialization; - -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertThat; -import java.io.IOException; - -import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonEnumSerializationUnitTest { - - @Test - public final void givenEnum_whenSerializingJson_thenCorrectRepresentation() throws JsonParseException, IOException { - final String dtoAsString = new ObjectMapper().writeValueAsString(Distance.MILE); - - assertThat(dtoAsString, containsString("1609.34")); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonSerializationEnumsUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonSerializationEnumsUnitTest.java deleted file mode 100644 index fc9064c3c1..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/enums/serialization/JacksonSerializationEnumsUnitTest.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.ossez.jackson.enums.serialization; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import com.ossez.jackson.enums.withEnum.DistanceEnumSimple; -import com.ossez.jackson.enums.withEnum.DistanceEnumWithJsonFormat; -import com.ossez.jackson.enums.withEnum.DistanceEnumWithValue; -import com.ossez.jackson.enums.withEnum.MyDtoWithEnumCustom; -import com.ossez.jackson.enums.withEnum.MyDtoWithEnumJsonFormat; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonSerializationEnumsUnitTest { - - // tests - simple enum - - @Test - public final void whenSerializingASimpleEnum_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String enumAsString = mapper.writeValueAsString(DistanceEnumSimple.MILE); - - assertThat(enumAsString, containsString("MILE")); - } - - // tests - enum with main value - - @Test - public final void whenSerializingAEnumWithValue_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String enumAsString = mapper.writeValueAsString(DistanceEnumWithValue.MILE); - - assertThat(enumAsString, is("1609.34")); - } - - // tests - enum - - @Test - public final void whenSerializingAnEnum_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String enumAsString = mapper.writeValueAsString(DistanceEnumWithJsonFormat.MILE); - - assertThat(enumAsString, containsString("\"meters\":1609.34")); - } - - @Test - public final void whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String enumAsString = mapper.writeValueAsString(new MyDtoWithEnumJsonFormat("a", 1, true, DistanceEnumWithJsonFormat.MILE)); - - assertThat(enumAsString, containsString("\"meters\":1609.34")); - } - - @Test - public final void whenSerializingArrayOfEnums_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String json = mapper.writeValueAsString(new DistanceEnumWithJsonFormat[] { DistanceEnumWithJsonFormat.MILE, DistanceEnumWithJsonFormat.KILOMETER }); - - assertThat(json, containsString("\"meters\":1609.34")); - } - - // tests - enum with custom serializer - - @Test - public final void givenCustomSerializer_whenSerializingEntityWithEnum_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String enumAsString = mapper.writeValueAsString(new MyDtoWithEnumCustom("a", 1, true, Distance.MILE)); - - assertThat(enumAsString, containsString("\"meters\":1609.34")); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/field/JacksonFieldUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/field/JacksonFieldUnitTest.java deleted file mode 100644 index d3054aa483..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/field/JacksonFieldUnitTest.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.ossez.jackson.field; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonFieldUnitTest { - - @Test - public final void givenDifferentAccessLevels_whenPublic_thenSerializable() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoAccessLevel dtoObject = new MyDtoAccessLevel(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - assertThat(dtoAsString, not(containsString("stringValue"))); - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, not(containsString("floatValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - System.out.println(dtoAsString); - } - - @Test - public final void givenDifferentAccessLevels_whenGetterAdded_thenSerializable() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoWithGetter dtoObject = new MyDtoWithGetter(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - assertThat(dtoAsString, containsString("stringValue")); - assertThat(dtoAsString, not(containsString("intValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenDifferentAccessLevels_whenGetterAdded_thenDeserializable() throws IOException { - final String jsonAsString = "{\"stringValue\":\"dtoString\"}"; - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoWithGetter dtoObject = mapper.readValue(jsonAsString, MyDtoWithGetter.class); - - assertNotNull(dtoObject); - assertThat(dtoObject.getStringValue(), equalTo("dtoString")); - } - - @Test - public final void givenDifferentAccessLevels_whenSetterAdded_thenDeserializable() throws IOException { - final String jsonAsString = "{\"intValue\":1}"; - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoWithSetter dtoObject = mapper.readValue(jsonAsString, MyDtoWithSetter.class); - - assertNotNull(dtoObject); - assertThat(dtoObject.accessIntValue(), equalTo(1)); - } - - @Test - public final void givenDifferentAccessLevels_whenSetterAdded_thenStillNotSerializable() throws IOException { - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoWithSetter dtoObject = new MyDtoWithSetter(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - assertThat(dtoAsString, not(containsString("intValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenDifferentAccessLevels_whenSetVisibility_thenSerializable() throws IOException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - - final MyDtoAccessLevel dtoObject = new MyDtoAccessLevel(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - assertThat(dtoAsString, containsString("stringValue")); - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - System.out.println(dtoAsString); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/immutable/ImmutableObjectDeserializationUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/immutable/ImmutableObjectDeserializationUnitTest.java deleted file mode 100644 index de21167fb0..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/immutable/ImmutableObjectDeserializationUnitTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ossez.jackson.immutable; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import java.io.IOException; - -import static org.junit.Assert.*; - -public class ImmutableObjectDeserializationUnitTest { - - @Test - public void whenPublicConstructorIsUsed_thenObjectIsDeserialized() throws IOException { - final String json = "{\"name\":\"Frank\",\"id\":5000}"; - Employee employee = new ObjectMapper().readValue(json, Employee.class); - - assertEquals("Frank", employee.getName()); - assertEquals(5000, employee.getId()); - } - - @Test - public void whenBuilderIsUsedAndFieldIsNull_thenObjectIsDeserialized() throws IOException { - final String json = "{\"name\":\"Frank\"}"; - Person person = new ObjectMapper().readValue(json, Person.class); - - assertEquals("Frank", person.getName()); - assertNull(person.getAge()); - } - - @Test - public void whenBuilderIsUsedAndAllFieldsPresent_thenObjectIsDeserialized() throws IOException { - final String json = "{\"name\":\"Frank\",\"age\":50}"; - Person person = new ObjectMapper().readValue(json, Person.class); - - assertEquals("Frank", person.getName()); - assertEquals(50, (int) person.getAge()); - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapDeserializeUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapDeserializeUnitTest.java deleted file mode 100644 index dd3db4703d..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapDeserializeUnitTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ossez.jackson.map; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonMapDeserializeUnitTest { - - private Map map; - private Map cmap; - final ObjectMapper mapper = new ObjectMapper(); - - @Test - public void whenSimpleMapDeserialize_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - - final String jsonInput = "{\"key\": \"value\"}"; - TypeReference> typeRef = new TypeReference>() { - }; - - final Map map = mapper.readValue(jsonInput, typeRef); - - Assert.assertEquals("value", map.get("key")); - } - - @Test - public void whenObjectStringMapDeserialize_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - - final String jsonInput = "{\"Abbott and Costello\":\"Comedy\"}"; - - TypeReference> typeRef = new TypeReference>() { - }; - - map = mapper.readValue(jsonInput, typeRef); - - Assert.assertEquals("Comedy", map.get(new MyPair("Abbott", "Costello"))); - - ClassWithAMap classWithMap = mapper.readValue(jsonInput, ClassWithAMap.class); - - Assert.assertEquals("Comedy", classWithMap.getMap() - .get(new MyPair("Abbott", "Costello"))); - } - - @Test - public void whenObjectObjectMapDeserialize_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - - final String jsonInput = "{\"Abbott and Costello\" : \"Comedy and 1940s\"}"; - TypeReference> typeRef = new TypeReference>() { - }; - - cmap = mapper.readValue(jsonInput, typeRef); - - Assert.assertEquals(new MyPair("Comedy", "1940s"), cmap.get(new MyPair("Abbott", "Costello"))); - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapSerializeUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapSerializeUnitTest.java deleted file mode 100644 index af8bcfb083..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/map/JacksonMapSerializeUnitTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.ossez.jackson.map; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.MapSerializer; - -public class JacksonMapSerializeUnitTest { - - @JsonSerialize(keyUsing = MyPairSerializer.class) - private Map map; - - @JsonSerialize(keyUsing = MapSerializer.class) - private Map cmap; - - @JsonSerialize(keyUsing = MyPairSerializer.class) - private MyPair mapKey; - - @JsonSerialize(keyUsing = MyPairSerializer.class) - private MyPair mapValue; - - final ObjectMapper mapper = new ObjectMapper(); - - @Test - public void whenSimpleMapSerialize_thenCorrect() throws JsonProcessingException { - - Map map = new HashMap<>(); - map.put("key", "value"); - - final String jsonResult = mapper.writeValueAsString(map); - - Assert.assertEquals("{\"key\":\"value\"}", jsonResult); - } - - @Test - public void whenCustomObjectStringMapSerialize_thenCorrect() throws JsonProcessingException { - - map = new HashMap<>(); - MyPair key = new MyPair("Abbott", "Costello"); - map.put(key, "Comedy"); - - final String jsonResult = mapper.writeValueAsString(map); - - Assert.assertEquals("{\"Abbott and Costello\":\"Comedy\"}", jsonResult); - } - - @Test - public void whenCustomObjectObjectMapSerialize_thenCorrect() throws JsonProcessingException { - - cmap = new HashMap<>(); - mapKey = new MyPair("Abbott", "Costello"); - mapValue = new MyPair("Comedy", "1940's"); - cmap.put(mapKey, mapValue); - - final String jsonResult = mapper.writeValueAsString(cmap); - - Assert.assertEquals("{\"Abbott and Costello\":\"Comedy and 1940's\"}", jsonResult); - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/mapnull/JacksonMapNullUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/mapnull/JacksonMapNullUnitTest.java deleted file mode 100644 index 3d65b2397b..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/mapnull/JacksonMapNullUnitTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.ossez.jackson.mapnull; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -public class JacksonMapNullUnitTest { - - @Test - public final void givenIgnoringMapNullValue_whenWritingMapObjectWithNullValue_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - // mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); - mapper.setSerializationInclusion(Include.NON_NULL); - - final MyDto dtoObject1 = new MyDto(); - - final Map dtoMap = new HashMap(); - dtoMap.put("dtoObject1", dtoObject1); - dtoMap.put("dtoObject2", null); - - final String dtoMapAsString = mapper.writeValueAsString(dtoMap); - - assertThat(dtoMapAsString, containsString("dtoObject1")); - assertThat(dtoMapAsString, not(containsString("dtoObject2"))); - System.out.println(dtoMapAsString); - } - - @Test - public final void givenIgnoringMapValueObjectWithNullField_whenWritingMapValueObjectWithNullField_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(Include.NON_NULL); - - final MyDto dtoObject = new MyDto(); - - final Map dtoMap = new HashMap(); - dtoMap.put("dtoObject", dtoObject); - - final String dtoMapAsString = mapper.writeValueAsString(dtoMap); - - assertThat(dtoMapAsString, containsString("dtoObject")); - assertThat(dtoMapAsString, not(containsString("stringValue"))); - System.out.println(dtoMapAsString); - } - - @Test - public final void givenAllowingMapObjectWithNullKey_whenWriting_thenCorrect() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.getSerializerProvider() - .setNullKeySerializer(new MyDtoNullKeySerializer()); - - final MyDto dtoObject1 = new MyDto(); - dtoObject1.setStringValue("dtoObjectString1"); - final MyDto dtoObject2 = new MyDto(); - dtoObject2.setStringValue("dtoObjectString2"); - - final Map dtoMap = new HashMap(); - dtoMap.put(null, dtoObject1); - dtoMap.put("obj2", dtoObject2); - - final String dtoMapAsString = mapper.writeValueAsString(dtoMap); - - System.out.println(dtoMapAsString); - assertThat(dtoMapAsString, containsString("\"\"")); - assertThat(dtoMapAsString, containsString("dtoObjectString1")); - assertThat(dtoMapAsString, containsString("obj2")); - } - - @Test - public final void givenAllowingMapObjectOneNullKey_whenWritingMapObjectWithTwoNullKeys_thenOverride() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.getSerializerProvider() - .setNullKeySerializer(new MyDtoNullKeySerializer()); - - final MyDto dtoObject1 = new MyDto(); - dtoObject1.setStringValue("dtoObject1String"); - - final MyDto dtoObject2 = new MyDto(); - dtoObject2.setStringValue("dtoObject2String"); - - final Map dtoMap = new HashMap(); - dtoMap.put(null, dtoObject1); - dtoMap.put(null, dtoObject2); - - final String dtoMapAsString = mapper.writeValueAsString(dtoMap); - - assertThat(dtoMapAsString, not(containsString("dtoObject1String"))); - assertThat(dtoMapAsString, containsString("dtoObject2String")); - System.out.println(dtoMapAsString); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/DeserializeWithNestedPropertiesUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/DeserializeWithNestedPropertiesUnitTest.java deleted file mode 100644 index e6b6e0b8d7..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/DeserializeWithNestedPropertiesUnitTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.ossez.jackson.nested; - -import static org.junit.Assert.*; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; - -public class DeserializeWithNestedPropertiesUnitTest { - - private String SOURCE_JSON = "{\"id\":\"957c43f2-fa2e-42f9-bf75-6e3d5bb6960a\",\"name\":\"The Best Product\",\"brand\":{\"id\":\"9bcd817d-0141-42e6-8f04-e5aaab0980b6\",\"name\":\"ACME Products\",\"owner\":{\"id\":\"b21a80b1-0c09-4be3-9ebd-ea3653511c13\",\"name\":\"Ultimate Corp, Inc.\"}}}"; - - @Test - public void whenUsingAnnotations_thenOk() throws IOException { - Product product = new ObjectMapper().readerFor(Product.class) - .readValue(SOURCE_JSON); - - assertEquals(product.getName(), "The Best Product"); - assertEquals(product.getBrandName(), "ACME Products"); - assertEquals(product.getOwnerName(), "Ultimate Corp, Inc."); - } - - @Test - public void whenUsingJsonNode_thenOk() throws IOException { - JsonNode productNode = new ObjectMapper().readTree(SOURCE_JSON); - - Product product = new Product(); - product.setId(productNode.get("id") - .textValue()); - product.setName(productNode.get("name") - .textValue()); - product.setBrandName(productNode.get("brand") - .get("name") - .textValue()); - product.setOwnerName(productNode.get("brand") - .get("owner") - .get("name") - .textValue()); - - assertEquals(product.getName(), "The Best Product"); - assertEquals(product.getBrandName(), "ACME Products"); - assertEquals(product.getOwnerName(), "Ultimate Corp, Inc."); - } - - @Test - public void whenUsingDeserializerManuallyRegistered_thenOk() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - SimpleModule module = new SimpleModule(); - module.addDeserializer(Product.class, new ProductDeserializer()); - mapper.registerModule(module); - - Product product = mapper.readValue(SOURCE_JSON, Product.class); - assertEquals(product.getName(), "The Best Product"); - assertEquals(product.getBrandName(), "ACME Products"); - assertEquals(product.getOwnerName(), "Ultimate Corp, Inc."); - } - - @Test - public void whenUsingDeserializerAutoRegistered_thenOk() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - Product product = mapper.readValue(SOURCE_JSON, Product.class); - assertEquals(product.getName(), "The Best Product"); - assertEquals(product.getBrandName(), "ACME Products"); - assertEquals(product.getOwnerName(), "Ultimate Corp, Inc."); - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/Product.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/Product.java deleted file mode 100644 index 07c21e71ba..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/Product.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.ossez.jackson.nested; - -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -@JsonDeserialize(using = ProductDeserializer.class) -public class Product { - - private String id; - private String name; - private String brandName; - private String ownerName; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getBrandName() { - return brandName; - } - - public void setBrandName(String brandName) { - this.brandName = brandName; - } - - public String getOwnerName() { - return ownerName; - } - - public void setOwnerName(String ownerName) { - this.ownerName = ownerName; - } - - @SuppressWarnings("unchecked") - @JsonProperty("brand") - private void unpackNested(Map brand) { - this.brandName = (String) brand.get("name"); - Map owner = (Map) brand.get("owner"); - this.ownerName = owner.get("name"); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/ProductDeserializer.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/ProductDeserializer.java deleted file mode 100644 index e25c254d47..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/nested/ProductDeserializer.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ossez.jackson.nested; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -@SuppressWarnings("serial") -public class ProductDeserializer extends StdDeserializer { - - public ProductDeserializer() { - this(null); - } - - public ProductDeserializer(Class vc) { - super(vc); - } - - @Override - public Product deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { - JsonNode productNode = jp.getCodec() - .readTree(jp); - Product product = new Product(); - product.setId(productNode.get("id") - .textValue()); - product.setName(productNode.get("name") - .textValue()); - product.setBrandName(productNode.get("brand") - .get("name") - .textValue()); - product.setOwnerName(productNode.get("brand") - .get("owner") - .get("name") - .textValue()); - return product; - } -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tocollection/JacksonCollectionDeserializationUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tocollection/JacksonCollectionDeserializationUnitTest.java deleted file mode 100644 index f0f22b4533..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tocollection/JacksonCollectionDeserializationUnitTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.ossez.jackson.tocollection; - -import static org.hamcrest.Matchers.instanceOf; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.List; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.CollectionType; -import com.google.common.collect.Lists; - -public class JacksonCollectionDeserializationUnitTest { - - // tests - json to multiple entity - - @Test - public final void givenJsonArray_whenDeserializingAsArray_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - - final List listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false)); - listOfDtos - final String jsonArray = mapper.writeValueAsString(listOfDtos); - // [{"stringValue":"a","intValue":1,"booleanValue":true},{"stringValue":"bc","intValue":3,"booleanValue":false}] - - final MyDto[] asArray = mapper.readValue(jsonArray, MyDto[].class); - assertThat(asArray[0], instanceOf(MyDto.class)); - } - - @Test - public final void givenJsonArray_whenDeserializingAsListWithNoTypeInfo_thenNotCorrect() throws JsonParseException, JsonMappingException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - - final List listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false)); - final String jsonArray = mapper.writeValueAsString(listOfDtos); - // [{"stringValue":"a","intValue":1,"booleanValue":true},{"stringValue":"bc","intValue":3,"booleanValue":false}] - - final List asList = mapper.readValue(jsonArray, List.class); - assertThat((Object) asList.get(0), instanceOf(LinkedHashMap.class)); - } - - @Test - public final void givenJsonArray_whenDeserializingAsListWithTypeReferenceHelp_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - - final List listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false)); - final String jsonArray = mapper.writeValueAsString(listOfDtos); - // [{"stringValue":"a","intValue":1,"booleanValue":true},{"stringValue":"bc","intValue":3,"booleanValue":false}] - - final List asList = mapper.readValue(jsonArray, new TypeReference>() { - }); - assertThat(asList.get(0), instanceOf(MyDto.class)); - } - - @Test - public final void givenJsonArray_whenDeserializingAsListWithJavaTypeHelp_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - - final List listOfDtos = Lists.newArrayList(new MyDto("a", 1, true), new MyDto("bc", 3, false)); - final String jsonArray = mapper.writeValueAsString(listOfDtos); - // [{"stringValue":"a","intValue":1,"booleanValue":true},{"stringValue":"bc","intValue":3,"booleanValue":false}] - - final CollectionType javaType = mapper.getTypeFactory() - .constructCollectionType(List.class, MyDto.class); - final List asList = mapper.readValue(jsonArray, javaType); - assertThat(asList.get(0), instanceOf(MyDto.class)); - } - -} -// a (private) no-args constructor is required (simulate without) diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tojsonnode/StringToJsonNodeUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tojsonnode/StringToJsonNodeUnitTest.java deleted file mode 100644 index 9cc438c259..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/tojsonnode/StringToJsonNodeUnitTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.tojsonnode; - -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import org.junit.Test; - -import java.io.IOException; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class StringToJsonNodeUnitTest { - - @Test - public final void whenParsingJsonStringIntoJsonNode_thenCorrect() throws JsonParseException, IOException { - final String jsonString = "{\"k1\":\"v1\",\"k2\":\"v2\"}"; - - final ObjectMapper mapper = new ObjectMapper(); - final JsonNode actualObj = mapper.readTree(jsonString); - - assertNotNull(actualObj); - } - - @Test - public final void givenUsingLowLevelDetails_whenParsingJsonStringIntoJsonNode_thenCorrect() throws JsonParseException, IOException { - final String jsonString = "{\"k1\":\"v1\",\"k2\":\"v2\"}"; - - final ObjectMapper mapper = new ObjectMapper(); - final JsonFactory factory = mapper.getFactory(); - final JsonParser parser = factory.createParser(jsonString); - final JsonNode actualObj = mapper.readTree(parser); - - assertNotNull(actualObj); - } - - @Test - public final void givenTheJsonNode_whenRetrievingDataFromId_thenCorrect() throws JsonParseException, IOException { - final String jsonString = "{\"k1\":\"v1\",\"k2\":\"v2\"}"; - final ObjectMapper mapper = new ObjectMapper(); - final JsonNode actualObj = mapper.readTree(jsonString); - - // When - final JsonNode jsonNode1 = actualObj.get("k1"); - assertThat(jsonNode1.textValue(), equalTo("v1")); - } - -} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/xml/XMLSerializeDeserializeUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/xml/XMLSerializeDeserializeUnitTest.java deleted file mode 100644 index e4d879a319..0000000000 --- a/jackson-modules/jackson-conversions/src/test/java/com/ossez/jackson/xml/XMLSerializeDeserializeUnitTest.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.ossez.jackson.xml; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; - -public class XMLSerializeDeserializeUnitTest { - - @Test - public void whenJavaSerializedToXmlStr_thenCorrect() throws JsonProcessingException { - XmlMapper xmlMapper = new XmlMapper(); - String xml = xmlMapper.writeValueAsString(new SimpleBean()); - assertNotNull(xml); - } - - @Test - public void whenJavaSerializedToXmlFile_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - xmlMapper.writeValue(new File("target/simple_bean.xml"), new SimpleBean()); - File file = new File("target/simple_bean.xml"); - assertNotNull(file); - } - - @Test - public void whenJavaGotFromXmlStr_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - SimpleBean value = xmlMapper.readValue("12", SimpleBean.class); - assertTrue(value.getX() == 1 && value.getY() == 2); - } - - @Test - public void whenJavaGotFromXmlFile_thenCorrect() throws IOException { - File file = new File("src/test/resources/simple_bean.xml"); - XmlMapper xmlMapper = new XmlMapper(); - String xml = inputStreamToString(new FileInputStream(file)); - SimpleBean value = xmlMapper.readValue(xml, SimpleBean.class); - assertTrue(value.getX() == 1 && value.getY() == 2); - } - - @Test - public void whenJavaGotFromXmlStrWithCapitalElem_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - SimpleBeanForCapitalizedFields value = xmlMapper.readValue("12", SimpleBeanForCapitalizedFields.class); - assertTrue(value.getX() == 1 && value.getY() == 2); - } - - @Test - public void whenJavaSerializedToXmlFileWithCapitalizedField_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - xmlMapper.writeValue(new File("target/simple_bean_capitalized.xml"), new SimpleBeanForCapitalizedFields()); - File file = new File("target/simple_bean_capitalized.xml"); - assertNotNull(file); - } - - @Test - public void whenJavaDeserializedFromXmlFile_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - - String xml = "RohanDaye99110347319911033478
1Name1City1
2Name2City2
"; - Person value = xmlMapper.readValue(xml, Person.class); - - assertTrue(value.getAddress() - .get(0) - .getCity() - .equalsIgnoreCase("city1") - && value.getAddress() - .get(1) - .getCity() - .equalsIgnoreCase("city2")); - } - - @Test - public void whenJavaSerializedToXmlFile_thenSuccess() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - - String expectedXml = "RohanDaye99110347319911033478
1Name1City1
2Name2City2
"; - - Person person = new Person(); - - person.setFirstName("Rohan"); - person.setLastName("Daye"); - - List ph = new ArrayList<>(); - ph.add("9911034731"); - ph.add("9911033478"); - person.setPhoneNumbers(ph); - - List
addresses = new ArrayList<>(); - - Address address1 = new Address(); - address1.setStreetNumber("1"); - address1.setStreetName("Name1"); - address1.setCity("City1"); - - Address address2 = new Address(); - address2.setStreetNumber("2"); - address2.setStreetName("Name2"); - address2.setCity("City2"); - - addresses.add(address1); - addresses.add(address2); - - person.setAddress(addresses); - - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - xmlMapper.writeValue(byteArrayOutputStream, person); - assertEquals(expectedXml, byteArrayOutputStream.toString()); - } - - private static String inputStreamToString(InputStream is) throws IOException { - BufferedReader br; - StringBuilder sb = new StringBuilder(); - - String line; - br = new BufferedReader(new InputStreamReader(is)); - while ((line = br.readLine()) != null) { - sb.append(line); - } - br.close(); - return sb.toString(); - } -} - -class SimpleBean { - private int x = 1; - private int y = 2; - - public int getX() { - return x; - } - - public void setX(int x) { - this.x = x; - } - - public int getY() { - return y; - } - - public void setY(int y) { - this.y = y; - } - -} - -class SimpleBeanForCapitalizedFields { - @JsonProperty("X") - private int x = 1; - private int y = 2; - - public int getX() { - return x; - } - - public void setX(int x) { - this.x = x; - } - - public int getY() { - return y; - } - - public void setY(int y) { - this.y = y; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-conversions/src/test/resources/simple_bean.xml b/jackson-modules/jackson-conversions/src/test/resources/simple_bean.xml deleted file mode 100644 index 7829ea35a4..0000000000 --- a/jackson-modules/jackson-conversions/src/test/resources/simple_bean.xml +++ /dev/null @@ -1,4 +0,0 @@ - - 1 - 2 - \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/README.md b/jackson-modules/jackson-custom-conversions/README.md deleted file mode 100644 index 68e9a6d50d..0000000000 --- a/jackson-modules/jackson-custom-conversions/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Jackson Custom Conversions - -This module contains articles about Jackson custom conversions. - -### Relevant Articles: -- [Jackson – Custom Serializer](https://www.baeldung.com/jackson-custom-serialization) -- [Getting Started with Custom Deserialization in Jackson](https://www.baeldung.com/jackson-deserialization) -- [Serialize Only Fields that meet a Custom Criteria with Jackson](https://www.baeldung.com/jackson-serialize-field-custom-criteria) -- [Calling Default Serializer from Custom Serializer in Jackson](https://www.baeldung.com/jackson-call-default-serializer-from-custom-serializer) diff --git a/jackson-modules/jackson-custom-conversions/pom.xml b/jackson-modules/jackson-custom-conversions/pom.xml deleted file mode 100644 index 8772558bf3..0000000000 --- a/jackson-modules/jackson-custom-conversions/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - jackson-custom-conversions - 0.0.1-SNAPSHOT - jackson-custom-conversions - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson.version} - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - - - jackson-custom-conversions - - - src/main/resources - true - - - - - \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/File.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/File.java deleted file mode 100644 index 791ad3a466..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/File.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -public class File { - - private Long id; - - private String name; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/Folder.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/Folder.java deleted file mode 100644 index 6f423059a2..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/Folder.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class Folder { - - private Long id; - - private String name; - - private String owner; - - private Date created; - - private Date modified; - - private Date lastAccess; - - @JsonIgnore - private List files = new ArrayList<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getOwner() { - return owner; - } - - public void setOwner(String owner) { - this.owner = owner; - } - - public Date getCreated() { - return created; - } - - public void setCreated(Date created) { - this.created = created; - } - - public Date getModified() { - return modified; - } - - public void setModified(Date modified) { - this.modified = modified; - } - - public Date getLastAccess() { - return lastAccess; - } - - public void setLastAccess(Date lastAccess) { - this.lastAccess = lastAccess; - } - - public List getFiles() { - return files; - } - - public void setFiles(List files) { - this.files = files; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderBeanSerializerModifier.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderBeanSerializerModifier.java deleted file mode 100644 index 819971939c..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderBeanSerializerModifier.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import com.fasterxml.jackson.databind.BeanDescription; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; - -public class FolderBeanSerializerModifier extends BeanSerializerModifier { - - @Override - public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) { - - if (beanDesc.getBeanClass().equals(Folder.class)) { - return new FolderSerializerWithDefaultSerializerStored((JsonSerializer) serializer); - } - - return serializer; - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializer.java deleted file mode 100644 index 3869ab15d8..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class FolderSerializer extends StdSerializer { - - public FolderSerializer() { - super(Folder.class); - } - - @Override - public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeStartObject(); - gen.writeStringField("name", value.getName()); - - gen.writeArrayFieldStart("files"); - for (File file : value.getFiles()) { - gen.writeStartObject(); - gen.writeNumberField("id", file.getId()); - gen.writeStringField("name", file.getName()); - gen.writeEndObject(); - } - gen.writeEndArray(); - - gen.writeEndObject(); - - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithCallingOwnSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithCallingOwnSerializer.java deleted file mode 100644 index 544a4c6d1a..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithCallingOwnSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class FolderSerializerWithCallingOwnSerializer extends StdSerializer { - - public FolderSerializerWithCallingOwnSerializer() { - super(Folder.class); - } - - @Override - public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeStartObject(); - gen.writeStringField("name", value.getName()); - - provider.defaultSerializeField("files", value.getFiles(), gen); - - provider.defaultSerializeField("details", value, gen); - - gen.writeEndObject(); - - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithDefaultSerializerStored.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithDefaultSerializerStored.java deleted file mode 100644 index 558b303301..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithDefaultSerializerStored.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class FolderSerializerWithDefaultSerializerStored extends StdSerializer { - - private final JsonSerializer defaultSerializer; - - public FolderSerializerWithDefaultSerializerStored(JsonSerializer defaultSerializer) { - super(Folder.class); - this.defaultSerializer = defaultSerializer; - } - - @Override - public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeStartObject(); - gen.writeStringField("name", value.getName()); - - provider.defaultSerializeField("files", value.getFiles(), gen); - - gen.writeFieldName("details"); - defaultSerializer.serialize(value, gen, provider); - - gen.writeEndObject(); - - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithInternalObjectMapper.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithInternalObjectMapper.java deleted file mode 100644 index 1ad51c63c0..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithInternalObjectMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class FolderSerializerWithInternalObjectMapper extends StdSerializer { - - public FolderSerializerWithInternalObjectMapper() { - super(Folder.class); - } - - @Override - public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeStartObject(); - gen.writeStringField("name", value.getName()); - - // we access internal mapper to delegate the serialization of File list - ObjectMapper mapper = (ObjectMapper) gen.getCodec(); - - gen.writeFieldName("files"); - String stringValue = mapper.writeValueAsString(value.getFiles()); - gen.writeRawValue(stringValue); - - gen.writeEndObject(); - - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithSerializerProvider.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithSerializerProvider.java deleted file mode 100644 index 8aeb28b3d0..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/defaultserializercustomserializer/FolderSerializerWithSerializerProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class FolderSerializerWithSerializerProvider extends StdSerializer { - - public FolderSerializerWithSerializerProvider() { - super(Folder.class); - } - - @Override - public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { - - gen.writeStartObject(); - gen.writeStringField("name", value.getName()); - - // we delegate the File list serialization to its default serializer - provider.defaultSerializeField("files", value.getFiles(), gen); - - gen.writeEndObject(); - - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ActorJackson.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ActorJackson.java deleted file mode 100644 index 4bf3bc57f6..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ActorJackson.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.baeldung.deserialization; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.TimeZone; - -public class ActorJackson { - - private String imdbId; - private Date dateOfBirth; - private List filmography; - - public ActorJackson() { - super(); - } - - public ActorJackson(String imdbId, Date dateOfBirth, List filmography) { - super(); - this.imdbId = imdbId; - this.dateOfBirth = dateOfBirth; - this.filmography = filmography; - } - - @Override - public String toString() { - return "ActorJackson [imdbId=" + imdbId + ", dateOfBirth=" + formatDateOfBirth() + ", filmography=" + filmography + "]"; - } - - public String getImdbId() { - return imdbId; - } - - public void setImdbId(String imdbId) { - this.imdbId = imdbId; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public List getFilmography() { - return filmography; - } - - public void setFilmography(List filmography) { - this.filmography = filmography; - } - - private String formatDateOfBirth() { - final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy", Locale.US); - formatter.setTimeZone(TimeZone.getTimeZone("GMT")); - return formatter.format(dateOfBirth); - } -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Item.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Item.java deleted file mode 100644 index e6234bb6e9..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Item.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.deserialization; - -public class Item { - public int id; - public String itemName; - public User owner; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializer.java deleted file mode 100644 index 7ae2faa04d..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.deserialization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.node.IntNode; - -public class ItemDeserializer extends StdDeserializer { - - private static final long serialVersionUID = 1883547683050039861L; - - public ItemDeserializer() { - this(null); - } - - public ItemDeserializer(final Class vc) { - super(vc); - } - - /** - * {"id":1,"itemNr":"theItem","owner":2} - */ - @Override - public Item deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { - final JsonNode node = jp.getCodec() - .readTree(jp); - final int id = (Integer) ((IntNode) node.get("id")).numberValue(); - final String itemName = node.get("itemName") - .asText(); - final int userId = (Integer) ((IntNode) node.get("createdBy")).numberValue(); - - return new Item(id, itemName, new User(userId, null)); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializerOnClass.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializerOnClass.java deleted file mode 100644 index b9db114c4a..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemDeserializerOnClass.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.deserialization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.node.IntNode; - -public class ItemDeserializerOnClass extends StdDeserializer { - - private static final long serialVersionUID = 5579141241817332594L; - - public ItemDeserializerOnClass() { - this(null); - } - - public ItemDeserializerOnClass(final Class vc) { - super(vc); - } - - /** - * {"id":1,"itemNr":"theItem","owner":2} - */ - @Override - public ItemWithDeserializer deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { - final JsonNode node = jp.getCodec() - .readTree(jp); - final int id = (Integer) ((IntNode) node.get("id")).numberValue(); - final String itemName = node.get("itemName") - .asText(); - final int userId = (Integer) ((IntNode) node.get("owner")).numberValue(); - - return new ItemWithDeserializer(id, itemName, new User(userId, null)); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemWithDeserializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemWithDeserializer.java deleted file mode 100644 index 1ab36e4acd..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/ItemWithDeserializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.deserialization; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -@JsonDeserialize(using = ItemDeserializerOnClass.class) -public class ItemWithDeserializer { - public final int id; - public final String itemName; - public final User owner; - - public ItemWithDeserializer(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Movie.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Movie.java deleted file mode 100644 index fdb107dca2..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/Movie.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.deserialization; - -import java.util.List; - -public class Movie { - - private String imdbId; - private String director; - private List actors; - - public Movie(String imdbId, String director, List actors) { - super(); - this.imdbId = imdbId; - this.director = director; - this.actors = actors; - } - - public Movie() { - super(); - } - - @Override - public String toString() { - return "Movie [imdbId=" + imdbId + ", director=" + director + ", actors=" + actors + "]"; - } - - public String getImdbId() { - return imdbId; - } - - public void setImdbId(String imdbId) { - this.imdbId = imdbId; - } - - public String getDirector() { - return director; - } - - public void setDirector(String director) { - this.director = director; - } - - public List getActors() { - return actors; - } - - public void setActors(List actors) { - this.actors = actors; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/User.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/User.java deleted file mode 100644 index d22a85aafd..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/deserialization/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.deserialization; - -public class User { - public int id; - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - // API - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/Item.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/Item.java deleted file mode 100644 index 52a73b048c..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/Item.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.serialization; - -public class Item { - public int id; - public String itemName; - public User owner; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializer.java deleted file mode 100644 index dc0b5e1c88..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.serialization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class ItemSerializer extends StdSerializer { - - private static final long serialVersionUID = 6739170890621978901L; - - public ItemSerializer() { - this(null); - } - - public ItemSerializer(final Class t) { - super(t); - } - - @Override - public final void serialize(final Item value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - jgen.writeStartObject(); - jgen.writeNumberField("id", value.id); - jgen.writeStringField("itemName", value.itemName); - jgen.writeNumberField("owner", value.owner.id); - jgen.writeEndObject(); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializerOnClass.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializerOnClass.java deleted file mode 100644 index 8f56c349f2..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemSerializerOnClass.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.serialization; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class ItemSerializerOnClass extends StdSerializer { - - private static final long serialVersionUID = -1760959597313610409L; - - public ItemSerializerOnClass() { - this(null); - } - - public ItemSerializerOnClass(final Class t) { - super(t); - } - - @Override - public final void serialize(final ItemWithSerializer value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - jgen.writeStartObject(); - jgen.writeNumberField("id", value.id); - jgen.writeStringField("itemName", value.itemName); - jgen.writeNumberField("owner", value.owner.id); - jgen.writeEndObject(); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemWithSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemWithSerializer.java deleted file mode 100644 index 5b38ad1af6..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/ItemWithSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.serialization; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -@JsonSerialize(using = ItemSerializerOnClass.class) -public class ItemWithSerializer { - public final int id; - public final String itemName; - public final User owner; - - public ItemWithSerializer(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/User.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/User.java deleted file mode 100644 index b01ccc9ffb..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/serialization/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.serialization; - -public class User { - public int id; - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - // API - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Address.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Address.java deleted file mode 100644 index a394bbc180..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Address.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.skipfields; - -public class Address implements Hidable { - private String city; - private String country; - private boolean hidden; - - public Address(final String city, final String country, final boolean hidden) { - super(); - this.city = city; - this.country = country; - this.hidden = hidden; - } - - public String getCity() { - return city; - } - - public void setCity(final String city) { - this.city = city; - } - - public String getCountry() { - return country; - } - - public void setCountry(final String country) { - this.country = country; - } - - @Override - public boolean isHidden() { - return hidden; - } - - public void setHidden(final boolean hidden) { - this.hidden = hidden; - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Hidable.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Hidable.java deleted file mode 100644 index fff7f81d1e..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Hidable.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.skipfields; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties("hidden") -public interface Hidable { - boolean isHidden(); -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/HidableSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/HidableSerializer.java deleted file mode 100644 index 8b300444c0..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/HidableSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.skipfields; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -public class HidableSerializer extends JsonSerializer { - - private JsonSerializer defaultSerializer; - - public HidableSerializer(final JsonSerializer serializer) { - defaultSerializer = serializer; - } - - @Override - public void serialize(final Hidable value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - if (value.isHidden()) - return; - defaultSerializer.serialize(value, jgen, provider); - } - - @Override - public boolean isEmpty(final SerializerProvider provider, final Hidable value) { - return (value == null || value.isHidden()); - } -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/MyDtoWithFilter.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/MyDtoWithFilter.java deleted file mode 100644 index 50492c337a..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/MyDtoWithFilter.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.skipfields; - -import com.fasterxml.jackson.annotation.JsonFilter; - -@JsonFilter("myFilter") -public class MyDtoWithFilter { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoWithFilter() { - super(); - } - - public MyDtoWithFilter(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Person.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Person.java deleted file mode 100644 index e1501947d3..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/skipfields/Person.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.skipfields; - -public class Person implements Hidable { - private String name; - private Address address; - private boolean hidden; - - public Person(final String name, final Address address, final boolean hidden) { - super(); - this.name = name; - this.address = address; - this.hidden = hidden; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public Address getAddress() { - return address; - } - - public void setAddress(final Address address) { - this.address = address; - } - - @Override - public boolean isHidden() { - return hidden; - } - - public void setHidden(final boolean hidden) { - this.hidden = hidden; - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/defaultserializercustomserializer/CallingDefaultSerializerUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/defaultserializercustomserializer/CallingDefaultSerializerUnitTest.java deleted file mode 100644 index c8b4ec7e1a..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/defaultserializercustomserializer/CallingDefaultSerializerUnitTest.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.baeldung.defaultserializercustomserializer; - -import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.io.IOException; -import java.time.Instant; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; - -public class CallingDefaultSerializerUnitTest { - - private ObjectMapper mapper; - private Folder mockFolder; - private TypeReference> mapType; - - @Before - public void setup() { - - mapType = new TypeReference>() { - }; - - mapper = new ObjectMapper(); - - mockFolder = new Folder(); - mockFolder.setId(1L); - mockFolder.setName("Root Folder"); - mockFolder.setOwner("root"); - mockFolder.setCreated(Date.from(Instant.now().minusSeconds(60))); - mockFolder.setModified(Date.from(Instant.now().minusSeconds(30))); - mockFolder.setLastAccess(Date.from(Instant.now())); - - File file1 = new File(); - file1.setId(1L); - file1.setName("File 1"); - - File file2 = new File(); - file2.setId(2L); - file2.setName("File 2"); - - List files = new ArrayList<>(); - files.add(file1); - files.add(file2); - mockFolder.setFiles(files); - - } - - @Test - public void givenFolder_whenSerialized_onlyNameAndFilesFieldsSerialized() throws IOException { - - SimpleModule module = new SimpleModule(); - module.addSerializer(new FolderSerializer()); - mapper.registerModule(module); - - String json = mapper.writeValueAsString(mockFolder); - - HashMap actual = mapper.readValue(json, mapType); - - assertTrue(actual.containsKey("name")); - assertTrue(actual.containsKey("files")); - assertEquals(mockFolder.getName(), actual.get("name")); - - List actualFiles = (List) actual.get("files"); - assertEquals(mockFolder.getFiles().size(), actualFiles.size()); - - } - - @Test - public void givenFolder_whenSerializedWithSerializerProvider_onlyNameAndFilesFieldsSerialized() throws IOException { - - SimpleModule module = new SimpleModule(); - module.addSerializer(new FolderSerializerWithSerializerProvider()); - mapper.registerModule(module); - - String json = mapper.writeValueAsString(mockFolder); - - HashMap actual = mapper.readValue(json, mapType); - - assertTrue(actual.containsKey("name")); - assertTrue(actual.containsKey("files")); - assertEquals(mockFolder.getName(), actual.get("name")); - - List actualFiles = (List) actual.get("files"); - assertEquals(mockFolder.getFiles().size(), actualFiles.size()); - - } - - @Test - public void givenFolder_whenSerializedWithInternalObjectMapper_onlyNameAndFilesFieldsSerialized() throws IOException { - - SimpleModule module = new SimpleModule(); - module.addSerializer(new FolderSerializerWithInternalObjectMapper()); - mapper.registerModule(module); - - String json = mapper.writeValueAsString(mockFolder); - - HashMap actual = mapper.readValue(json, mapType); - - assertTrue(actual.containsKey("name")); - assertTrue(actual.containsKey("files")); - assertEquals(mockFolder.getName(), actual.get("name")); - - List actualFiles = (List) actual.get("files"); - assertEquals(mockFolder.getFiles().size(), actualFiles.size()); - - } - - @Test(expected = StackOverflowError.class) - public void givenFolder_whenSerializedWithCallingOwnSerializer_exceptionOccured() throws IOException { - - SimpleModule module = new SimpleModule(); - module.addSerializer(new FolderSerializerWithCallingOwnSerializer()); - mapper.registerModule(module); - - mapper.writeValueAsString(mockFolder); - - } - - @Test - public void givenFolder_whenSerializedWithDefaultSerializerStored_NameAndFilesAndDetailsFieldsSerialized() throws IOException { - - SimpleModule module = new SimpleModule(); - module.setSerializerModifier(new FolderBeanSerializerModifier()); - mapper.registerModule(module); - - String json = mapper.writeValueAsString(mockFolder); - - HashMap actual = mapper.readValue(json, mapType); - - assertTrue(actual.containsKey("name")); - assertTrue(actual.containsKey("files")); - assertEquals(mockFolder.getName(), actual.get("name")); - - List actualFiles = (List) actual.get("files"); - assertEquals(mockFolder.getFiles().size(), actualFiles.size()); - - Map actualDetails = (Map) actual.get("details"); - assertTrue(actualDetails.containsKey("id")); - assertTrue(actualDetails.containsKey("name")); - assertTrue(actualDetails.containsKey("owner")); - assertTrue(actualDetails.containsKey("created")); - assertTrue(actualDetails.containsKey("modified")); - assertTrue(actualDetails.containsKey("lastAccess")); - - assertEquals(mockFolder.getId().longValue(), ((Number)actualDetails.get("id")).longValue()); - assertEquals(mockFolder.getName(), actualDetails.get("name")); - assertEquals(mockFolder.getOwner(), actualDetails.get("owner")); - assertEquals(mockFolder.getCreated(), new Date((long) actualDetails.get("created"))); - assertEquals(mockFolder.getModified(), new Date((long) actualDetails.get("modified"))); - assertEquals(mockFolder.getLastAccess(), new Date((long) actualDetails.get("lastAccess"))); - - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java deleted file mode 100644 index 17016149a2..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.deserialization; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.module.SimpleModule; -import org.junit.Test; - -import java.io.IOException; -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -public class CustomDeserializationUnitTest { - - @Test - public final void whenDeserializingTheStandardRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String json = "{\"id\":1,\"itemName\":\"theItem\",\"owner\":{\"id\":2,\"name\":\"theUser\"}}"; - - final Item readValue = new ObjectMapper().readValue(json, Item.class); - assertThat(readValue, notNullValue()); - } - - @Test - public final void whenDeserializingANonStandardRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String json = "{\"id\":1,\"itemName\":\"theItem\",\"createdBy\":2}"; - final ObjectMapper mapper = new ObjectMapper(); - - final SimpleModule module = new SimpleModule(); - module.addDeserializer(Item.class, new ItemDeserializer()); - mapper.registerModule(module); - - final Item readValue = mapper.readValue(json, Item.class); - assertThat(readValue, notNullValue()); - } - - @Test - public final void givenDeserializerIsOnClass_whenDeserializingCustomRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String json = "{\"id\":1,\"itemName\":\"theItem\",\"owner\":2}"; - - final ItemWithDeserializer readValue = new ObjectMapper().readValue(json, ItemWithDeserializer.class); - assertThat(readValue, notNullValue()); - } - - @Test - public void whenDeserialisingZonedDateTimeWithDefaults_thenTimeZoneIsNotPreserved() throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - // construct a new instance of ZonedDateTime - ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); - String converted = objectMapper.writeValueAsString(now); - // restore an instance of ZonedDateTime from String - ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class); - assertThat(now, is(not(restored))); - } - - @Test - public void whenDeserialisingZonedDateTimeWithFeaturesDisabled_thenTimeZoneIsPreserved() throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - objectMapper.enable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID); - objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); - // construct a new instance of ZonedDateTime - ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); - String converted = objectMapper.writeValueAsString(now); - // restore an instance of ZonedDateTime from String - ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class); - assertThat(restored, is(now)); - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java deleted file mode 100644 index 9c46a86fd8..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.serialization; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.util.List; -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.google.common.collect.Lists; - -public class CustomSerializationUnitTest { - - @Test - public final void whenSerializing_thenNoExceptions() throws JsonGenerationException, JsonMappingException, IOException { - final Item myItem = new Item(1, "theItem", new User(2, "theUser")); - final String serialized = new ObjectMapper().writeValueAsString(myItem); - } - - @Test - public final void whenSerializingWithCustomSerializer_thenNoExceptions() throws JsonGenerationException, JsonMappingException, IOException { - final Item myItem = new Item(1, "theItem", new User(2, "theUser")); - - final ObjectMapper mapper = new ObjectMapper(); - - final SimpleModule simpleModule = new SimpleModule(); - simpleModule.addSerializer(Item.class, new ItemSerializer()); - mapper.registerModule(simpleModule); - - final String serialized = mapper.writeValueAsString(myItem); - } - - @Test - public final void givenSerializerRegisteredOnClass_whenSerializingWithCustomSerializer_thenNoExceptions() throws JsonGenerationException, JsonMappingException, IOException { - final ItemWithSerializer myItem = new ItemWithSerializer(1, "theItem", new User(2, "theUser")); - - final String serialized = new ObjectMapper().writeValueAsString(myItem); - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java deleted file mode 100644 index ec753019b2..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.baeldung.skipfields; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; -import com.fasterxml.jackson.databind.ser.FilterProvider; -import com.fasterxml.jackson.databind.ser.PropertyFilter; -import com.fasterxml.jackson.databind.ser.PropertyWriter; -import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; -import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; -import org.junit.Test; - -import java.io.IOException; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -public class IgnoreFieldsWithFilterUnitTest { - - @Test - public final void givenTypeHasFilterThatIgnoresFieldByName_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("intValue"); - final FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); - - final MyDtoWithFilter dtoObject = new MyDtoWithFilter(); - dtoObject.setIntValue(12); - - final String dtoAsString = mapper.writer(filters) - .writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, containsString("stringValue")); - } - - @Test - public final void givenTypeHasFilterThatIgnoresNegativeInt_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final PropertyFilter theFilter = new SimpleBeanPropertyFilter() { - @Override - public final void serializeAsField(final Object pojo, final JsonGenerator jgen, final SerializerProvider provider, final PropertyWriter writer) throws Exception { - if (include(writer)) { - if (!writer.getName() - .equals("intValue")) { - writer.serializeAsField(pojo, jgen, provider); - return; - } - - final int intValue = ((MyDtoWithFilter) pojo).getIntValue(); - if (intValue >= 0) { - writer.serializeAsField(pojo, jgen, provider); - } - } else if (!jgen.canOmitFields()) { // since 2.3 - writer.serializeAsOmittedField(pojo, jgen, provider); - } - } - - @Override - protected final boolean include(final BeanPropertyWriter writer) { - return true; - } - - @Override - protected final boolean include(final PropertyWriter writer) { - return true; - } - }; - final FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); - - final MyDtoWithFilter dtoObject = new MyDtoWithFilter(); - dtoObject.setIntValue(-1); - - final ObjectMapper mapper = new ObjectMapper(); - final String dtoAsString = mapper.writer(filters) - .writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, containsString("stringValue")); - } - -} diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java deleted file mode 100644 index 2fd59e2a82..0000000000 --- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.baeldung.skipfields; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; - -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.BeanDescription; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; - -public class JacksonDynamicIgnoreUnitTest { - - private ObjectMapper mapper = new ObjectMapper(); - - @Before - public void setUp() { - mapper.setSerializationInclusion(Include.NON_EMPTY); - mapper.registerModule(new SimpleModule() { - @Override - public void setupModule(final SetupContext context) { - super.setupModule(context); - context.addBeanSerializerModifier(new BeanSerializerModifier() { - @Override - public JsonSerializer modifySerializer(final SerializationConfig config, final BeanDescription beanDesc, final JsonSerializer serializer) { - if (Hidable.class.isAssignableFrom(beanDesc.getBeanClass())) { - return new HidableSerializer((JsonSerializer) serializer); - } - return serializer; - } - }); - } - }); - } - - @Test - public void whenNotHidden_thenCorrect() throws JsonProcessingException { - final Address ad = new Address("ny", "usa", false); - final Person person = new Person("john", ad, false); - final String result = mapper.writeValueAsString(person); - - assertTrue(result.contains("name")); - assertTrue(result.contains("john")); - assertTrue(result.contains("address")); - assertTrue(result.contains("usa")); - } - - @Test - public void whenAddressHidden_thenCorrect() throws JsonProcessingException { - final Address ad = new Address("ny", "usa", true); - final Person person = new Person("john", ad, false); - final String result = mapper.writeValueAsString(person); - - assertTrue(result.contains("name")); - assertTrue(result.contains("john")); - assertFalse(result.contains("address")); - assertFalse(result.contains("usa")); - } - - @Test - public void whenAllHidden_thenCorrect() throws JsonProcessingException { - final Address ad = new Address("ny", "usa", false); - final Person person = new Person("john", ad, true); - final String result = mapper.writeValueAsString(person); - - assertTrue(result.length() == 0); - } - - @Test - public void whenSerializeList_thenCorrect() throws JsonProcessingException { - final Address ad1 = new Address("tokyo", "jp", true); - final Address ad2 = new Address("london", "uk", false); - final Address ad3 = new Address("ny", "usa", false); - final Person p1 = new Person("john", ad1, false); - final Person p2 = new Person("tom", ad2, true); - final Person p3 = new Person("adam", ad3, false); - - final String result = mapper.writeValueAsString(Arrays.asList(p1, p2, p3)); - } -} diff --git a/jackson-modules/jackson-exceptions/README.md b/jackson-modules/jackson-exceptions/README.md deleted file mode 100644 index 6f082aaaa5..0000000000 --- a/jackson-modules/jackson-exceptions/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Jackson Exceptions - -This module contains articles about Jackson exceptions. - -### Relevant Articles: -- [Jackson Exceptions – Problems and Solutions](https://www.baeldung.com/jackson-exception) -- [Jackson – JsonMappingException (No serializer found for class)](https://www.baeldung.com/jackson-jsonmappingexception) diff --git a/jackson-modules/jackson-exceptions/pom.xml b/jackson-modules/jackson-exceptions/pom.xml deleted file mode 100644 index bb2a9b1810..0000000000 --- a/jackson-modules/jackson-exceptions/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - 4.0.0 - jackson-exceptions - 0.0.1-SNAPSHOT - jackson-exceptions - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - jackson-exceptions - - - src/main/resources - true - - - - - \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/User.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/User.java deleted file mode 100644 index e0e77c658e..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.exceptions; - -public class User { - public int id; - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - // API - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithConflict.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithConflict.java deleted file mode 100644 index 5adbb7b01e..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithConflict.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.exceptions; - -public class UserWithConflict { - public int id; - public String name; - boolean checked; - - public UserWithConflict() { - super(); - } - - public UserWithConflict(final int id, final String name, final boolean checked) { - this.id = id; - this.name = name; - this.checked = checked; - } - - public boolean getChecked() { - return checked; - } - - public boolean isChecked() { - return checked; - } -} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithNoDefaultConstructor.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithNoDefaultConstructor.java deleted file mode 100644 index c75b06ed6a..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithNoDefaultConstructor.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.exceptions; - -public class UserWithNoDefaultConstructor { - - private int id; - private String name; - - public UserWithNoDefaultConstructor(final int id, final String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithPrivateFields.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithPrivateFields.java deleted file mode 100644 index c10020bd85..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithPrivateFields.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.exceptions; - -public class UserWithPrivateFields { - int id; - String name; - - public UserWithPrivateFields() { - super(); - } - - public UserWithPrivateFields(final int id, final String name) { - this.id = id; - this.name = name; - } - -} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithRoot.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithRoot.java deleted file mode 100644 index cadcd43a72..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/UserWithRoot.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.exceptions; - -import com.fasterxml.jackson.annotation.JsonRootName; - -@JsonRootName(value = "user") -public class UserWithRoot { - public int id; - public String name; - - public UserWithRoot() { - super(); - } - - public UserWithRoot(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/Zoo.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/Zoo.java deleted file mode 100644 index 3e729a1d2f..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/Zoo.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.exceptions; - -public class Zoo { - public Animal animal; - - public Zoo() { - } -} - -abstract class Animal { - public String name; - - public Animal() { - } -} - -class Cat extends Animal { - public int lives; - - public Cat() { - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/ZooConfigured.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/ZooConfigured.java deleted file mode 100644 index 31c2ce4d4c..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/exceptions/ZooConfigured.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.exceptions; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -public class ZooConfigured { - public AnimalConfigured animal; - - public ZooConfigured() { - } -} - -@JsonDeserialize(as = CatConfigured.class) -abstract class AnimalConfigured { - public String name; - - public AnimalConfigured() { - } -} - -class CatConfigured extends AnimalConfigured { - public int lives; - - public CatConfigured() { - } -} \ No newline at end of file diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessors.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessors.java deleted file mode 100644 index 17bc5257fb..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessors.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.mappingexception; - -public class MyDtoNoAccessors { - - String stringValue; - int intValue; - boolean booleanValue; - - public MyDtoNoAccessors() { - super(); - } - - public MyDtoNoAccessors(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessorsAndFieldVisibility.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessorsAndFieldVisibility.java deleted file mode 100644 index cf5d5ca500..0000000000 --- a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/MyDtoNoAccessorsAndFieldVisibility.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.mappingexception; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; - -@JsonAutoDetect(fieldVisibility = Visibility.ANY) -public class MyDtoNoAccessorsAndFieldVisibility { - - String stringValue; - int intValue; - boolean booleanValue; - - public MyDtoNoAccessorsAndFieldVisibility() { - super(); - } - - public MyDtoNoAccessorsAndFieldVisibility(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/exceptions/JacksonExceptionsUnitTest.java b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/exceptions/JacksonExceptionsUnitTest.java deleted file mode 100644 index 38ef3f9390..0000000000 --- a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/exceptions/JacksonExceptionsUnitTest.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.baeldung.exceptions; - -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.util.List; - -import org.junit.Test; - -import com.baeldung.exceptions.User; -import com.baeldung.exceptions.UserWithPrivateFields; -import com.baeldung.exceptions.UserWithRoot; -import com.baeldung.exceptions.Zoo; -import com.baeldung.exceptions.ZooConfigured; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; - -public class JacksonExceptionsUnitTest { - - // JsonMappingException: Can not construct instance of - @Test(expected = JsonMappingException.class) - public void givenAbstractClass_whenDeserializing_thenException() throws IOException { - final String json = "{\"animal\":{\"name\":\"lacy\"}}"; - final ObjectMapper mapper = new ObjectMapper(); - - mapper.reader() - .forType(Zoo.class) - .readValue(json); - } - - @Test - public void givenAbstractClassConfigured_whenDeserializing_thenCorrect() throws IOException { - final String json = "{\"animal\":{\"name\":\"lacy\"}}"; - final ObjectMapper mapper = new ObjectMapper(); - - mapper.reader() - .forType(ZooConfigured.class) - .readValue(json); - } - - // JsonMappingException: No serializer found for class - @Test(expected = JsonMappingException.class) - public void givenClassWithPrivateFields_whenSerializing_thenException() throws IOException { - final UserWithPrivateFields user = new UserWithPrivateFields(1, "John"); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.writer() - .writeValueAsString(user); - } - - @Test - public void givenClassWithPrivateFields_whenConfigureSerializing_thenCorrect() throws IOException { - final UserWithPrivateFields user = new UserWithPrivateFields(1, "John"); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - - final String result = mapper.writer() - .writeValueAsString(user); - assertThat(result, containsString("John")); - } - - // JsonMappingException: No suitable constructor found - @Test(expected = JsonMappingException.class) - public void givenNoDefaultConstructor_whenDeserializing_thenException() throws IOException { - final String json = "{\"id\":1,\"name\":\"John\"}"; - final ObjectMapper mapper = new ObjectMapper(); - - mapper.reader() - .forType(UserWithNoDefaultConstructor.class) - .readValue(json); - } - - @Test - public void givenDefaultConstructor_whenDeserializing_thenCorrect() throws IOException { - final String json = "{\"id\":1,\"name\":\"John\"}"; - final ObjectMapper mapper = new ObjectMapper(); - - final User user = mapper.reader() - .forType(User.class) - .readValue(json); - assertEquals("John", user.name); - } - - // JsonMappingException: Root name does not match expected - @Test(expected = JsonMappingException.class) - public void givenWrappedJsonString_whenDeserializing_thenException() throws IOException { - final String json = "{\"user\":{\"id\":1,\"name\":\"John\"}}"; - - final ObjectMapper mapper = new ObjectMapper(); - mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE); - - mapper.reader() - .forType(User.class) - .readValue(json); - } - - @Test - public void givenWrappedJsonStringAndConfigureClass_whenDeserializing_thenCorrect() throws IOException { - final String json = "{\"user\":{\"id\":1,\"name\":\"John\"}}"; - - final ObjectMapper mapper = new ObjectMapper(); - mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE); - - final UserWithRoot user = mapper.reader() - .forType(UserWithRoot.class) - .readValue(json); - assertEquals("John", user.name); - } - - // JsonMappingException: Can not deserialize instance of - @Test(expected = JsonMappingException.class) - public void givenJsonOfArray_whenDeserializing_thenException() throws JsonProcessingException, IOException { - final String json = "[{\"id\":1,\"name\":\"John\"},{\"id\":2,\"name\":\"Adam\"}]"; - final ObjectMapper mapper = new ObjectMapper(); - - mapper.reader() - .forType(User.class) - .readValue(json); - } - - @Test - public void givenJsonOfArray_whenDeserializing_thenCorrect() throws JsonProcessingException, IOException { - final String json = "[{\"id\":1,\"name\":\"John\"},{\"id\":2,\"name\":\"Adam\"}]"; - final ObjectMapper mapper = new ObjectMapper(); - - final List users = mapper.reader() - .forType(new TypeReference>() { - }) - .readValue(json); - - assertEquals(2, users.size()); - } - - // UnrecognizedPropertyException - @Test(expected = UnrecognizedPropertyException.class) - public void givenJsonStringWithExtra_whenDeserializing_thenException() throws IOException { - final String json = "{\"id\":1,\"name\":\"John\", \"checked\":true}"; - - final ObjectMapper mapper = new ObjectMapper(); - mapper.reader() - .forType(User.class) - .readValue(json); - } - - @Test - public void givenJsonStringWithExtra_whenConfigureDeserializing_thenCorrect() throws IOException { - final String json = "{\"id\":1,\"name\":\"John\", \"checked\":true}"; - - final ObjectMapper mapper = new ObjectMapper(); - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - - final User user = mapper.reader() - .forType(User.class) - .readValue(json); - assertEquals("John", user.name); - } - - // JsonParseException: Unexpected character (''' (code 39)) - @Test(expected = JsonParseException.class) - public void givenStringWithSingleQuotes_whenDeserializing_thenException() throws JsonProcessingException, IOException { - final String json = "{'id':1,'name':'John'}"; - final ObjectMapper mapper = new ObjectMapper(); - - mapper.reader() - .forType(User.class) - .readValue(json); - } - - @Test - public void givenStringWithSingleQuotes_whenConfigureDeserializing_thenCorrect() throws JsonProcessingException, IOException { - final String json = "{'id':1,'name':'John'}"; - - final JsonFactory factory = new JsonFactory(); - factory.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); - final ObjectMapper mapper = new ObjectMapper(factory); - - final User user = mapper.reader() - .forType(User.class) - .readValue(json); - assertEquals("John", user.name); - } - -} diff --git a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java deleted file mode 100644 index df35626828..0000000000 --- a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.mappingexception; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.util.List; -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.google.common.collect.Lists; - -public class JacksonMappingExceptionUnitTest { - - @Test(expected = JsonMappingException.class) - public final void givenObjectHasNoAccessors_whenSerializing_thenException() throws JsonParseException, IOException { - final String dtoAsString = new ObjectMapper().writeValueAsString(new MyDtoNoAccessors()); - - assertThat(dtoAsString, notNullValue()); - } - - @Test - public final void givenObjectHasNoAccessors_whenSerializingWithPrivateFieldsVisibility_thenNoException() throws JsonParseException, IOException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - final String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors()); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("stringValue")); - assertThat(dtoAsString, containsString("booleanValue")); - } - - @Test - public final void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_thenNoException() throws JsonParseException, IOException { - final ObjectMapper objectMapper = new ObjectMapper(); - final String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessorsAndFieldVisibility()); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("stringValue")); - assertThat(dtoAsString, containsString("booleanValue")); - } - -} diff --git a/jackson-modules/jackson/README.md b/jackson-modules/jackson/README.md deleted file mode 100644 index 5fa0e1e7d9..0000000000 --- a/jackson-modules/jackson/README.md +++ /dev/null @@ -1,14 +0,0 @@ -## Jackson 相关文章和实例 - -这个模块主要是针对 Jackson 有关的文章 - -### 相关课程和讨论 - -有关 "计算机设计相关的课程" :https://www.ossez.com/ - -### 相关文章 -- [Using Optional with Jackson](https://www.baeldung.com/jackson-optional) -- [Compare Two JSON Objects with Jackson](https://www.baeldung.com/jackson-compare-two-json-objects) -- [Jackson vs Gson](https://www.baeldung.com/jackson-vs-gson) -- [Inheritance with Jackson](https://www.baeldung.com/jackson-inheritance) -- [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model) diff --git a/jackson-modules/jackson/pom.xml b/jackson-modules/jackson/pom.xml deleted file mode 100644 index fdf0c30749..0000000000 --- a/jackson-modules/jackson/pom.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - 4.0.0 - jackson - 0.0.1-SNAPSHOT - jackson - - - com.ossez - jackson-modules - 0.0.2-SNAPSHOT - - - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson.version} - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - ${jackson.version} - - - com.fasterxml.jackson.module - jackson-module-jsonSchema - ${jackson.version} - - - com.fasterxml.jackson.datatype - jackson-datatype-jdk8 - ${jackson.version} - - - - io.rest-assured - json-schema-validator - ${rest-assured.version} - test - - - io.rest-assured - json-path - ${rest-assured.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - - - jackson - - - src/main/resources - true - - - - - - - - - \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jacksoninject/Person.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jacksoninject/Person.java deleted file mode 100644 index 154d994b12..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jacksoninject/Person.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ossez.jackson.deserialization.jacksoninject; - -import com.fasterxml.jackson.annotation.JacksonInject; - -import java.util.UUID; - -public class Person { - - @JacksonInject - private UUID id; - private String firstName; - private String lastName; - - public Person() { - - } - - public Person(String firstName, String lastName) { - this.id = UUID.randomUUID(); - this.firstName = firstName; - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public UUID getId() { - return id; - } -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsonanysetter/Inventory.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsonanysetter/Inventory.java deleted file mode 100644 index 390da8a2e2..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsonanysetter/Inventory.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.deserialization.jsonanysetter; - -import java.util.HashMap; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonAnySetter; - -public class Inventory { - - private Map countryDeliveryCost = new HashMap<>(); - - public Map getCountryDeliveryCost() { - return countryDeliveryCost; - } - - @JsonAnySetter - public void addCountryDeliveryCost(String country, Float cost) { - countryDeliveryCost.put(country, cost); - } -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/Book.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/Book.java deleted file mode 100644 index 4d47d79d7b..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/Book.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.ossez.jackson.deserialization.jsondeserialize; - -import java.math.BigDecimal; -import java.util.Date; -import java.util.UUID; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -public class Book { - - private UUID id; - private String title; - private float price; - private String ISBN; - - @JsonDeserialize(using = CustomDateDeserializer.class) - private Date published; - private BigDecimal pages; - - public Book() { - } - - public Book(String title) { - this.id = UUID.randomUUID(); - this.title = title; - } - - public String getISBN() { - return ISBN; - } - - public void setISBN(String ISBN) { - this.ISBN = ISBN; - } - - public Date getPublished() { - return published; - } - - public void setPublished(Date published) { - this.published = published; - } - - public BigDecimal getPages() { - return pages; - } - - public void setPages(BigDecimal pages) { - this.pages = pages; - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public float getPrice() { - return price; - } - - public void setPrice(float price) { - this.price = price; - } -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/CustomDateDeserializer.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/CustomDateDeserializer.java deleted file mode 100644 index 762d198457..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/deserialization/jsondeserialize/CustomDateDeserializer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.deserialization.jsondeserialize; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class CustomDateDeserializer extends StdDeserializer { - - private static SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); - - public CustomDateDeserializer() { - this(null); - } - - public CustomDateDeserializer(Class vc) { - super(vc); - } - - @Override - public Date deserialize(JsonParser jsonparser, DeserializationContext context) throws IOException { - String date = jsonparser.getText(); - try { - return formatter.parse(date); - } catch (ParseException e) { - throw new RuntimeException(e); - } - } -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/domain/Person.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/domain/Person.java deleted file mode 100644 index 026d52cfaa..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/domain/Person.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.jackson.domain; - -public class Person { - - private String firstName; - private String lastName; - - public Person(String firstName, String lastName) { - super(); - this.firstName = firstName; - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } -} - diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/Event.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/Event.java deleted file mode 100644 index 8843bcc287..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/Event.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, property = "eventType") -abstract public class Event { - private final String id; - private final Long timestamp; - - @JsonCreator - public Event(@JsonProperty("id") String id, @JsonProperty("timestamp") Long timestamp) { - this.id = id; - this.timestamp = timestamp; - } - - public Long getTimestamp() { - return timestamp; - } - - public String getId() { - return id; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceAnnotationStructure.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceAnnotationStructure.java deleted file mode 100644 index 87cab760ce..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceAnnotationStructure.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -public class IgnoranceAnnotationStructure { - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle() { - } - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - @JsonIgnoreProperties({ "model", "seatingCapacity" }) - public static abstract class Car extends Vehicle { - private int seatingCapacity; - @JsonIgnore - private double topSpeed; - - protected Car() { - } - - protected Car(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Sedan extends Car { - public Sedan() { - } - - public Sedan(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model, seatingCapacity, topSpeed); - } - } - - public static class Crossover extends Car { - private double towingCapacity; - - public Crossover() { - } - - public Crossover(String make, String model, int seatingCapacity, double topSpeed, double towingCapacity) { - super(make, model, seatingCapacity, topSpeed); - this.towingCapacity = towingCapacity; - } - - public double getTowingCapacity() { - return towingCapacity; - } - - public void setTowingCapacity(double towingCapacity) { - this.towingCapacity = towingCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceMixinOrIntrospection.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceMixinOrIntrospection.java deleted file mode 100644 index aa352d79a0..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/IgnoranceMixinOrIntrospection.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.ossez.jackson.inheritance; - -public class IgnoranceMixinOrIntrospection { - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle() { - } - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - public static abstract class Car extends Vehicle { - private int seatingCapacity; - private double topSpeed; - - protected Car() { - } - - protected Car(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Sedan extends Car { - public Sedan() { - } - - public Sedan(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model, seatingCapacity, topSpeed); - } - } - - public static class Crossover extends Car { - private double towingCapacity; - - public Crossover() { - } - - public Crossover(String make, String model, int seatingCapacity, double topSpeed, double towingCapacity) { - super(make, model, seatingCapacity, topSpeed); - this.towingCapacity = towingCapacity; - } - - public double getTowingCapacity() { - return towingCapacity; - } - - public void setTowingCapacity(double towingCapacity) { - this.towingCapacity = towingCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdAddedToUser.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdAddedToUser.java deleted file mode 100644 index 1a5afa72b1..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdAddedToUser.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeName; - -@JsonTypeName("itemIdAddedToUser") -@JsonIgnoreProperties("id") -public class ItemIdAddedToUser extends Event { - private final String itemId; - private final Long quantity; - - @JsonCreator - public ItemIdAddedToUser(@JsonProperty("id") String id, @JsonProperty("timestamp") Long timestamp, @JsonProperty("itemId") String itemId, @JsonProperty("quantity") Long quantity) { - super(id, timestamp); - this.itemId = itemId; - this.quantity = quantity; - } - - public String getItemId() { - return itemId; - } - - public Long getQuantity() { - return quantity; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUser.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUser.java deleted file mode 100644 index 88e2c7968f..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUser.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeName; - -@JsonTypeName("itemIdRemovedFromUser") -public class ItemIdRemovedFromUser extends Event { - private final String itemId; - private final Long quantity; - - @JsonCreator - public ItemIdRemovedFromUser(@JsonProperty("id") String id, @JsonProperty("timestamp") Long timestamp, @JsonProperty("itemId") String itemId, @JsonProperty("quantity") Long quantity) { - super(id, timestamp); - this.itemId = itemId; - this.quantity = quantity; - } - - public String getItemId() { - return itemId; - } - - public Long getQuantity() { - return quantity; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConstructorStructure.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConstructorStructure.java deleted file mode 100644 index afca1443de..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConstructorStructure.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.ossez.jackson.inheritance; - -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class SubTypeConstructorStructure { - public static class Fleet { - private List vehicles; - - public List getVehicles() { - return vehicles; - } - - public void setVehicles(List vehicles) { - this.vehicles = vehicles; - } - } - - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - public static class Car extends Vehicle { - private int seatingCapacity; - private double topSpeed; - - @JsonCreator - public Car(@JsonProperty("make") String make, @JsonProperty("model") String model, @JsonProperty("seating") int seatingCapacity, @JsonProperty("topSpeed") double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Truck extends Vehicle { - private double payloadCapacity; - - @JsonCreator - public Truck(@JsonProperty("make") String make, @JsonProperty("model") String model, @JsonProperty("payload") double payloadCapacity) { - super(make, model); - this.payloadCapacity = payloadCapacity; - } - - public double getPayloadCapacity() { - return payloadCapacity; - } - - public void setPayloadCapacity(double payloadCapacity) { - this.payloadCapacity = payloadCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConversionStructure.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConversionStructure.java deleted file mode 100644 index 006fc79111..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/SubTypeConversionStructure.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class SubTypeConversionStructure { - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle() { - } - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - public static class Car extends Vehicle { - @JsonIgnore - private int seatingCapacity; - @JsonIgnore - private double topSpeed; - - public Car() { - } - - public Car(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Truck extends Vehicle { - @JsonIgnore - private double payloadCapacity; - - public Truck() { - } - - public Truck(String make, String model, double payloadCapacity) { - super(make, model); - this.payloadCapacity = payloadCapacity; - } - - public double getPayloadCapacity() { - return payloadCapacity; - } - - public void setPayloadCapacity(double payloadCapacity) { - this.payloadCapacity = payloadCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoAnnotatedStructure.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoAnnotatedStructure.java deleted file mode 100644 index b9b730f49f..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoAnnotatedStructure.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.ossez.jackson.inheritance; - -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; - -public class TypeInfoAnnotatedStructure { - public static class Fleet { - private List vehicles; - - public List getVehicles() { - return vehicles; - } - - public void setVehicles(List vehicles) { - this.vehicles = vehicles; - } - } - - @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") - @JsonSubTypes({ @Type(value = Car.class, name = "car"), @Type(value = Truck.class, name = "truck") }) - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle() { - } - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - public static class Car extends Vehicle { - private int seatingCapacity; - private double topSpeed; - - public Car() { - } - - public Car(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Truck extends Vehicle { - private double payloadCapacity; - - public Truck() { - } - - public Truck(String make, String model, double payloadCapacity) { - super(make, model); - this.payloadCapacity = payloadCapacity; - } - - public double getPayloadCapacity() { - return payloadCapacity; - } - - public void setPayloadCapacity(double payloadCapacity) { - this.payloadCapacity = payloadCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoStructure.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoStructure.java deleted file mode 100644 index d2af497313..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/inheritance/TypeInfoStructure.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.ossez.jackson.inheritance; - -import java.util.List; - -public class TypeInfoStructure { - public static class Fleet { - private List vehicles; - - public List getVehicles() { - return vehicles; - } - - public void setVehicles(List vehicles) { - this.vehicles = vehicles; - } - } - - public static abstract class Vehicle { - private String make; - private String model; - - protected Vehicle() { - } - - protected Vehicle(String make, String model) { - this.make = make; - this.model = model; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - } - - public static class Car extends Vehicle { - private int seatingCapacity; - private double topSpeed; - - public Car() { - } - - public Car(String make, String model, int seatingCapacity, double topSpeed) { - super(make, model); - this.seatingCapacity = seatingCapacity; - this.topSpeed = topSpeed; - } - - public int getSeatingCapacity() { - return seatingCapacity; - } - - public void setSeatingCapacity(int seatingCapacity) { - this.seatingCapacity = seatingCapacity; - } - - public double getTopSpeed() { - return topSpeed; - } - - public void setTopSpeed(double topSpeed) { - this.topSpeed = topSpeed; - } - } - - public static class Truck extends Vehicle { - private double payloadCapacity; - - public Truck() { - } - - public Truck(String make, String model, double payloadCapacity) { - super(make, model); - this.payloadCapacity = payloadCapacity; - } - - public double getPayloadCapacity() { - return payloadCapacity; - } - - public void setPayloadCapacity(double payloadCapacity) { - this.payloadCapacity = payloadCapacity; - } - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJackson.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJackson.java deleted file mode 100644 index 4338159b18..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJackson.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.TimeZone; - -public class ActorJackson { - - private String imdbId; - private Date dateOfBirth; - private List filmography; - - public ActorJackson() { - super(); - } - - public ActorJackson(String imdbId, Date dateOfBirth, List filmography) { - super(); - this.imdbId = imdbId; - this.dateOfBirth = dateOfBirth; - this.filmography = filmography; - } - - @Override - public String toString() { - return "ActorJackson [imdbId=" + imdbId + ", dateOfBirth=" + formatDateOfBirth() + ", filmography=" + filmography + "]"; - } - - public String getImdbId() { - return imdbId; - } - - public void setImdbId(String imdbId) { - this.imdbId = imdbId; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public List getFilmography() { - return filmography; - } - - public void setFilmography(List filmography) { - this.filmography = filmography; - } - - private String formatDateOfBirth() { - final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy", Locale.US); - formatter.setTimeZone(TimeZone.getTimeZone("GMT")); - return formatter.format(dateOfBirth); - } -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJacksonSerializer.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJacksonSerializer.java deleted file mode 100644 index bb67092bd9..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/ActorJacksonSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.stream.Collectors; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class ActorJacksonSerializer extends StdSerializer { - - private SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - - public ActorJacksonSerializer(Class t) { - super(t); - } - - @Override - public void serialize(ActorJackson actor, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { - - jsonGenerator.writeStartObject(); - jsonGenerator.writeStringField("imdbId", actor.getImdbId()); - jsonGenerator.writeObjectField("dateOfBirth", actor.getDateOfBirth() != null ? sdf.format(actor.getDateOfBirth()) : null); - jsonGenerator.writeNumberField("N° Film: ", actor.getFilmography() != null ? actor.getFilmography() - .size() : null); - jsonGenerator.writeStringField("filmography", actor.getFilmography() - .stream() - .collect(Collectors.joining("-"))); - jsonGenerator.writeEndObject(); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/Movie.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/Movie.java deleted file mode 100644 index 6d0feb0a32..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/Movie.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import java.util.List; - -public class Movie { - - private String imdbId; - private String director; - private List actors; - - public Movie(String imdbId, String director, List actors) { - super(); - this.imdbId = imdbId; - this.director = director; - this.actors = actors; - } - - public Movie() { - super(); - } - - @Override - public String toString() { - return "Movie [imdbId=" + imdbId + ", director=" + director + ", actors=" + actors + "]"; - } - - public String getImdbId() { - return imdbId; - } - - public void setImdbId(String imdbId) { - this.imdbId = imdbId; - } - - public String getDirector() { - return director; - } - - public void setDirector(String director) { - this.director = director; - } - - public List getActors() { - return actors; - } - - public void setActors(List actors) { - this.actors = actors; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/MovieWithNullValue.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/MovieWithNullValue.java deleted file mode 100644 index 2f6dceb6fe..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/jacksonvsgson/MovieWithNullValue.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.List; - -public class MovieWithNullValue { - - private String imdbId; - - @JsonIgnore - private String director; - - private List actors; - - public MovieWithNullValue(String imdbID, String director, List actors) { - super(); - this.imdbId = imdbID; - this.director = director; - this.actors = actors; - } - - public String getImdbID() { - return imdbId; - } - - public void setImdbID(String imdbID) { - this.imdbId = imdbID; - } - - public String getDirector() { - return director; - } - - public void setDirector(String director) { - this.director = director; - } - - public List getActors() { - return actors; - } - - public void setActors(List actors) { - this.actors = actors; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/node/JsonNodeIterator.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/node/JsonNodeIterator.java deleted file mode 100644 index a368e0adb0..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/node/JsonNodeIterator.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ossez.jackson.node; - -import java.util.Iterator; -import java.util.Map.Entry; - -import com.fasterxml.jackson.databind.JsonNode; - -public class JsonNodeIterator { - - private static final String NEW_LINE = "\n"; - private static final String FIELD_DELIMITER = ": "; - private static final String ARRAY_PREFIX = "- "; - private static final String YAML_PREFIX = " "; - - public String toYaml(JsonNode root) { - StringBuilder yaml = new StringBuilder(); - processNode(root, yaml, 0); - return yaml.toString(); - } - - private void processNode(JsonNode jsonNode, StringBuilder yaml, int depth) { - if (jsonNode.isValueNode()) { - yaml.append(jsonNode.asText()); - } - else if (jsonNode.isArray()) { - for (JsonNode arrayItem : jsonNode) { - appendNodeToYaml(arrayItem, yaml, depth, true); - } - } - else if (jsonNode.isObject()) { - appendNodeToYaml(jsonNode, yaml, depth, false); - } - } - - private void appendNodeToYaml(JsonNode node, StringBuilder yaml, int depth, boolean isArrayItem) { - Iterator> fields = node.fields(); - boolean isFirst = true; - while (fields.hasNext()) { - Entry jsonField = fields.next(); - addFieldNameToYaml(yaml, jsonField.getKey(), depth, isArrayItem && isFirst); - processNode(jsonField.getValue(), yaml, depth+1); - isFirst = false; - } - - } - - private void addFieldNameToYaml(StringBuilder yaml, String fieldName, int depth, boolean isFirstInArray) { - if (yaml.length()>0) { - yaml.append(NEW_LINE); - int requiredDepth = (isFirstInArray) ? depth-1 : depth; - for(int i = 0; i < requiredDepth; i++) { - yaml.append(YAML_PREFIX); - } - if (isFirstInArray) { - yaml.append(ARRAY_PREFIX); - } - } - yaml.append(fieldName); - yaml.append(FIELD_DELIMITER); - } - -} diff --git a/jackson-modules/jackson/src/main/java/com/ossez/jackson/optionalwithjackson/Book.java b/jackson-modules/jackson/src/main/java/com/ossez/jackson/optionalwithjackson/Book.java deleted file mode 100644 index aeda5c9b92..0000000000 --- a/jackson-modules/jackson/src/main/java/com/ossez/jackson/optionalwithjackson/Book.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.optionalwithjackson; - -import java.util.Optional; - -public class Book { - - private String title; - private Optional subTitle; - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Optional getSubTitle() { - return subTitle; - } - - public void setSubTitle(Optional subTitle) { - this.subTitle = subTitle; - } -} diff --git a/jackson-modules/jackson/src/main/resources/example1.json b/jackson-modules/jackson/src/main/resources/example1.json deleted file mode 100644 index 46d2982cec..0000000000 --- a/jackson-modules/jackson/src/main/resources/example1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "collection": [ - { - "name": "Test order1", - "detail": "ahk ks" - }, - { - "name": "Test order2", - "detail": "Fisteku" - } - ] -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/resources/example2.json b/jackson-modules/jackson/src/main/resources/example2.json deleted file mode 100644 index f4433731e6..0000000000 --- a/jackson-modules/jackson/src/main/resources/example2.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "name": "Test order1", - "detail": "ahk ks" - }, - { - "name": "Test order2", - "detail": "Fisteku" - } -] \ No newline at end of file diff --git a/jackson-modules/jackson/src/main/resources/logback.xml b/jackson-modules/jackson/src/main/resources/logback.xml deleted file mode 100644 index 56af2d397e..0000000000 --- a/jackson-modules/jackson/src/main/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Address.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Address.java deleted file mode 100644 index f0b3b00efe..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Address.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.dtos; - -public class Address { - - String streetNumber; - String streetName; - String city; - - public String getStreetNumber() { - return streetNumber; - } - - public void setStreetNumber(String streetNumber) { - this.streetNumber = streetNumber; - } - - public String getStreetName() { - return streetName; - } - - public void setStreetName(String streetName) { - this.streetName = streetName; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/MyDto.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/MyDto.java deleted file mode 100644 index 977358a49b..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.dtos; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Person.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Person.java deleted file mode 100644 index 538128de83..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/Person.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ossez.jackson.dtos; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; - -@JacksonXmlRootElement(localName = "person") -public final class Person { - private String firstName; - private String lastName; - private List phoneNumbers = new ArrayList<>(); - private List
address = new ArrayList<>(); - - public List
getAddress() { - return address; - } - - public void setAddress(List
address) { - this.address = address; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public List getPhoneNumbers() { - return phoneNumbers; - } - - public void setPhoneNumbers(List phoneNumbers) { - this.phoneNumbers = phoneNumbers; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/User.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/User.java deleted file mode 100644 index 59a1a19ef0..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/dtos/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ossez.jackson.dtos; - -public class User { - public int id; - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - // API - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/IgnoranceUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/IgnoranceUnitTest.java deleted file mode 100644 index e0ebbbdb33..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/IgnoranceUnitTest.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.ossez.jackson.inheritance; - -import static org.junit.Assert.assertThat; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.not; - -import org.junit.Test; - -import java.util.List; -import java.util.ArrayList; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.introspect.AnnotatedMember; -import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; - -public class IgnoranceUnitTest { - private static abstract class CarMixIn { - @JsonIgnore - public String make; - @JsonIgnore - public String topSpeed; - } - - private static class IgnoranceIntrospector extends JacksonAnnotationIntrospector { - private static final long serialVersionUID = 1422295680188892323L; - - public boolean hasIgnoreMarker(AnnotatedMember m) { - return m.getDeclaringClass() == IgnoranceMixinOrIntrospection.Vehicle.class && m.getName() == "model" || m.getDeclaringClass() == IgnoranceMixinOrIntrospection.Car.class || m.getName() == "towingCapacity" || super.hasIgnoreMarker(m); - } - } - - @Test - public void givenAnnotations_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - - IgnoranceAnnotationStructure.Sedan sedan = new IgnoranceAnnotationStructure.Sedan("Mercedes-Benz", "S500", 5, 250.0); - IgnoranceAnnotationStructure.Crossover crossover = new IgnoranceAnnotationStructure.Crossover("BMW", "X6", 5, 250.0, 6000.0); - - List vehicles = new ArrayList<>(); - vehicles.add(sedan); - vehicles.add(crossover); - - String jsonDataString = mapper.writeValueAsString(vehicles); - - assertThat(jsonDataString, containsString("make")); - assertThat(jsonDataString, not(containsString("model"))); - assertThat(jsonDataString, not(containsString("seatingCapacity"))); - assertThat(jsonDataString, not(containsString("topSpeed"))); - assertThat(jsonDataString, containsString("towingCapacity")); - } - - @Test - public void givenMixIns_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - mapper.addMixIn(IgnoranceMixinOrIntrospection.Car.class, CarMixIn.class); - - String jsonDataString = instantiateAndSerializeObjects(mapper); - - assertThat(jsonDataString, not(containsString("make"))); - assertThat(jsonDataString, containsString("model")); - assertThat(jsonDataString, containsString("seatingCapacity")); - assertThat(jsonDataString, not(containsString("topSpeed"))); - assertThat(jsonDataString, containsString("towingCapacity")); - } - - @Test - public void givenIntrospection_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - mapper.setAnnotationIntrospector(new IgnoranceIntrospector()); - - String jsonDataString = instantiateAndSerializeObjects(mapper); - - assertThat(jsonDataString, containsString("make")); - assertThat(jsonDataString, not(containsString("model"))); - assertThat(jsonDataString, not(containsString("seatingCapacity"))); - assertThat(jsonDataString, not(containsString("topSpeed"))); - assertThat(jsonDataString, not(containsString("towingCapacity"))); - } - - private String instantiateAndSerializeObjects(ObjectMapper mapper) throws JsonProcessingException { - IgnoranceMixinOrIntrospection.Sedan sedan = new IgnoranceMixinOrIntrospection.Sedan("Mercedes-Benz", "S500", 5, 250.0); - IgnoranceMixinOrIntrospection.Crossover crossover = new IgnoranceMixinOrIntrospection.Crossover("BMW", "X6", 5, 250.0, 6000.0); - - List vehicles = new ArrayList<>(); - vehicles.add(sedan); - vehicles.add(crossover); - - return mapper.writeValueAsString(vehicles); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUserUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUserUnitTest.java deleted file mode 100644 index 6e9c3f5136..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/ItemIdRemovedFromUserUnitTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ossez.jackson.inheritance; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import java.io.IOException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class ItemIdRemovedFromUserUnitTest { - @Test - public void givenRemoveItemJson_whenDeserialize_shouldHaveProperClassType() throws IOException { - // given - Event event = new ItemIdRemovedFromUser("1", 12345567L, "item_1", 2L); - ObjectMapper objectMapper = new ObjectMapper(); - String eventJson = objectMapper.writeValueAsString(event); - - // when - Event result = new ObjectMapper().readValue(eventJson, Event.class); - - // then - assertTrue(result instanceof ItemIdRemovedFromUser); - assertEquals("item_1", ((ItemIdRemovedFromUser) result).getItemId()); - } - - @Test - public void givenAdddItemJson_whenSerialize_shouldIgnoreIdPropertyFromSuperclass() throws IOException { - // given - Event event = new ItemIdAddedToUser("1", 12345567L, "item_1", 2L); - ObjectMapper objectMapper = new ObjectMapper(); - - // when - String eventJson = objectMapper.writeValueAsString(event); - - // then - assertFalse(eventJson.contains("id")); - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/SubTypeHandlingUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/SubTypeHandlingUnitTest.java deleted file mode 100644 index 3b95f7e283..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/SubTypeHandlingUnitTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ossez.jackson.inheritance; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import java.util.List; -import java.util.ArrayList; -import java.io.IOException; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class SubTypeHandlingUnitTest { - @Test - public void givenSubTypes_whenConvertingObjects_thenDataValuesArePreserved() { - ObjectMapper mapper = new ObjectMapper(); - - SubTypeConversionStructure.Car car = new SubTypeConversionStructure.Car("Mercedes-Benz", "S500", 5, 250.0); - SubTypeConversionStructure.Truck truck = mapper.convertValue(car, SubTypeConversionStructure.Truck.class); - - assertEquals("Mercedes-Benz", truck.getMake()); - assertEquals("S500", truck.getModel()); - } - - @Test - public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); - - SubTypeConstructorStructure.Car car = new SubTypeConstructorStructure.Car("Mercedes-Benz", "S500", 5, 250.0); - SubTypeConstructorStructure.Truck truck = new SubTypeConstructorStructure.Truck("Isuzu", "NQR", 7500.0); - - List vehicles = new ArrayList<>(); - vehicles.add(car); - vehicles.add(truck); - - SubTypeConstructorStructure.Fleet serializedFleet = new SubTypeConstructorStructure.Fleet(); - serializedFleet.setVehicles(vehicles); - - String jsonDataString = mapper.writeValueAsString(serializedFleet); - mapper.readValue(jsonDataString, SubTypeConstructorStructure.Fleet.class); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/TypeInfoInclusionUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/TypeInfoInclusionUnitTest.java deleted file mode 100644 index d47a2e4283..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/inheritance/TypeInfoInclusionUnitTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ossez.jackson.inheritance; - -import static org.junit.Assert.assertThat; -import static org.hamcrest.CoreMatchers.instanceOf; - -import org.junit.Test; - -import java.util.List; -import java.util.ArrayList; -import java.io.IOException; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class TypeInfoInclusionUnitTest { - @Test - public void givenTypeInfo_whenAnnotatingGlobally_thenTypesAreCorrectlyRecovered() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); - - TypeInfoStructure.Car car = new TypeInfoStructure.Car("Mercedes-Benz", "S500", 5, 250.0); - TypeInfoStructure.Truck truck = new TypeInfoStructure.Truck("Isuzu", "NQR", 7500.0); - - List vehicles = new ArrayList<>(); - vehicles.add(car); - vehicles.add(truck); - - TypeInfoStructure.Fleet serializedFleet = new TypeInfoStructure.Fleet(); - serializedFleet.setVehicles(vehicles); - - String jsonDataString = mapper.writeValueAsString(serializedFleet); - TypeInfoStructure.Fleet deserializedFleet = mapper.readValue(jsonDataString, TypeInfoStructure.Fleet.class); - - assertThat(deserializedFleet.getVehicles() - .get(0), instanceOf(TypeInfoStructure.Car.class)); - assertThat(deserializedFleet.getVehicles() - .get(1), instanceOf(TypeInfoStructure.Truck.class)); - } - - @Test - public void givenTypeInfo_whenAnnotatingPerClass_thenTypesAreCorrectlyRecovered() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - TypeInfoAnnotatedStructure.Car car = new TypeInfoAnnotatedStructure.Car("Mercedes-Benz", "S500", 5, 250.0); - TypeInfoAnnotatedStructure.Truck truck = new TypeInfoAnnotatedStructure.Truck("Isuzu", "NQR", 7500.0); - - List vehicles = new ArrayList<>(); - vehicles.add(car); - vehicles.add(truck); - - TypeInfoAnnotatedStructure.Fleet serializedFleet = new TypeInfoAnnotatedStructure.Fleet(); - serializedFleet.setVehicles(vehicles); - - String jsonDataString = mapper.writeValueAsString(serializedFleet); - TypeInfoAnnotatedStructure.Fleet deserializedFleet = mapper.readValue(jsonDataString, TypeInfoAnnotatedStructure.Fleet.class); - - assertThat(deserializedFleet.getVehicles() - .get(0), instanceOf(TypeInfoAnnotatedStructure.Car.class)); - assertThat(deserializedFleet.getVehicles() - .get(1), instanceOf(TypeInfoAnnotatedStructure.Truck.class)); - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonDeserializeUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonDeserializeUnitTest.java deleted file mode 100644 index 09ba00bac1..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonDeserializeUnitTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import org.junit.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.Assert.assertEquals; - -public class JacksonDeserializeUnitTest { - - @Test - public void whenSimpleDeserialize_thenCorrect() throws IOException { - - final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - final ObjectMapper mapper = new ObjectMapper(); - final Movie movie = mapper.readValue(jsonInput, Movie.class); - - final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - assertEquals(expectedOutput, movie.toString()); - } - - @Test - public void whenCustomDeserialize_thenCorrect() throws IOException { - - final String jsonInput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - - final ObjectMapper mapper = new ObjectMapper(); - final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); - mapper.setDateFormat(df); - - final Movie movie = mapper.readValue(jsonInput, Movie.class); - - final String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - assertEquals(expectedOutput, movie.toString()); - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonSerializeUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonSerializeUnitTest.java deleted file mode 100644 index dccedfd1be..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jacksonvsgson/JacksonSerializeUnitTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.ossez.jackson.jacksonvsgson; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.TimeZone; - -import org.junit.Assert; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.module.SimpleModule; - -public class JacksonSerializeUnitTest { - - @Test - public void whenSimpleSerialize_thenCorrect() throws JsonProcessingException, ParseException { - - final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT")); - - final ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - final Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); - - final ObjectMapper mapper = new ObjectMapper(); - final String jsonResult = mapper.writeValueAsString(movie); - - final String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":401414400000,\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - Assert.assertEquals(jsonResult, expectedOutput); - } - - @Test - public void whenCustomSerialize_thenCorrect() throws ParseException, IOException { - - final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - - final ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - final MovieWithNullValue movieWithNullValue = new MovieWithNullValue(null, "Mel Gibson", Arrays.asList(rudyYoungblood)); - - final SimpleModule module = new SimpleModule(); - module.addSerializer(new ActorJacksonSerializer(ActorJackson.class)); - final ObjectMapper mapper = new ObjectMapper(); - - final String jsonResult = mapper.registerModule(module) - .writer(new DefaultPrettyPrinter()) - .writeValueAsString(movieWithNullValue); - - final Object json = mapper.readValue("{\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"21-09-1982\",\"N° Film: \":3,\"filmography\":\"Apocalypto-Beatdown-Wind Walkers\"}],\"imdbID\":null}", Object.class); - final String expectedOutput = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT) - .writeValueAsString(json); - - Assert.assertEquals(jsonResult, expectedOutput); - } -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jsoncompare/JsonCompareUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/jsoncompare/JsonCompareUnitTest.java deleted file mode 100644 index 7c21b79bc2..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/jsoncompare/JsonCompareUnitTest.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.ossez.jackson.jsoncompare; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.Comparator; - -import org.junit.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NumericNode; -import com.fasterxml.jackson.databind.node.TextNode; - -public class JsonCompareUnitTest { - - @Test - public void givenTwoSameJsonDataObjects_whenCompared_thenAreEqual() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - String s1 = "{\"employee\": {\"id\": \"1212\",\"fullName\": \"John Miles\", \"age\": 34 }}"; - String s2 = "{\"employee\": {\"id\": \"1212\",\"age\": 34, \"fullName\": \"John Miles\" }}"; - - JsonNode actualObj1 = mapper.readTree(s1); - JsonNode actualObj2 = mapper.readTree(s2); - - assertEquals(actualObj1, actualObj2); - - } - - @Test - public void givenTwoSameNestedJsonDataObjects_whenCompared_thenEqual() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - String s1 = "{\"employee\": {\"id\": \"1212\",\"fullName\": \"John Miles\",\"age\": 34, \"contact\":{\"email\": \"john@xyz.com\",\"phone\": \"9999999999\"} }}"; - String s2 = "{\"employee\": {\"id\": \"1212\",\"fullName\": \"John Miles\",\"age\": 34, \"contact\":{\"email\": \"john@xyz.com\",\"phone\": \"9999999999\"} }}"; - - JsonNode actualObj1 = mapper.readTree(s1); - JsonNode actualObj2 = mapper.readTree(s2); - - assertEquals(actualObj1, actualObj2); - - } - - @Test - public void givenTwoSameListJsonDataObjects_whenCompared_thenEqual() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - String s1 = "{\"employee\": {\"id\": \"1212\",\"fullName\": \"John Miles\",\"age\": 34, \"skills\":[\"Java\", \"C++\", \"Python\"] }}"; - String s2 = "{\"employee\": {\"id\": \"1212\",\"fullName\": \"John Miles\",\"age\": 34, \"skills\":[\"Java\", \"C++\", \"Python\"] }}"; - - JsonNode actualObj1 = mapper.readTree(s1); - JsonNode actualObj2 = mapper.readTree(s2); - - assertEquals(actualObj1, actualObj2); - - } - - @Test - public void givenTwoJsonDataObjects_whenComparedUsingCustomNumericNodeComparator_thenEqual() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - String s1 = "{\"name\": \"John\",\"score\":5.0}"; - String s2 = "{\"name\": \"John\",\"score\":5}"; - JsonNode actualObj1 = mapper.readTree(s1); - JsonNode actualObj2 = mapper.readTree(s2); - - NumericNodeComparator cmp = new NumericNodeComparator(); - - assertNotEquals(actualObj1, actualObj2); - assertTrue(actualObj1.equals(cmp, actualObj2)); - - } - - public class NumericNodeComparator implements Comparator { - @Override - public int compare(JsonNode o1, JsonNode o2) { - if (o1.equals(o2)) { - return 0; - } - if ((o1 instanceof NumericNode) && (o2 instanceof NumericNode)) { - Double d1 = ((NumericNode) o1).asDouble(); - Double d2 = ((NumericNode) o2).asDouble(); - if (d1.compareTo(d2) == 0) { - return 0; - } - } - return 1; - } - } - - @Test - public void givenTwoJsonDataObjects_whenComparedUsingCustomTextNodeComparator_thenEqual() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - - String s1 = "{\"name\": \"JOHN\",\"score\":5}"; - String s2 = "{\"name\": \"John\",\"score\":5}"; - JsonNode actualObj1 = mapper.readTree(s1); - JsonNode actualObj2 = mapper.readTree(s2); - - TextNodeComparator cmp = new TextNodeComparator(); - - assertNotEquals(actualObj1, actualObj2); - assertTrue(actualObj1.equals(cmp, actualObj2)); - - } - - public class TextNodeComparator implements Comparator { - @Override - public int compare(JsonNode o1, JsonNode o2) { - if (o1.equals(o2)) { - return 0; - } - if ((o1 instanceof TextNode) && (o2 instanceof TextNode)) { - String s1 = ((TextNode) o1).asText(); - String s2 = ((TextNode) o2).asText(); - if (s1.equalsIgnoreCase(s2)) { - return 0; - } - } - return 1; - } - } -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/ExampleStructure.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/ExampleStructure.java deleted file mode 100644 index 79fc5760c1..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/ExampleStructure.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ossez.jackson.node; - -import java.io.IOException; -import java.io.InputStream; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class ExampleStructure { - private static ObjectMapper mapper = new ObjectMapper(); - - static JsonNode getExampleRoot() throws IOException { - InputStream exampleInput = ExampleStructure.class.getClassLoader() - .getResourceAsStream("node_example.json"); - JsonNode rootNode = mapper.readTree(exampleInput); - return rootNode; - } -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/JsonNodeIteratorUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/JsonNodeIteratorUnitTest.java deleted file mode 100644 index b80011e96e..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/JsonNodeIteratorUnitTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ossez.jackson.node; - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.databind.JsonNode; - -public class JsonNodeIteratorUnitTest { - - private JsonNodeIterator onTest = new JsonNodeIterator(); - private static String expectedYaml = "name: \n" + - " first: Tatu\n" + - " last: Saloranta\n" + - "title: Jackson founder\n" + - "company: FasterXML\n" + - "pets: \n" + - "- type: dog\n" + - " number: 1\n" + - "- type: fish\n" + - " number: 50"; - -@Test -public void givenANodeTree_whenIteratingSubNodes_thenWeFindExpected() throws IOException { - final JsonNode rootNode = ExampleStructure.getExampleRoot(); - - String yaml = onTest.toYaml(rootNode); - System.out.println(yaml.toString()); - - assertEquals(expectedYaml, yaml); - -} - - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeBean.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeBean.java deleted file mode 100644 index bd38487f1f..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeBean.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.jackson.node; - -public class NodeBean { - private int id; - private String name; - - public NodeBean() { - } - - public NodeBean(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeOperationUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeOperationUnitTest.java deleted file mode 100644 index 4e801e6ed9..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/node/NodeOperationUnitTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.ossez.jackson.node; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; - -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - -public class NodeOperationUnitTest { - private static ObjectMapper mapper = new ObjectMapper(); - - @Test - public void givenAnObject_whenConvertingIntoNode_thenCorrect() { - final NodeBean fromValue = new NodeBean(2016, "baeldung.com"); - - final JsonNode node = mapper.valueToTree(fromValue); - - assertEquals(2016, node.get("id") - .intValue()); - assertEquals("baeldung.com", node.get("name") - .textValue()); - } - - @Test - public void givenANode_whenWritingOutAsAJsonString_thenCorrect() throws IOException { - final String pathToTestFile = "node_to_json_test.json"; - final char[] characterBuffer = new char[50]; - - final JsonNode node = mapper.createObjectNode(); - ((ObjectNode) node).put("id", 2016); - ((ObjectNode) node).put("name", "baeldung.com"); - - try (FileWriter outputStream = new FileWriter(pathToTestFile)) { - mapper.writeValue(outputStream, node); - } - - try (FileReader inputStreamForAssertion = new FileReader(pathToTestFile)) { - inputStreamForAssertion.read(characterBuffer); - } - final String textContentOfTestFile = new String(characterBuffer); - - assertThat(textContentOfTestFile, containsString("2016")); - assertThat(textContentOfTestFile, containsString("baeldung.com")); - - Files.delete(Paths.get(pathToTestFile)); - } - - @Test - public void givenANode_whenConvertingIntoAnObject_thenCorrect() throws JsonProcessingException { - final JsonNode node = mapper.createObjectNode(); - ((ObjectNode) node).put("id", 2016); - ((ObjectNode) node).put("name", "baeldung.com"); - - final NodeBean toValue = mapper.treeToValue(node, NodeBean.class); - - assertEquals(2016, toValue.getId()); - assertEquals("baeldung.com", toValue.getName()); - } - - @Test - public void givenANode_whenAddingIntoATree_thenCorrect() throws IOException { - final JsonNode rootNode = ExampleStructure.getExampleRoot(); - final ObjectNode addedNode = ((ObjectNode) rootNode).putObject("address"); - addedNode.put("city", "Seattle") - .put("state", "Washington") - .put("country", "United States"); - - assertFalse(rootNode.path("address") - .isMissingNode()); - assertEquals("Seattle", rootNode.path("address") - .path("city") - .textValue()); - assertEquals("Washington", rootNode.path("address") - .path("state") - .textValue()); - assertEquals("United States", rootNode.path("address") - .path("country") - .textValue()); - } - - @Test - public void givenANode_whenModifyingIt_thenCorrect() throws IOException { - final String newString = "{\"nick\": \"cowtowncoder\"}"; - final JsonNode newNode = mapper.readTree(newString); - - final JsonNode rootNode = ExampleStructure.getExampleRoot(); - ((ObjectNode) rootNode).set("name", newNode); - - assertFalse(rootNode.path("name") - .path("nick") - .isMissingNode()); - assertEquals("cowtowncoder", rootNode.path("name") - .path("nick") - .textValue()); - } - - @Test - public void givenANode_whenRemovingFromATree_thenCorrect() throws IOException { - final JsonNode rootNode = ExampleStructure.getExampleRoot(); - ((ObjectNode) rootNode).remove("company"); - - assertTrue(rootNode.path("company") - .isMissingNode()); - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/optionalwithjackson/OptionalTypeUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/optionalwithjackson/OptionalTypeUnitTest.java deleted file mode 100644 index 89611a74d0..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/optionalwithjackson/OptionalTypeUnitTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ossez.jackson.optionalwithjackson; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import static io.restassured.path.json.JsonPath.from; -import java.io.IOException; -import java.util.Optional; -import static org.assertj.core.api.Assertions.assertThat; -import org.junit.Test; - -public class OptionalTypeUnitTest { - - ObjectMapper mapper = new ObjectMapper().registerModule(new Jdk8Module()); - - @Test - public void givenPresentOptional_whenSerializing_thenValueInJson() throws JsonProcessingException { - - String subTitle = "The Parish Boy's Progress"; - Book book = new Book(); - book.setTitle("Oliver Twist"); - book.setSubTitle(Optional.of(subTitle)); - - String result = mapper.writeValueAsString(book); - - assertThat(from(result).getString("subTitle")).isEqualTo(subTitle); - } - - @Test - public void givenEmptyOptional_whenSerializing_thenNullValue() throws JsonProcessingException { - - Book book = new Book(); - book.setTitle("Oliver Twist"); - book.setSubTitle(Optional.empty()); - - String result = mapper.writeValueAsString(book); - - assertThat(from(result).getString("subTitle")).isNull(); - } - - @Test - public void givenField_whenDeserializingIntoOptional_thenIsPresentWithValue() throws IOException { - - String subTitle = "The Parish Boy's Progress"; - String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": \"" + subTitle + "\" }"; - - Book result = mapper.readValue(book, Book.class); - - assertThat(result.getSubTitle()).isEqualTo(Optional.of(subTitle)); - } - - @Test - public void givenNullField_whenDeserializingIntoOptional_thenIsEmpty() throws IOException { - - String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": null }"; - - Book result = mapper.readValue(book, Book.class); - - assertThat(result.getSubTitle()).isEmpty(); - } -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/JacksonPrettyPrintUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/JacksonPrettyPrintUnitTest.java deleted file mode 100644 index 81278f2fd0..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/JacksonPrettyPrintUnitTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.sandbox; - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; - -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonPrettyPrintUnitTest { - - @Test - public final void whenDeserializing_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - // final String fileName = "src/main/resources/example1.json"; - final String fileName = "src/main/resources/example1.json"; - - new File(fileName); - - printJsonFromFile(fileName); - } - - // - - public static void printJsonFromFile(final String fileName) { - System.out.println("-----------------"); - final ObjectMapper mapper = new ObjectMapper(); - try { - final Object json = mapper.readValue(readFile(fileName, StandardCharsets.UTF_8), Object.class); - System.out.println(mapper.writerWithDefaultPrettyPrinter() - .writeValueAsString(json)); - } catch (final IOException e) { - e.printStackTrace(); - } - System.out.println("-----------------"); - } - - static String readFile(final String path, final Charset encoding) throws IOException { - final byte[] encoded = Files.readAllBytes(Paths.get(path)); - return encoding.decode(ByteBuffer.wrap(encoded)) - .toString(); - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/SandboxUnitTest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/SandboxUnitTest.java deleted file mode 100644 index 3c67ae9bad..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/SandboxUnitTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.sandbox; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class SandboxUnitTest { - - @Test - public final void whenDeserializing_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final TestElement testElement = new TestElement(); - testElement.setX(10); - testElement.setY("adasd"); - final ObjectMapper om = new ObjectMapper(); - om.setVisibility(om.getSerializationConfig() - .getDefaultVisibilityChecker() - .withFieldVisibility(JsonAutoDetect.Visibility.ANY) - .withGetterVisibility(JsonAutoDetect.Visibility.NONE)); - - final String serialized = om.writeValueAsString(testElement); - System.err.println(serialized); - } - -} diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/TestElement.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/TestElement.java deleted file mode 100644 index 8d44842054..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/sandbox/TestElement.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.jackson.sandbox; - -public class TestElement { - - int x; - - private transient String y; - - public int getX() { - return x; - } - - public void setX(final int x) { - this.x = x; - } - - public String getY() { - return y; - } - - public void setY(final String y) { - this.y = y; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/test/UnitTestSuite.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/test/UnitTestSuite.java deleted file mode 100644 index 5f715ec599..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/test/UnitTestSuite.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ossez.jackson.test; - -import com.ossez.jackson.sandbox.JacksonPrettyPrintUnitTest; -import com.ossez.jackson.sandbox.SandboxUnitTest; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -@RunWith(Suite.class) -@Suite.SuiteClasses({ // @formatter:off - JacksonPrettyPrintUnitTest.class - , SandboxUnitTest.class -}) // @formatter:on -public class UnitTestSuite { -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/IEntity.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/IEntity.java deleted file mode 100644 index cc2269ad96..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/IEntity.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ossez.jackson.try1; - -public interface IEntity { - public int getId(); -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequest.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequest.java deleted file mode 100644 index fdeac9b7a3..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ossez.jackson.try1; - -import java.io.Serializable; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -@JsonDeserialize(using = RestLoaderRequestDeserializer.class) -// @Produces(MediaType.APPLICATION_JSON) -public class RestLoaderRequest implements Serializable { - private T entity; // entity to load field to - private String className; // actual class of entity - private String fieldName; // fieldName to lazy REST load - - public String getFieldName() { - return fieldName; - } - - public void setFieldName(final String fieldName) { - this.fieldName = fieldName; - } - - public String getClassName() { - return className; - } - - public void setClassName(final String className) { - this.className = className; - } - - public T getEntity() { - return entity; - } - - public void setEntity(final T entity) { - this.entity = entity; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequestDeserializer.java b/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequestDeserializer.java deleted file mode 100644 index b49d6b1d8e..0000000000 --- a/jackson-modules/jackson/src/test/java/com/ossez/jackson/try1/RestLoaderRequestDeserializer.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ossez.jackson.try1; - -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class RestLoaderRequestDeserializer extends StdDeserializer> { - private static final long serialVersionUID = -4245207329377196889L; - - public RestLoaderRequestDeserializer() { - this(null); - } - - public RestLoaderRequestDeserializer(final Class vc) { - super(vc); - } - - @Override - public RestLoaderRequest deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { - try { - final ObjectCodec objectCodec = jp.getCodec(); - final JsonNode node = objectCodec.readTree(jp); - final String className = node.get("className") - .textValue(); - final String fieldName = node.get("fieldName") - .textValue(); - - final Class clazz = Class.forName(className); - - final JsonNode rawEntityNode = node.get("entity"); - // How to deserialize rawEntityNode to T based on className ? - - final RestLoaderRequest request = new RestLoaderRequest(); - request.setClassName(className); - request.setFieldName(fieldName); - } catch (final ClassNotFoundException e) { - e.printStackTrace(); - } - - return null; - } - -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/resources/author-jsonpropertyorder-schema.json b/jackson-modules/jackson/src/test/resources/author-jsonpropertyorder-schema.json deleted file mode 100644 index 8e7a85372c..0000000000 --- a/jackson-modules/jackson/src/test/resources/author-jsonpropertyorder-schema.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Author", - "description": "An author", - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object" - } - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": [ - "items", - "firstName", - "lastName", - "id" - ] -} \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/resources/node_example-1.json b/jackson-modules/jackson/src/test/resources/node_example-1.json deleted file mode 100644 index e766981a50..0000000000 --- a/jackson-modules/jackson/src/test/resources/node_example-1.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "rootEquipmentId": "830AFC79-E36E-41A4-8944-BDB71EEEC7AF", - "equipmentId": "7C82F833-A495-42E7-8CBE-2CEC42992DD1", - "startTime": "2021-09-01T00:00:00.000Z", - "endTime": "2021-09-01T03:00:00.000Z", - "testMaxBins": 36, - "testData": [ - { - "version": "v1", - "timestamp": "2021-09-01T00:40:00.000Z", - "event": { - "AlertType": "kpi", - "AlertId": "6B341AB0-971D-494E-9522-A23500BF7C9D", - "SourceAspectId": "80CB7FE9-9762-48C0-8027-CBE3EC517D0D", - "State": "INSUFFICIENT", - "SourceId": "7C82F833-A495-42E7-8CBE-2CEC42992DD1", - "Period": 1800, - "Severity": "1", - "SourceAspectName": "TagName" - } - }, - { - "version": "v1", - "timestamp": "2021-09-01T01:10:00.000Z", - "event": { - "AlertType": "kpi", - "AlertId": "6B341AB0-971D-494E-9522-A23500BF7C9D", - "SourceAspectId": "80CB7FE9-9762-48C0-8027-CBE3EC517D0D", - "State": "INSUFFICIENT", - "SourceId": "7C82F833-A495-42E7-8CBE-2CEC42992DD1", - "Period": 1800, - "Severity": "1", - "SourceAspectName": "TagName" - } - }, - { - "version": "v1", - "timestamp": "2021-09-01T02:10:00.000Z", - "event": { - "AlertType": "kpi", - "AlertId": "6B341AB0-971D-494E-9522-A23500BF7C9D", - "SourceAspectId": "80CB7FE9-9762-48C0-8027-CBE3EC517D0D", - "State": "OK", - "SourceId": "7C82F833-A495-42E7-8CBE-2CEC42992DD1", - "Period": 1800, - "Severity": "1", - "SourceAspectName": "TagName" - } - }, - { - "version": "v1", - "timestamp": "2021-09-01T02:40:00.000Z", - "event": { - "AlertType": "kpi", - "AlertId": "6B341AB0-971D-494E-9522-A23500BF7C9D", - "SourceAspectId": "80CB7FE9-9762-48C0-8027-CBE3EC517D0D", - "State": "OK", - "SourceId": "7C82F833-A495-42E7-8CBE-2CEC42992DD1", - "Period": 1800, - "Severity": "1", - "SourceAspectName": "TagName" - } - } - ] -} diff --git a/jackson-modules/jackson/src/test/resources/node_example.json b/jackson-modules/jackson/src/test/resources/node_example.json deleted file mode 100644 index d57c1df6e3..0000000000 --- a/jackson-modules/jackson/src/test/resources/node_example.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": { - "first": "Tatu", - "last": "Saloranta" - }, - "title": "Jackson founder", - "company": "FasterXML", - "pets": [ - { - "type": "dog", - "number": 1 - }, - { - "type": "fish", - "number": 50 - } - ] -} \ No newline at end of file diff --git a/jackson-modules/pom.xml b/jackson-modules/pom.xml deleted file mode 100644 index 69ac41998d..0000000000 --- a/jackson-modules/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - 4.0.0 - jackson-modules - jackson-modules - pom - - - com.ossez - parent-java - 0.0.2-SNAPSHOT - ../parent-java - - - - jackson - jackson-annotations - jackson-conversions - jackson-conversions-2 - jackson-custom-conversions - jackson-exceptions - - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - org.junit.jupiter - junit-jupiter - ${junit-jupiter.version} - - - - org.junit.vintage - junit-vintage-engine - ${junit-jupiter.version} - test - - - - - 5.6.2 - - - \ No newline at end of file diff --git a/jackson-simple/README.md b/jackson-simple/README.md deleted file mode 100644 index 41aee8cac9..0000000000 --- a/jackson-simple/README.md +++ /dev/null @@ -1,19 +0,0 @@ -### Jackson Articles that are also part of the e-book - -This module contains articles about Jackson that are also part of the Jackson Ebook. - -### The Course - -The "REST With Spring" Classes: http://bit.ly/restwithspring - -### Relevant Articles: -- [Jackson Annotation Examples](https://www.baeldung.com/jackson-annotations) -- [Intro to the Jackson ObjectMapper](https://www.baeldung.com/jackson-object-mapper-tutorial) -- [Jackson Ignore Properties on Marshalling](https://www.baeldung.com/jackson-ignore-properties-on-serialization) -- [Ignore Null Fields with Jackson](https://www.baeldung.com/jackson-ignore-null-fields) -- [Jackson – Change Name of Field](https://www.baeldung.com/jackson-name-of-property) -- [Jackson Unmarshalling JSON with Unknown Properties](https://www.baeldung.com/jackson-deserialize-json-unknown-properties) - -### NOTE: - -Since this is a module tied to an e-book, it should **not** be moved or used to store the code for any further article. diff --git a/jackson-simple/pom.xml b/jackson-simple/pom.xml deleted file mode 100644 index 9bc90180fd..0000000000 --- a/jackson-simple/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - jackson-simple - 0.0.1-SNAPSHOT - jackson-simple - - - com.ossez - parent-java - 0.0.2-SNAPSHOT - ../parent-java - - - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - - - jackson-simple - - - src/main/resources - true - - - - - \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/AliasBean.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/AliasBean.java deleted file mode 100644 index 34d8fb63b6..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/AliasBean.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonAlias; - -public class AliasBean { - - @JsonAlias({ "fName", "f_name" }) - private String firstName; - - private String lastName; - - public AliasBean() { - - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCreator.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCreator.java deleted file mode 100644 index 1474ded43b..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCreator.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class BeanWithCreator { - public int id; - public String name; - - @JsonCreator - public BeanWithCreator(@JsonProperty("id") final int id, @JsonProperty("theName") final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCustomAnnotation.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCustomAnnotation.java deleted file mode 100644 index f9ad44a0a1..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithCustomAnnotation.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ossez.jackson.annotation; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.Date; - -import com.ossez.jackson.annotation.BeanWithCustomAnnotation.CustomAnnotation; - -import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -@CustomAnnotation -public class BeanWithCustomAnnotation { - public int id; - public String name; - public Date dateCreated; - - public BeanWithCustomAnnotation() { - - } - - public BeanWithCustomAnnotation(final int id, final String name, final Date dateCreated) { - this.id = id; - this.name = name; - this.dateCreated = dateCreated; - } - - @Retention(RetentionPolicy.RUNTIME) - @JacksonAnnotationsInside - @JsonInclude(Include.NON_NULL) - @JsonPropertyOrder({ "name", "id", "dateCreated" }) - public @interface CustomAnnotation { - - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithFilter.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithFilter.java deleted file mode 100644 index 6c8ec92ff1..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithFilter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonFilter; - -@JsonFilter("myFilter") -public class BeanWithFilter { - public int id; - public String name; - - public BeanWithFilter() { - - } - - public BeanWithFilter(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithGetter.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithGetter.java deleted file mode 100644 index 169a7cbfbc..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithGetter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonGetter; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonSetter; - -public class BeanWithGetter { - public int id; - private String name; - - public BeanWithGetter() { - - } - - public BeanWithGetter(final int id, final String name) { - this.id = id; - this.name = name; - } - - @JsonProperty("name") - @JsonSetter("name") - public void setTheName(final String name) { - this.name = name; - } - - @JsonProperty("name") - @JsonGetter("name") - public String getTheName() { - return name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithIgnore.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithIgnore.java deleted file mode 100644 index 55ae8b79db..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithIgnore.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties({ "id" }) -public class BeanWithIgnore { - @JsonIgnore - public int id; - public String name; - - public BeanWithIgnore() { - - } - - public BeanWithIgnore(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithInject.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithInject.java deleted file mode 100644 index f0ea4166a8..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/BeanWithInject.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JacksonInject; - -public class BeanWithInject { - @JacksonInject - public int id; - public String name; - - public BeanWithInject() { - - } - - public BeanWithInject(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/ExtendableBean.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/ExtendableBean.java deleted file mode 100644 index 650cc45530..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/ExtendableBean.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.annotation; - -import java.util.HashMap; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; - -public class ExtendableBean { - public String name; - private Map properties; - - public ExtendableBean() { - properties = new HashMap(); - } - - public ExtendableBean(final String name) { - this.name = name; - properties = new HashMap(); - } - - @JsonAnySetter - public void add(final String key, final String value) { - properties.put(key, value); - } - - @JsonAnyGetter - public Map getProperties() { - return properties; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/MyBean.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/MyBean.java deleted file mode 100644 index edb773a6ef..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/MyBean.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonGetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.annotation.JsonSetter; - -@JsonInclude(Include.NON_NULL) -@JsonPropertyOrder({ "name", "id" }) -public class MyBean { - public int id; - public String name; - - public MyBean() { - - } - - public MyBean(final int id, final String name) { - this.id = id; - this.name = name; - } - - @JsonGetter("name") - public String getTheName() { - return name; - } - - @JsonSetter("name") - public void setTheName(String name) { - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/PrivateBean.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/PrivateBean.java deleted file mode 100644 index b2bf8782f0..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/PrivateBean.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; - -@JsonAutoDetect(fieldVisibility = Visibility.ANY) -public class PrivateBean { - private int id; - private String name; - - public PrivateBean() { - - } - - public PrivateBean(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/RawBean.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/RawBean.java deleted file mode 100644 index 739e556ee0..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/RawBean.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonRawValue; - -public class RawBean { - public String name; - - @JsonRawValue - public String json; - - public RawBean() { - - } - - public RawBean(final String name, final String json) { - this.name = name; - this.json = json; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/UnwrappedUser.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/UnwrappedUser.java deleted file mode 100644 index c40f940d1f..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/UnwrappedUser.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonUnwrapped; - -public class UnwrappedUser { - public int id; - - @JsonUnwrapped - public Name name; - - public UnwrappedUser() { - - } - - public UnwrappedUser(final int id, final Name name) { - this.id = id; - this.name = name; - } - - public static class Name { - public String firstName; - public String lastName; - - public Name() { - - } - - public Name(final String firstName, final String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/UserWithIgnoreType.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/UserWithIgnoreType.java deleted file mode 100644 index 4145f61122..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/UserWithIgnoreType.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonIgnoreType; - -public class UserWithIgnoreType { - public int id; - - public Name name; - - public UserWithIgnoreType() { - - } - - public UserWithIgnoreType(final int id, final Name name) { - this.id = id; - this.name = name; - } - - @JsonIgnoreType - public static class Name { - public String firstName; - public String lastName; - - public Name() { - - } - - public Name(final String firstName, final String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/Zoo.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/Zoo.java deleted file mode 100644 index cbd409137c..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/Zoo.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.ossez.jackson.annotation; - -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeInfo.As; -import com.fasterxml.jackson.annotation.JsonTypeName; - -public class Zoo { - public Animal animal; - - public Zoo() { - - } - - public Zoo(final Animal animal) { - this.animal = animal; - } - - @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type") - @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "dog"), @JsonSubTypes.Type(value = Cat.class, name = "cat") }) - public static class Animal { - public String name; - - public Animal() { - } - - public Animal(final String name) { - this.name = name; - } - } - - @JsonTypeName("dog") - public static class Dog extends Animal { - public double barkVolume; - - public Dog() { - } - - public Dog(final String name) { - this.name = name; - } - } - - @JsonTypeName("cat") - public static class Cat extends Animal { - boolean likesCream; - public int lives; - - public Cat() { - } - - public Cat(final String name) { - this.name = name; - } - } -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIdentity.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIdentity.java deleted file mode 100644 index cefae1f1ac..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIdentity.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") -public class ItemWithIdentity { - public int id; - public String itemName; - public UserWithIdentity owner; - - public ItemWithIdentity() { - super(); - } - - public ItemWithIdentity(final int id, final String itemName, final UserWithIdentity owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIgnore.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIgnore.java deleted file mode 100644 index b1cb9c58f8..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithIgnore.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -public class ItemWithIgnore { - public int id; - public String itemName; - public UserWithIgnore owner; - - public ItemWithIgnore() { - super(); - } - - public ItemWithIgnore(final int id, final String itemName, final UserWithIgnore owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithRef.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithRef.java deleted file mode 100644 index 658ea4cdb3..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/ItemWithRef.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -import com.fasterxml.jackson.annotation.JsonManagedReference; - -public class ItemWithRef { - public int id; - public String itemName; - - @JsonManagedReference - public UserWithRef owner; - - public ItemWithRef() { - super(); - } - - public ItemWithRef(final int id, final String itemName, final UserWithRef owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIdentity.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIdentity.java deleted file mode 100644 index d607233b9a..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIdentity.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; - -@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") -public class UserWithIdentity { - public int id; - public String name; - public List userItems; - - public UserWithIdentity() { - super(); - } - - public UserWithIdentity(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithIdentity item) { - userItems.add(item); - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIgnore.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIgnore.java deleted file mode 100644 index 8c63cba074..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithIgnore.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class UserWithIgnore { - public int id; - public String name; - - @JsonIgnore - public List userItems; - - public UserWithIgnore() { - super(); - } - - public UserWithIgnore(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithIgnore item) { - userItems.add(item); - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithRef.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithRef.java deleted file mode 100644 index 423f3e08fb..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/bidirection/UserWithRef.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.jackson.annotation.bidirection; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonBackReference; - -public class UserWithRef { - public int id; - public String name; - - @JsonBackReference - public List userItems; - - public UserWithRef() { - super(); - } - - public UserWithRef(final int id, final String name) { - this.id = id; - this.name = name; - userItems = new ArrayList(); - } - - public void addItem(final ItemWithRef item) { - userItems.add(item); - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateDeserializer.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateDeserializer.java deleted file mode 100644 index e503800d2a..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateDeserializer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.jackson.annotation.date; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomDateDeserializer extends StdDeserializer { - - private static final long serialVersionUID = -5451717385630622729L; - private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - public CustomDateDeserializer() { - this(null); - } - - public CustomDateDeserializer(final Class vc) { - super(vc); - } - - @Override - public Date deserialize(final JsonParser jsonparser, final DeserializationContext context) throws IOException, JsonProcessingException { - final String date = jsonparser.getText(); - try { - return formatter.parse(date); - } catch (final ParseException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateSerializer.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateSerializer.java deleted file mode 100644 index c3e2100820..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/CustomDateSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.annotation.date; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomDateSerializer extends StdSerializer { - - private static final long serialVersionUID = -2894356342227378312L; - private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - public CustomDateSerializer() { - this(null); - } - - public CustomDateSerializer(final Class t) { - super(t); - } - - @Override - public void serialize(final Date value, final JsonGenerator gen, final SerializerProvider arg2) throws IOException, JsonProcessingException { - gen.writeString(formatter.format(value)); - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithFormat.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithFormat.java deleted file mode 100644 index c6dc316517..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithFormat.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.annotation.date; - -import java.util.Date; - -import com.fasterxml.jackson.annotation.JsonFormat; - -public class EventWithFormat { - public String name; - - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") - public Date eventDate; - - public EventWithFormat() { - super(); - } - - public EventWithFormat(final String name, final Date eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public Date getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithSerializer.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithSerializer.java deleted file mode 100644 index 4569ee0f4d..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/date/EventWithSerializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.annotation.date; - -import java.util.Date; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -public class EventWithSerializer { - public String name; - - @JsonDeserialize(using = CustomDateDeserializer.class) - @JsonSerialize(using = CustomDateSerializer.class) - public Date eventDate; - - public EventWithSerializer() { - super(); - } - - public EventWithSerializer(final String name, final Date eventDate) { - this.name = name; - this.eventDate = eventDate; - } - - public Date getEventDate() { - return eventDate; - } - - public String getName() { - return name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/deserialization/ItemDeserializerOnClass.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/deserialization/ItemDeserializerOnClass.java deleted file mode 100644 index b0d74fc78a..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/deserialization/ItemDeserializerOnClass.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ossez.jackson.annotation.deserialization; - -import java.io.IOException; - -import com.ossez.jackson.annotation.dtos.ItemWithSerializer; -import com.ossez.jackson.annotation.dtos.User; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.node.IntNode; - -public class ItemDeserializerOnClass extends StdDeserializer { - - private static final long serialVersionUID = 5579141241817332594L; - - public ItemDeserializerOnClass() { - this(null); - } - - public ItemDeserializerOnClass(final Class vc) { - super(vc); - } - - /** - * {"id":1,"itemNr":"theItem","owner":2} - */ - @Override - public ItemWithSerializer deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { - final JsonNode node = jp.getCodec() - .readTree(jp); - final int id = (Integer) ((IntNode) node.get("id")).numberValue(); - final String itemName = node.get("itemName") - .asText(); - final int userId = (Integer) ((IntNode) node.get("owner")).numberValue(); - - return new ItemWithSerializer(id, itemName, new User(userId, null)); - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/Item.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/Item.java deleted file mode 100644 index a4592a39d9..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/Item.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.annotation.dtos; - -public class Item { - public int id; - public String itemName; - public User owner; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/ItemWithSerializer.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/ItemWithSerializer.java deleted file mode 100644 index ec13bfe3ae..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/ItemWithSerializer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.jackson.annotation.dtos; - -import com.ossez.jackson.annotation.deserialization.ItemDeserializerOnClass; -import com.ossez.jackson.annotation.serialization.ItemSerializerOnClass; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -@JsonSerialize(using = ItemSerializerOnClass.class) -@JsonDeserialize(using = ItemDeserializerOnClass.class) -public class ItemWithSerializer { - public final int id; - public final String itemName; - public final User owner; - - public ItemWithSerializer(final int id, final String itemName, final User owner) { - this.id = id; - this.itemName = itemName; - this.owner = owner; - } - - // API - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public User getOwner() { - return owner; - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/User.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/User.java deleted file mode 100644 index cecd65b9af..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ossez.jackson.annotation.dtos; - -public class User { - public int id; - public String name; - - public User() { - super(); - } - - public User(final int id, final String name) { - this.id = id; - this.name = name; - } - - // API - - public int getId() { - return id; - } - - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/withEnum/DistanceEnumWithValue.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/withEnum/DistanceEnumWithValue.java deleted file mode 100644 index 0810431e09..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/dtos/withEnum/DistanceEnumWithValue.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.annotation.dtos.withEnum; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum DistanceEnumWithValue { - KILOMETER("km", 1000), MILE("miles", 1609.34), METER("meters", 1), INCH("inches", 0.0254), CENTIMETER("cm", 0.01), MILLIMETER("mm", 0.001); - - private String unit; - private final double meters; - - private DistanceEnumWithValue(String unit, double meters) { - this.unit = unit; - this.meters = meters; - } - - @JsonValue - public double getMeters() { - return meters; - } - - public String getUnit() { - return unit; - } - - public void setUnit(String unit) { - this.unit = unit; - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRoot.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRoot.java deleted file mode 100644 index c94f718345..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRoot.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ossez.jackson.annotation.exception; - -import com.fasterxml.jackson.annotation.JsonRootName; - -@JsonRootName(value = "user") -public class UserWithRoot { - public int id; - public String name; - - public UserWithRoot() { - super(); - } - - public UserWithRoot(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRootNamespace.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRootNamespace.java deleted file mode 100644 index d412df309b..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/exception/UserWithRootNamespace.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ossez.jackson.annotation.exception; - -import com.fasterxml.jackson.annotation.JsonRootName; - -@JsonRootName(value = "user", namespace="users") -public class UserWithRootNamespace { - public int id; - public String name; - - public UserWithRootNamespace() { - super(); - } - - public UserWithRootNamespace(final int id, final String name) { - this.id = id; - this.name = name; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/ignore/MyMixInForIgnoreType.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/ignore/MyMixInForIgnoreType.java deleted file mode 100644 index 11f05424ed..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/ignore/MyMixInForIgnoreType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ossez.jackson.annotation.ignore; - -import com.fasterxml.jackson.annotation.JsonIgnoreType; - -@JsonIgnoreType -public class MyMixInForIgnoreType { - // -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Item.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Item.java deleted file mode 100644 index 030a5672d7..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Item.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.jackson.annotation.jsonview; - -import com.fasterxml.jackson.annotation.JsonView; - -public class Item { - @JsonView(Views.Public.class) - public int id; - - @JsonView(Views.Public.class) - public String itemName; - - @JsonView(Views.Internal.class) - public String ownerName; - - public Item() { - super(); - } - - public Item(final int id, final String itemName, final String ownerName) { - this.id = id; - this.itemName = itemName; - this.ownerName = ownerName; - } - - public int getId() { - return id; - } - - public String getItemName() { - return itemName; - } - - public String getOwnerName() { - return ownerName; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Views.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Views.java deleted file mode 100644 index 10d6bfcc07..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/jsonview/Views.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.ossez.jackson.annotation.jsonview; - -public class Views { - public static class Public { - } - - public static class Internal extends Public { - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializer.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializer.java deleted file mode 100644 index 96d34e3034..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.annotation.serialization; - -import java.io.IOException; - -import com.ossez.jackson.annotation.dtos.Item; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class ItemSerializer extends StdSerializer { - - private static final long serialVersionUID = 6739170890621978901L; - - public ItemSerializer() { - this(null); - } - - public ItemSerializer(final Class t) { - super(t); - } - - @Override - public final void serialize(final Item value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - jgen.writeStartObject(); - jgen.writeNumberField("id", value.id); - jgen.writeStringField("itemName", value.itemName); - jgen.writeNumberField("owner", value.owner.id); - jgen.writeEndObject(); - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializerOnClass.java b/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializerOnClass.java deleted file mode 100644 index 2ad7569b4e..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/annotation/serialization/ItemSerializerOnClass.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ossez.jackson.annotation.serialization; - -import java.io.IOException; - -import com.ossez.jackson.annotation.dtos.ItemWithSerializer; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class ItemSerializerOnClass extends StdSerializer { - - private static final long serialVersionUID = -1760959597313610409L; - - public ItemSerializerOnClass() { - this(null); - } - - public ItemSerializerOnClass(final Class t) { - super(t); - } - - @Override - public final void serialize(final ItemWithSerializer value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { - jgen.writeStartObject(); - jgen.writeNumberField("id", value.id); - jgen.writeStringField("itemName", value.itemName); - jgen.writeNumberField("owner", value.owner.id); - jgen.writeEndObject(); - } - -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDto.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDto.java deleted file mode 100644 index debaa55c28..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.ignore; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreField.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreField.java deleted file mode 100644 index 96a743ace4..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreField.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class MyDtoIgnoreField { - - private String stringValue; - @JsonIgnore - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreField() { - super(); - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreFieldByName.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreFieldByName.java deleted file mode 100644 index f5cbbae005..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreFieldByName.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties(value = { "intValue" }) -public class MyDtoIgnoreFieldByName { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreFieldByName() { - super(); - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreNull.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreNull.java deleted file mode 100644 index 2876a11b51..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIgnoreNull.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; - -@JsonInclude(Include.NON_NULL) -public class MyDtoIgnoreNull { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreNull() { - super(); - } - - public MyDtoIgnoreNull(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIncludeNonDefault.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIncludeNonDefault.java deleted file mode 100644 index 02f90d33c4..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoIncludeNonDefault.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; - -@JsonInclude(Include.NON_DEFAULT) -public class MyDtoIncludeNonDefault { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIncludeNonDefault() { - super(); - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithFilter.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithFilter.java deleted file mode 100644 index 2d1844df60..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithFilter.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonFilter; - -@JsonFilter("myFilter") -public class MyDtoWithFilter { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoWithFilter() { - super(); - } - - public MyDtoWithFilter(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithSpecialField.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithSpecialField.java deleted file mode 100644 index 01446af9a0..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyDtoWithSpecialField.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.ignore; - -public class MyDtoWithSpecialField { - - private String[] stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoWithSpecialField() { - super(); - } - - public MyDtoWithSpecialField(final String[] stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String[] getStringValue() { - return stringValue; - } - - public void setStringValue(final String[] stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyMixInForIgnoreType.java b/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyMixInForIgnoreType.java deleted file mode 100644 index 94b2cc986a..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignore/MyMixInForIgnoreType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.annotation.JsonIgnoreType; - -@JsonIgnoreType -public class MyMixInForIgnoreType { - // -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDto.java b/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDto.java deleted file mode 100644 index 001d3d22c0..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.ignorenullfields; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDtoIgnoreNull.java b/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDtoIgnoreNull.java deleted file mode 100644 index feab3e1ac5..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/ignorenullfields/MyDtoIgnoreNull.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.jackson.ignorenullfields; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; - -@JsonInclude(Include.NON_NULL) -public class MyDtoIgnoreNull { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreNull() { - super(); - } - - public MyDtoIgnoreNull(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDto.java b/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDto.java deleted file mode 100644 index fb1d980dd9..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.jsonproperty; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDtoFieldNameChanged.java b/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDtoFieldNameChanged.java deleted file mode 100644 index 1cc87870f1..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/jsonproperty/MyDtoFieldNameChanged.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.jsonproperty; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class MyDtoFieldNameChanged { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoFieldNameChanged() { - super(); - } - - public MyDtoFieldNameChanged(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - @JsonProperty("strVal") - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarDeserializer.java b/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarDeserializer.java deleted file mode 100644 index 724eaf60fe..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarDeserializer.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ossez.jackson.objectmapper; - -import java.io.IOException; - -import com.ossez.jackson.objectmapper.dto.Car; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.ObjectCodec; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -public class CustomCarDeserializer extends StdDeserializer { - - private static final long serialVersionUID = -5918629454846356161L; - private final Logger Logger = LoggerFactory.getLogger(getClass()); - - public CustomCarDeserializer() { - this(null); - } - - public CustomCarDeserializer(final Class vc) { - super(vc); - } - - @Override - public Car deserialize(final JsonParser parser, final DeserializationContext deserializer) throws IOException { - final Car car = new Car(); - final ObjectCodec codec = parser.getCodec(); - final JsonNode node = codec.readTree(parser); - try { - final JsonNode colorNode = node.get("color"); - final String color = colorNode.asText(); - car.setColor(color); - } catch (final Exception e) { - Logger.debug("101_parse_exeption: unknown json."); - } - return car; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarSerializer.java b/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarSerializer.java deleted file mode 100644 index 47df3468bb..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/CustomCarSerializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.jackson.objectmapper; - -import java.io.IOException; - -import com.ossez.jackson.objectmapper.dto.Car; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -public class CustomCarSerializer extends StdSerializer { - - private static final long serialVersionUID = 1396140685442227917L; - - public CustomCarSerializer() { - this(null); - } - - public CustomCarSerializer(final Class t) { - super(t); - } - - @Override - public void serialize(final Car car, final JsonGenerator jsonGenerator, final SerializerProvider serializer) throws IOException, JsonProcessingException { - jsonGenerator.writeStartObject(); - jsonGenerator.writeStringField("model: ", car.getType()); - jsonGenerator.writeEndObject(); - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Car.java b/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Car.java deleted file mode 100644 index 21bf03fff5..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Car.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ossez.jackson.objectmapper.dto; - -public class Car { - - private String color; - private String type; - - public Car() { - } - - public Car(final String color, final String type) { - this.color = color; - this.type = type; - } - - public String getColor() { - return color; - } - - public void setColor(final String color) { - this.color = color; - } - - public String getType() { - return type; - } - - public void setType(final String type) { - this.type = type; - } -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Request.java b/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Request.java deleted file mode 100644 index 8d80e16638..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/objectmapper/dto/Request.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ossez.jackson.objectmapper.dto; - -import java.util.Date; - -public class Request { - Car car; - Date datePurchased; - - public Car getCar() { - return car; - } - - public void setCar(final Car car) { - this.car = car; - } - - public Date getDatePurchased() { - return datePurchased; - } - - public void setDatePurchased(final Date datePurchased) { - this.datePurchased = datePurchased; - } -} \ No newline at end of file diff --git a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDto.java b/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDto.java deleted file mode 100644 index d87f3d5883..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDto.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ossez.jackson.unknownproperties; - -public class MyDto { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDto() { - super(); - } - - public MyDto(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - - // - - @Override - public String toString() { - return "MyDto [stringValue=" + stringValue + ", intValue=" + intValue + ", booleanValue=" + booleanValue + "]"; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreType.java b/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreType.java deleted file mode 100644 index 1cd63192c7..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreType.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.unknownproperties; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties(ignoreUnknown = true) -public class MyDtoIgnoreType { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreType() { - super(); - } - - public MyDtoIgnoreType(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreUnknown.java b/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreUnknown.java deleted file mode 100644 index 97ab600559..0000000000 --- a/jackson-simple/src/main/java/com/ossez/jackson/unknownproperties/MyDtoIgnoreUnknown.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ossez.jackson.unknownproperties; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties(ignoreUnknown = true) -public class MyDtoIgnoreUnknown { - - private String stringValue; - private int intValue; - private boolean booleanValue; - - public MyDtoIgnoreUnknown() { - super(); - } - - public MyDtoIgnoreUnknown(final String stringValue, final int intValue, final boolean booleanValue) { - super(); - - this.stringValue = stringValue; - this.intValue = intValue; - this.booleanValue = booleanValue; - } - - // API - - public String getStringValue() { - return stringValue; - } - - public void setStringValue(final String stringValue) { - this.stringValue = stringValue; - } - - public int getIntValue() { - return intValue; - } - - public void setIntValue(final int intValue) { - this.intValue = intValue; - } - - public boolean isBooleanValue() { - return booleanValue; - } - - public void setBooleanValue(final boolean booleanValue) { - this.booleanValue = booleanValue; - } - -} diff --git a/jackson-simple/src/main/resources/logback.xml b/jackson-simple/src/main/resources/logback.xml deleted file mode 100644 index 56af2d397e..0000000000 --- a/jackson-simple/src/main/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jackson-simple/src/test/java/com/ossez/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/annotation/JacksonAnnotationUnitTest.java deleted file mode 100644 index f4de0c2f7a..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/annotation/JacksonAnnotationUnitTest.java +++ /dev/null @@ -1,406 +0,0 @@ -package com.ossez.jackson.annotation; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; - -import com.ossez.jackson.annotation.bidirection.ItemWithIdentity; -import com.ossez.jackson.annotation.bidirection.ItemWithRef; -import com.ossez.jackson.annotation.bidirection.UserWithIdentity; -import com.ossez.jackson.annotation.bidirection.UserWithRef; -import com.ossez.jackson.annotation.date.EventWithFormat; -import com.ossez.jackson.annotation.date.EventWithSerializer; -import com.ossez.jackson.annotation.dtos.User; -import com.ossez.jackson.annotation.dtos.withEnum.DistanceEnumWithValue; -import com.ossez.jackson.annotation.exception.UserWithRoot; -import com.ossez.jackson.annotation.exception.UserWithRootNamespace; -import com.ossez.jackson.annotation.ignore.MyMixInForIgnoreType; -import com.ossez.jackson.annotation.jsonview.Item; -import com.ossez.jackson.annotation.jsonview.Views; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.InjectableValues; -import com.fasterxml.jackson.databind.MapperFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.ser.FilterProvider; -import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; -import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; - -public class JacksonAnnotationUnitTest { - - @Test - public void whenSerializingUsingJsonAnyGetter_thenCorrect() throws JsonProcessingException { - final ExtendableBean bean = new ExtendableBean("My bean"); - bean.add("attr1", "val1"); - bean.add("attr2", "val2"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("attr1")); - assertThat(result, containsString("val1")); - } - - @Test - public void whenSerializingUsingJsonGetter_thenCorrect() throws JsonProcessingException { - final BeanWithGetter bean = new BeanWithGetter(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, containsString("1")); - } - - @Test - public void whenSerializingUsingJsonPropertyOrder_thenCorrect() throws JsonProcessingException { - final MyBean bean = new MyBean(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, containsString("1")); - } - - @Test - public void whenSerializingUsingJsonRawValue_thenCorrect() throws JsonProcessingException { - final RawBean bean = new RawBean("My bean", "{\"attr\":false}"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, containsString("{\"attr\":false}")); - } - - @Test - public void whenSerializingUsingJsonRootName_thenCorrect() throws JsonProcessingException { - final UserWithRoot user = new UserWithRoot(1, "John"); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.enable(SerializationFeature.WRAP_ROOT_VALUE); - final String result = mapper.writeValueAsString(user); - - assertThat(result, containsString("John")); - assertThat(result, containsString("user")); - } - - @Test - public void whenSerializingUsingJsonValue_thenCorrect() throws IOException { - final String enumAsString = new ObjectMapper().writeValueAsString(DistanceEnumWithValue.MILE); - - assertThat(enumAsString, is("1609.34")); - } - - @Test - public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - final String toParse = "20-12-2014 02:30:00"; - final Date date = df.parse(toParse); - final EventWithSerializer event = new EventWithSerializer("party", date); - - final String result = new ObjectMapper().writeValueAsString(event); - assertThat(result, containsString(toParse)); - } - - // ========================= Deserializing annotations ============================ - - @Test - public void whenDeserializingUsingJsonCreator_thenCorrect() throws IOException { - final String json = "{\"id\":1,\"theName\":\"My bean\"}"; - - final BeanWithCreator bean = new ObjectMapper().readerFor(BeanWithCreator.class) - .readValue(json); - assertEquals("My bean", bean.name); - } - - @Test - public void whenDeserializingUsingJsonInject_thenCorrect() throws IOException { - final String json = "{\"name\":\"My bean\"}"; - final InjectableValues inject = new InjectableValues.Std().addValue(int.class, 1); - - final BeanWithInject bean = new ObjectMapper().reader(inject) - .forType(BeanWithInject.class) - .readValue(json); - assertEquals("My bean", bean.name); - assertEquals(1, bean.id); - } - - @Test - public void whenDeserializingUsingJsonAnySetter_thenCorrect() throws IOException { - final String json = "{\"name\":\"My bean\",\"attr2\":\"val2\",\"attr1\":\"val1\"}"; - - final ExtendableBean bean = new ObjectMapper().readerFor(ExtendableBean.class) - .readValue(json); - assertEquals("My bean", bean.name); - assertEquals("val2", bean.getProperties() - .get("attr2")); - } - - @Test - public void whenDeserializingUsingJsonSetter_thenCorrect() throws IOException { - final String json = "{\"id\":1,\"name\":\"My bean\"}"; - - final BeanWithGetter bean = new ObjectMapper().readerFor(BeanWithGetter.class) - .readValue(json); - assertEquals("My bean", bean.getTheName()); - } - - @Test - public void whenDeserializingUsingJsonDeserialize_thenCorrect() throws IOException { - final String json = "{\"name\":\"party\",\"eventDate\":\"20-12-2014 02:30:00\"}"; - - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - - final EventWithSerializer event = new ObjectMapper().readerFor(EventWithSerializer.class) - .readValue(json); - assertEquals("20-12-2014 02:30:00", df.format(event.eventDate)); - } - - // ========================= Inclusion annotations ============================ - - @Test - public void whenSerializingUsingJsonIgnoreProperties_thenCorrect() throws JsonProcessingException { - final BeanWithIgnore bean = new BeanWithIgnore(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, not(containsString("id"))); - } - - @Test - public void whenSerializingUsingJsonIgnore_thenCorrect() throws JsonProcessingException { - final BeanWithIgnore bean = new BeanWithIgnore(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, not(containsString("id"))); - } - - @Test - public void whenSerializingUsingJsonIgnoreType_thenCorrect() throws JsonProcessingException, ParseException { - final UserWithIgnoreType.Name name = new UserWithIgnoreType.Name("John", "Doe"); - final UserWithIgnoreType user = new UserWithIgnoreType(1, name); - - final String result = new ObjectMapper().writeValueAsString(user); - - assertThat(result, containsString("1")); - assertThat(result, not(containsString("name"))); - assertThat(result, not(containsString("John"))); - } - - @Test - public void whenSerializingUsingJsonInclude_thenCorrect() throws JsonProcessingException { - final MyBean bean = new MyBean(1, null); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("1")); - assertThat(result, not(containsString("name"))); - } - - @Test - public void whenSerializingUsingJsonAutoDetect_thenCorrect() throws JsonProcessingException { - final PrivateBean bean = new PrivateBean(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("1")); - assertThat(result, containsString("My bean")); - } - - // ========================= Polymorphic annotations ============================ - - @Test - public void whenSerializingPolymorphic_thenCorrect() throws JsonProcessingException { - final Zoo.Dog dog = new Zoo.Dog("lacy"); - final Zoo zoo = new Zoo(dog); - - final String result = new ObjectMapper().writeValueAsString(zoo); - - assertThat(result, containsString("type")); - assertThat(result, containsString("dog")); - } - - @Test - public void whenDeserializingPolymorphic_thenCorrect() throws IOException { - final String json = "{\"animal\":{\"name\":\"lacy\",\"type\":\"cat\"}}"; - - final Zoo zoo = new ObjectMapper().readerFor(Zoo.class) - .readValue(json); - - assertEquals("lacy", zoo.animal.name); - assertEquals(Zoo.Cat.class, zoo.animal.getClass()); - } - // ========================= General annotations ============================ - - @Test - public void whenUsingJsonProperty_thenCorrect() throws IOException { - final BeanWithGetter bean = new BeanWithGetter(1, "My bean"); - - final String result = new ObjectMapper().writeValueAsString(bean); - assertThat(result, containsString("My bean")); - assertThat(result, containsString("1")); - - final BeanWithGetter resultBean = new ObjectMapper().readerFor(BeanWithGetter.class) - .readValue(result); - assertEquals("My bean", resultBean.getTheName()); - } - - @Test - public void whenSerializingUsingJsonFormat_thenCorrect() throws JsonProcessingException, ParseException { - final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - final String toParse = "20-12-2014 02:30:00"; - final Date date = df.parse(toParse); - final EventWithFormat event = new EventWithFormat("party", date); - - final String result = new ObjectMapper().writeValueAsString(event); - assertThat(result, containsString(toParse)); - } - - @Test - public void whenSerializingUsingJsonUnwrapped_thenCorrect() throws JsonProcessingException, ParseException { - final UnwrappedUser.Name name = new UnwrappedUser.Name("John", "Doe"); - final UnwrappedUser user = new UnwrappedUser(1, name); - - final String result = new ObjectMapper().writeValueAsString(user); - assertThat(result, containsString("John")); - assertThat(result, not(containsString("name"))); - } - - @Test - public void whenSerializingUsingJsonView_thenCorrect() throws JsonProcessingException, JsonProcessingException { - final Item item = new Item(2, "book", "John"); - - final String result = new ObjectMapper().writerWithView(Views.Public.class) - .writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("2")); - assertThat(result, not(containsString("John"))); - } - - @Test - public void whenSerializingUsingJacksonReferenceAnnotation_thenCorrect() throws JsonProcessingException { - final UserWithRef user = new UserWithRef(1, "John"); - final ItemWithRef item = new ItemWithRef(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, not(containsString("userItems"))); - } - - @Test - public void whenSerializingUsingJsonIdentityInfo_thenCorrect() throws JsonProcessingException { - final UserWithIdentity user = new UserWithIdentity(1, "John"); - final ItemWithIdentity item = new ItemWithIdentity(2, "book", user); - user.addItem(item); - - final String result = new ObjectMapper().writeValueAsString(item); - - assertThat(result, containsString("book")); - assertThat(result, containsString("John")); - assertThat(result, containsString("userItems")); - } - - @Test - public void whenSerializingUsingJsonFilter_thenCorrect() throws JsonProcessingException { - final BeanWithFilter bean = new BeanWithFilter(1, "My bean"); - - final FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", SimpleBeanPropertyFilter.filterOutAllExcept("name")); - - final String result = new ObjectMapper().writer(filters) - .writeValueAsString(bean); - - assertThat(result, containsString("My bean")); - assertThat(result, not(containsString("id"))); - } - - // ========================= - @Test - public void whenSerializingUsingCustomAnnotation_thenCorrect() throws JsonProcessingException { - final BeanWithCustomAnnotation bean = new BeanWithCustomAnnotation(1, "My bean", null); - - final String result = new ObjectMapper().writeValueAsString(bean); - - assertThat(result, containsString("My bean")); - assertThat(result, containsString("1")); - assertThat(result, not(containsString("dateCreated"))); - } - - // @Ignore("Jackson 2.7.1-1 seems to have changed the API regarding mixins") - @Test - public void whenSerializingUsingMixInAnnotation_thenCorrect() throws JsonProcessingException { - final com.ossez.jackson.annotation.dtos.Item item = new com.ossez.jackson.annotation.dtos.Item(1, "book", null); - - String result = new ObjectMapper().writeValueAsString(item); - assertThat(result, containsString("owner")); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.addMixIn(User.class, MyMixInForIgnoreType.class); - - result = mapper.writeValueAsString(item); - assertThat(result, not(containsString("owner"))); - } - - @Test - public void whenDisablingAllAnnotations_thenAllDisabled() throws JsonProcessingException { - final MyBean bean = new MyBean(1, null); - - final ObjectMapper mapper = new ObjectMapper(); - mapper.disable(MapperFeature.USE_ANNOTATIONS); - - final String result = mapper.writeValueAsString(bean); - assertThat(result, containsString("1")); - assertThat(result, containsString("name")); - } - - @Test - public void whenDeserializingUsingJsonAlias_thenCorrect() throws IOException { - - // arrange - String json = "{\"fName\": \"John\", \"lastName\": \"Green\"}"; - - // act - AliasBean aliasBean = new ObjectMapper().readerFor(AliasBean.class).readValue(json); - - // assert - assertThat(aliasBean.getFirstName(), is("John")); - } - - @Test - public void whenSerializingUsingXMLRootNameWithNameSpace_thenCorrect() throws JsonProcessingException { - - // arrange - UserWithRootNamespace author = new UserWithRootNamespace(1, "John"); - - // act - ObjectMapper mapper = new XmlMapper(); - mapper = mapper.enable(SerializationFeature.WRAP_ROOT_VALUE).enable(SerializationFeature.INDENT_OUTPUT); - String result = mapper.writeValueAsString(author); - - // assert - assertThat(result, containsString("")); - - /* - - 3006b44a-cf62-4cfe-b3d8-30dc6c46ea96 - 1 - John - - - */ - - } - - - -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/ignore/IgnoreFieldsWithFilterUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/ignore/IgnoreFieldsWithFilterUnitTest.java deleted file mode 100644 index 777ce8286e..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/ignore/IgnoreFieldsWithFilterUnitTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.ossez.jackson.ignore; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; -import com.fasterxml.jackson.databind.ser.FilterProvider; -import com.fasterxml.jackson.databind.ser.PropertyFilter; -import com.fasterxml.jackson.databind.ser.PropertyWriter; -import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; -import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; -import org.junit.Test; - -import java.io.IOException; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -public class IgnoreFieldsWithFilterUnitTest { - - @Test - public final void givenTypeHasFilterThatIgnoresFieldByName_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter.serializeAllExcept("intValue"); - final FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); - - final MyDtoWithFilter dtoObject = new MyDtoWithFilter(); - dtoObject.setIntValue(12); - - final String dtoAsString = mapper.writer(filters) - .writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, containsString("stringValue")); - System.out.println(dtoAsString); - } - - @Test - public final void givenTypeHasFilterThatIgnoresNegativeInt_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final PropertyFilter theFilter = new SimpleBeanPropertyFilter() { - @Override - public final void serializeAsField(final Object pojo, final JsonGenerator jgen, final SerializerProvider provider, final PropertyWriter writer) throws Exception { - if (include(writer)) { - if (!writer.getName() - .equals("intValue")) { - writer.serializeAsField(pojo, jgen, provider); - return; - } - - final int intValue = ((MyDtoWithFilter) pojo).getIntValue(); - if (intValue >= 0) { - writer.serializeAsField(pojo, jgen, provider); - } - } else if (!jgen.canOmitFields()) { // since 2.3 - writer.serializeAsOmittedField(pojo, jgen, provider); - } - } - - @Override - protected final boolean include(final BeanPropertyWriter writer) { - return true; - } - - @Override - protected final boolean include(final PropertyWriter writer) { - return true; - } - }; - final FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter); - - final MyDtoWithFilter dtoObject = new MyDtoWithFilter(); - dtoObject.setIntValue(-1); - - final ObjectMapper mapper = new ObjectMapper(); - final String dtoAsString = mapper.writer(filters) - .writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, containsString("stringValue")); - System.out.println(dtoAsString); - } - -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/ignore/JacksonSerializationIgnoreUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/ignore/JacksonSerializationIgnoreUnitTest.java deleted file mode 100644 index e8213a463b..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/ignore/JacksonSerializationIgnoreUnitTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.ossez.jackson.ignore; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JacksonSerializationIgnoreUnitTest { - - // tests - single entity to json - - // ignore - - @Test - public final void givenOnlyNonDefaultValuesAreSerializedAndDtoHasOnlyDefaultValues_whenSerializing_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String dtoAsString = mapper.writeValueAsString(new MyDtoIncludeNonDefault()); - - assertThat(dtoAsString, not(containsString("intValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenOnlyNonDefaultValuesAreSerializedAndDtoHasNonDefaultValue_whenSerializing_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoIncludeNonDefault dtoObject = new MyDtoIncludeNonDefault(); - dtoObject.setBooleanValue(true); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("booleanValue")); - System.out.println(dtoAsString); - } - - @Test - public final void givenFieldIsIgnoredByName_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoIgnoreFieldByName dtoObject = new MyDtoIgnoreFieldByName(); - dtoObject.setBooleanValue(true); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - System.out.println(dtoAsString); - } - - @Test - public final void givenFieldIsIgnoredDirectly_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoIgnoreField dtoObject = new MyDtoIgnoreField(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("intValue"))); - assertThat(dtoAsString, containsString("booleanValue")); - System.out.println(dtoAsString); - } - - // @Ignore("Jackson 2.7.1-1 seems to have changed the API for this case") - @Test - public final void givenFieldTypeIsIgnored_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.addMixIn(String[].class, MyMixInForIgnoreType.class); - final MyDtoWithSpecialField dtoObject = new MyDtoWithSpecialField(); - dtoObject.setBooleanValue(true); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, not(containsString("stringValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoIgnoreNull dtoObject = new MyDtoIgnoreNull(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, not(containsString("stringValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(Include.NON_NULL); - final MyDto dtoObject = new MyDto(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, not(containsString("stringValue"))); - System.out.println(dtoAsString); - } - -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/ignorenullfields/IgnoreNullFieldsUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/ignorenullfields/IgnoreNullFieldsUnitTest.java deleted file mode 100644 index 056c31e9dc..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/ignorenullfields/IgnoreNullFieldsUnitTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ossez.jackson.ignorenullfields; - -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -public class IgnoreNullFieldsUnitTest { - - @Test - public final void givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoIgnoreNull dtoObject = new MyDtoIgnoreNull(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, not(containsString("stringValue"))); - System.out.println(dtoAsString); - } - - @Test - public final void givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored() throws JsonProcessingException { - final ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(Include.NON_NULL); - final MyDto dtoObject = new MyDto(); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("booleanValue")); - assertThat(dtoAsString, not(containsString("stringValue"))); - System.out.println(dtoAsString); - } - -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/jsonproperty/JsonPropertyUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/jsonproperty/JsonPropertyUnitTest.java deleted file mode 100644 index 055c9398e0..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/jsonproperty/JsonPropertyUnitTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.ossez.jackson.jsonproperty; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JsonPropertyUnitTest { - - @Test - public final void whenSerializing_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final String dtoAsString = mapper.writeValueAsString(new MyDto()); - - assertThat(dtoAsString, containsString("intValue")); - assertThat(dtoAsString, containsString("stringValue")); - assertThat(dtoAsString, containsString("booleanValue")); - } - - @Test - public final void givenNameOfFieldIsChangedViaAnnotationOnGetter_whenSerializing_thenCorrect() throws JsonParseException, IOException { - final ObjectMapper mapper = new ObjectMapper(); - final MyDtoFieldNameChanged dtoObject = new MyDtoFieldNameChanged(); - dtoObject.setStringValue("a"); - - final String dtoAsString = mapper.writeValueAsString(dtoObject); - - assertThat(dtoAsString, not(containsString("stringValue"))); - assertThat(dtoAsString, containsString("strVal")); - System.out.println(dtoAsString); - } - -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/JavaReadWriteJsonExampleUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/JavaReadWriteJsonExampleUnitTest.java deleted file mode 100644 index ac6085dc2e..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/JavaReadWriteJsonExampleUnitTest.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.ossez.jackson.objectmapper; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -import java.io.File; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -import com.ossez.jackson.objectmapper.dto.Car; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JavaReadWriteJsonExampleUnitTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - final String EXAMPLE_JSON = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; - final String LOCAL_JSON = "[{ \"color\" : \"Black\", \"type\" : \"BMW\" }, { \"color\" : \"Red\", \"type\" : \"BMW\" }]"; - - @Test - public void whenWriteJavaToJson_thanCorrect() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final Car car = new Car("yellow", "renault"); - final String carAsString = objectMapper.writeValueAsString(car); - assertThat(carAsString, containsString("yellow")); - assertThat(carAsString, containsString("renault")); - } - - @Test - public void whenWriteToFile_thanCorrect() throws Exception { - File resultFile = folder.newFile("car.json"); - - ObjectMapper objectMapper = new ObjectMapper(); - Car car = new Car("yellow", "renault"); - objectMapper.writeValue(resultFile, car); - - Car fromFile = objectMapper.readValue(resultFile, Car.class); - assertEquals(car.getType(), fromFile.getType()); - assertEquals(car.getColor(), fromFile.getColor()); - } - - @Test - public void whenReadJsonToJava_thanCorrect() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final Car car = objectMapper.readValue(EXAMPLE_JSON, Car.class); - assertNotNull(car); - assertThat(car.getColor(), containsString("Black")); - } - - @Test - public void whenReadJsonToJsonNode_thanCorrect() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final JsonNode jsonNode = objectMapper.readTree(EXAMPLE_JSON); - assertNotNull(jsonNode); - assertThat(jsonNode.get("color") - .asText(), containsString("Black")); - } - - @Test - public void whenReadJsonToList_thanCorrect() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final List listCar = objectMapper.readValue(LOCAL_JSON, new TypeReference>() { - - }); - for (final Car car : listCar) { - assertNotNull(car); - assertThat(car.getType(), equalTo("BMW")); - } - } - - @Test - public void whenReadJsonToMap_thanCorrect() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final Map map = objectMapper.readValue(EXAMPLE_JSON, new TypeReference>() { - }); - assertNotNull(map); - for (final String key : map.keySet()) { - assertNotNull(key); - } - } - - @Test - public void wheReadFromFile_thanCorrect() throws Exception { - File resource = new File("src/test/resources/json_car.json"); - - ObjectMapper objectMapper = new ObjectMapper(); - Car fromFile = objectMapper.readValue(resource, Car.class); - - assertEquals("BMW", fromFile.getType()); - assertEquals("Black", fromFile.getColor()); - } - - @Test - public void wheReadFromUrl_thanCorrect() throws Exception { - URL resource = new URL("file:src/test/resources/json_car.json"); - - ObjectMapper objectMapper = new ObjectMapper(); - Car fromFile = objectMapper.readValue(resource, Car.class); - - assertEquals("BMW", fromFile.getType()); - assertEquals("Black", fromFile.getColor()); - } -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/SerializationDeserializationFeatureUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/SerializationDeserializationFeatureUnitTest.java deleted file mode 100644 index 47341c1c79..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/objectmapper/SerializationDeserializationFeatureUnitTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.ossez.jackson.objectmapper; - -import com.ossez.jackson.objectmapper.dto.Car; -import com.ossez.jackson.objectmapper.dto.Request; -import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import org.junit.Test; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -public class SerializationDeserializationFeatureUnitTest { - - final String EXAMPLE_JSON = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }"; - final String JSON_CAR = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" : \"1970\" }"; - final String JSON_ARRAY = "[{ \"color\" : \"Black\", \"type\" : \"BMW\" }, { \"color\" : \"Red\", \"type\" : \"BMW\" }]"; - - @Test - public void whenFailOnUnkownPropertiesFalse_thanJsonReadCorrectly() throws Exception { - - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - final Car car = objectMapper.readValue(JSON_CAR, Car.class); - final JsonNode jsonNodeRoot = objectMapper.readTree(JSON_CAR); - final JsonNode jsonNodeYear = jsonNodeRoot.get("year"); - final String year = jsonNodeYear.asText(); - - assertNotNull(car); - assertThat(car.getColor(), equalTo("Black")); - assertThat(year, containsString("1970")); - } - - @Test - public void whenCustomSerializerDeserializer_thanReadWriteCorrect() throws Exception { - final ObjectMapper mapper = new ObjectMapper(); - final SimpleModule serializerModule = new SimpleModule("CustomSerializer", new Version(1, 0, 0, null, null, null)); - serializerModule.addSerializer(Car.class, new CustomCarSerializer()); - mapper.registerModule(serializerModule); - final Car car = new Car("yellow", "renault"); - final String carJson = mapper.writeValueAsString(car); - assertThat(carJson, containsString("renault")); - assertThat(carJson, containsString("model")); - - final SimpleModule deserializerModule = new SimpleModule("CustomCarDeserializer", new Version(1, 0, 0, null, null, null)); - deserializerModule.addDeserializer(Car.class, new CustomCarDeserializer()); - mapper.registerModule(deserializerModule); - final Car carResult = mapper.readValue(EXAMPLE_JSON, Car.class); - assertNotNull(carResult); - assertThat(carResult.getColor(), equalTo("Black")); - } - - @Test - public void whenDateFormatSet_thanSerializedAsExpected() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - final Car car = new Car("yellow", "renault"); - final Request request = new Request(); - request.setCar(car); - request.setDatePurchased(new Date()); - final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm a z"); - objectMapper.setDateFormat(df); - final String carAsString = objectMapper.writeValueAsString(request); - assertNotNull(carAsString); - assertThat(carAsString, containsString("datePurchased")); - } - - @Test - public void whenUseJavaArrayForJsonArrayTrue_thanJsonReadAsArray() throws Exception { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true); - final Car[] cars = objectMapper.readValue(JSON_ARRAY, Car[].class); - for (final Car car : cars) { - assertNotNull(car); - assertThat(car.getType(), equalTo("BMW")); - } - } -} diff --git a/jackson-simple/src/test/java/com/ossez/jackson/unknownproperties/UnknownPropertiesUnitTest.java b/jackson-simple/src/test/java/com/ossez/jackson/unknownproperties/UnknownPropertiesUnitTest.java deleted file mode 100644 index 58df5c49de..0000000000 --- a/jackson-simple/src/test/java/com/ossez/jackson/unknownproperties/UnknownPropertiesUnitTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.ossez.jackson.unknownproperties; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; -import org.junit.Test; - -import java.io.IOException; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -public class UnknownPropertiesUnitTest { - - @Test - public final void givenNotAllFieldsHaveValuesInJson_whenDeserializingAJsonToAClass_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String jsonAsString = "{\"stringValue\":\"a\",\"booleanValue\":true}"; - final ObjectMapper mapper = new ObjectMapper(); - - final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); - - assertNotNull(readValue); - assertThat(readValue.getStringValue(), equalTo("a")); - assertThat(readValue.isBooleanValue(), equalTo(true)); - } - - // tests - json with unknown fields - - @Test(expected = UnrecognizedPropertyException.class) - public final void givenJsonHasUnknownValues_whenDeserializingAJsonToAClass_thenExceptionIsThrown() throws JsonParseException, JsonMappingException, IOException { - final String jsonAsString = "{\"stringValue\":\"a\",\"intValue\":1,\"booleanValue\":true,\"stringValue2\":\"something\"}"; - final ObjectMapper mapper = new ObjectMapper(); - - final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); - - assertNotNull(readValue); - assertThat(readValue.getStringValue(), equalTo("a")); - assertThat(readValue.isBooleanValue(), equalTo(true)); - assertThat(readValue.getIntValue(), equalTo(1)); - } - - @Test - public final void givenJsonHasUnknownValuesButJacksonIsIgnoringUnknownFields_whenDeserializing_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String jsonAsString = // @formatter:off - "{\"stringValue\":\"a\"," + - "\"intValue\":1," + - "\"booleanValue\":true," + - "\"stringValue2\":\"something\"}"; // @formatter:on - final ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - - final MyDto readValue = mapper.readValue(jsonAsString, MyDto.class); - - assertNotNull(readValue); - assertThat(readValue.getStringValue(), equalTo("a")); - assertThat(readValue.isBooleanValue(), equalTo(true)); - assertThat(readValue.getIntValue(), equalTo(1)); - } - - @Test - public final void givenJsonHasUnknownValuesButUnknownFieldsAreIgnoredOnClass_whenDeserializing_thenCorrect() throws JsonParseException, JsonMappingException, IOException { - final String jsonAsString = // @formatter:off - "{\"stringValue\":\"a\"," + - "\"intValue\":1," + - "\"booleanValue\":true," + - "\"stringValue2\":\"something\"}"; // @formatter:on - final ObjectMapper mapper = new ObjectMapper(); - - final MyDtoIgnoreUnknown readValue = mapper.readValue(jsonAsString, MyDtoIgnoreUnknown.class); - - assertNotNull(readValue); - assertThat(readValue.getStringValue(), equalTo("a")); - assertThat(readValue.isBooleanValue(), equalTo(true)); - assertThat(readValue.getIntValue(), equalTo(1)); - } - -} diff --git a/jackson-simple/src/test/resources/json_car.json b/jackson-simple/src/test/resources/json_car.json deleted file mode 100644 index 2f6b35b523..0000000000 --- a/jackson-simple/src/test/resources/json_car.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "color": "Black", - "type": "BMW" -} \ No newline at end of file diff --git a/spring-batch/.gitignore b/spring-batch/.gitignore deleted file mode 100644 index 0ef6d10b38..0000000000 --- a/spring-batch/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output.csv \ No newline at end of file diff --git a/spring-batch/README.md b/spring-batch/README.md deleted file mode 100644 index 95abbaf931..0000000000 --- a/spring-batch/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Spring Batch - -This module contains articles about Spring Batch - -### Relevant Articles: -- [Introduction to Spring Batch](https://www.baeldung.com/introduction-to-spring-batch) -- [Spring Batch using Partitioner](https://www.baeldung.com/spring-batch-partitioner) -- [Spring Batch – Tasklets vs Chunks](https://www.baeldung.com/spring-batch-tasklet-chunk) -- [How to Trigger and Stop a Scheduled Spring Batch Job](https://www.baeldung.com/spring-batch-start-stop-job) diff --git a/spring-batch/pom.xml b/spring-batch/pom.xml deleted file mode 100644 index 238f03afd7..0000000000 --- a/spring-batch/pom.xml +++ /dev/null @@ -1,116 +0,0 @@ - - 4.0.0 - - spring-batch - 0.1-SNAPSHOT - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 11 - 11 - - - - - spring-batch - jar - - - parent-boot-2 - com.ossez - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - - - - javax.xml.bind - jaxb-api - ${jaxb.version} - - - - org.glassfish.jaxb - jaxb-runtime - ${jaxb.version} - runtime - - - - - org.xerial - sqlite-jdbc - ${sqlite.version} - - - - org.springframework - spring-oxm - ${spring.version} - - - commons-logging - commons-logging - - - - - - org.springframework - spring-jdbc - ${spring.version} - - - - org.springframework.batch - spring-batch-core - ${spring.batch.version} - - - - org.springframework.batch - spring-batch-test - ${spring.batch.version} - - - - com.opencsv - opencsv - ${opencsv.version} - - - - org.springframework.boot - spring-boot-starter-batch - - - - org.hsqldb - hsqldb - runtime - - - - org.awaitility - awaitility - ${awaitility.version} - test - - - - - 5.3.0 - 4.3.0 - 3.15.1 - 4.1 - 2.3.1 - 3.1.1 - - diff --git a/spring-batch/repository.sqlite b/spring-batch/repository.sqlite deleted file mode 100644 index 86cf9c3f9e07b8a0882a9f2022351f47450c3d96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 d6S3Mcpf=d*CA$3Lgco& itemReader(Resource inputData) throws UnexpectedInputException, ParseException { - FlatFileItemReader reader = new FlatFileItemReader<>(); - DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); - String[] tokens = {"username", "userid", "transactiondate", "amount"}; - tokenizer.setNames(tokens); - reader.setResource(inputData); - DefaultLineMapper lineMapper = new DefaultLineMapper<>(); - lineMapper.setLineTokenizer(tokenizer); - lineMapper.setFieldSetMapper(new RecordFieldSetMapper()); - reader.setLinesToSkip(1); - reader.setLineMapper(lineMapper); - return reader; - } - - @Bean - public ItemProcessor itemProcessor() { - return new CustomItemProcessor(); - } - - @Bean - public ItemProcessor skippingItemProcessor() { - return new SkippingItemProcessor(); - } - - @Bean - public ItemWriter itemWriter(Marshaller marshaller) { - StaxEventItemWriter itemWriter = new StaxEventItemWriter<>(); - itemWriter.setMarshaller(marshaller); - itemWriter.setRootTagName("transactionRecord"); - itemWriter.setResource(outputXml); - return itemWriter; - } - - @Bean - public Marshaller marshaller() { - Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); - marshaller.setClassesToBeBound(Transaction.class); - return marshaller; - } - - @Bean - protected Step step1(@Qualifier("itemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory.get("step1").chunk(10).reader(itemReader(inputCsv)).processor(processor).writer(writer).build(); - } - - @Bean(name = "firstBatchJob") - public Job job(@Qualifier("step1") Step step1) { - return jobBuilderFactory.get("firstBatchJob").start(step1).build(); - } - - @Bean - public Step skippingStep(@Qualifier("skippingItemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory - .get("skippingStep") - .chunk(10) - .reader(itemReader(invalidInputCsv)) - .processor(processor) - .writer(writer) - .faultTolerant() - .skipLimit(2) - .skip(MissingUsernameException.class) - .skip(NegativeAmountException.class) - .build(); - } - - @Bean(name = "skippingBatchJob") - public Job skippingJob(@Qualifier("skippingStep") Step skippingStep) { - return jobBuilderFactory - .get("skippingBatchJob") - .start(skippingStep) - .build(); - } - - @Bean - public Step skipPolicyStep(@Qualifier("skippingItemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory - .get("skipPolicyStep") - .chunk(10) - .reader(itemReader(invalidInputCsv)) - .processor(processor) - .writer(writer) - .faultTolerant() - .skipPolicy(new CustomSkipPolicy()) - .build(); - } - - @Bean(name = "skipPolicyBatchJob") - public Job skipPolicyBatchJob(@Qualifier("skipPolicyStep") Step skipPolicyStep) { - return jobBuilderFactory - .get("skipPolicyBatchJob") - .start(skipPolicyStep) - .build(); - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/SpringConfig.java b/spring-batch/src/main/java/com/ossez/spring/batch/SpringConfig.java deleted file mode 100644 index 23390fe22f..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/SpringConfig.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.ossez.spring.batch; - -import java.net.MalformedURLException; - -import javax.sql.DataSource; - -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; -import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; -import org.springframework.transaction.PlatformTransactionManager; - -@Configuration -@EnableBatchProcessing -public class SpringConfig { - - @Value("org/springframework/batch/core/schema-drop-sqlite.sql") - private Resource dropReopsitoryTables; - - @Value("org/springframework/batch/core/schema-sqlite.sql") - private Resource dataReopsitorySchema; - - @Bean - public DataSource dataSource() { - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName("org.sqlite.JDBC"); - dataSource.setUrl("jdbc:sqlite:repository.sqlite"); - return dataSource; - } - - @Bean - public DataSourceInitializer dataSourceInitializer(DataSource dataSource) throws MalformedURLException { - ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(); - - databasePopulator.addScript(dropReopsitoryTables); - databasePopulator.addScript(dataReopsitorySchema); - databasePopulator.setIgnoreFailedDrops(true); - - DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator(databasePopulator); - - return initializer; - } - - private JobRepository getJobRepository() throws Exception { - JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); - factory.setDataSource(dataSource()); - factory.setTransactionManager(getTransactionManager()); - // JobRepositoryFactoryBean's methods Throws Generic Exception, - // it would have been better to have a specific one - factory.afterPropertiesSet(); - return (JobRepository) factory.getObject(); - } - - private PlatformTransactionManager getTransactionManager() { - return new ResourcelessTransactionManager(); - } - - public JobLauncher getJobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - // SimpleJobLauncher's methods Throws Generic Exception, - // it would have been better to have a specific one - jobLauncher.setJobRepository(getJobRepository()); - jobLauncher.afterPropertiesSet(); - return jobLauncher; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/model/Transaction.java b/spring-batch/src/main/java/com/ossez/spring/batch/model/Transaction.java deleted file mode 100644 index 9349b747a4..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/model/Transaction.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.ossez.spring.batch.model; - -import javax.xml.bind.annotation.XmlRootElement; -import java.util.Date; - -@SuppressWarnings("restriction") -@XmlRootElement(name = "transactionRecord") -public class Transaction { - private String username; - private int userId; - private Date transactionDate; - private double amount; - - /* getters and setters for the attributes */ - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public int getUserId() { - return userId; - } - - public void setUserId(int userId) { - this.userId = userId; - } - - public Date getTransactionDate() { - return transactionDate; - } - - public void setTransactionDate(Date transactionDate) { - this.transactionDate = transactionDate; - } - - public double getAmount() { - return amount; - } - - public void setAmount(double amount) { - this.amount = amount; - } - - @Override - public String toString() { - return "Transaction [username=" + username + ", userId=" + userId + ", transactionDate=" + transactionDate + ", amount=" + amount + "]"; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/CustomMultiResourcePartitioner.java b/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/CustomMultiResourcePartitioner.java deleted file mode 100644 index 10c158b3ca..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/CustomMultiResourcePartitioner.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2006-2013 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.ossez.spring.batch.partitioner; - -import java.util.HashMap; -import java.util.Map; - -import org.springframework.batch.core.partition.support.Partitioner; -import org.springframework.batch.item.ExecutionContext; -import org.springframework.core.io.Resource; -import org.springframework.util.Assert; - -public class CustomMultiResourcePartitioner implements Partitioner { - - private static final String DEFAULT_KEY_NAME = "fileName"; - - private static final String PARTITION_KEY = "partition"; - - private Resource[] resources = new Resource[0]; - - private String keyName = DEFAULT_KEY_NAME; - - /** - * The resources to assign to each partition. In Spring configuration you - * can use a pattern to select multiple resources. - * @param resources the resources to use - */ - public void setResources(Resource[] resources) { - this.resources = resources; - } - - /** - * The name of the key for the file name in each {@link ExecutionContext}. - * Defaults to "fileName". - * @param keyName the value of the key - */ - public void setKeyName(String keyName) { - this.keyName = keyName; - } - - /** - * Assign the filename of each of the injected resources to an - * {@link ExecutionContext}. - * - * @see Partitioner#partition(int) - */ - @Override - public Map partition(int gridSize) { - Map map = new HashMap(gridSize); - int i = 0, k = 1; - for (Resource resource : resources) { - ExecutionContext context = new ExecutionContext(); - Assert.state(resource.exists(), "Resource does not exist: " + resource); - context.putString(keyName, resource.getFilename()); - context.putString("opFileName", "output" + k++ + ".xml"); - - map.put(PARTITION_KEY + i, context); - i++; - } - return map; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionConfig.java b/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionConfig.java deleted file mode 100644 index 7bf2977519..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionConfig.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.ossez.spring.batch.partitioner; - -import com.ossez.spring.batch.model.Transaction; -import com.ossez.spring.batch.service.RecordFieldSetMapper; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepScope; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; -import org.springframework.batch.item.UnexpectedInputException; -import org.springframework.batch.item.file.FlatFileItemReader; -import org.springframework.batch.item.file.mapping.DefaultLineMapper; -import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; -import org.springframework.batch.item.xml.StaxEventItemWriter; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.core.task.TaskExecutor; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.oxm.Marshaller; -import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.transaction.PlatformTransactionManager; - -import javax.sql.DataSource; -import java.io.IOException; -import java.net.MalformedURLException; -import java.text.ParseException; - -@Configuration -@EnableBatchProcessing -public class SpringbatchPartitionConfig { - - @Autowired - ResourcePatternResolver resoursePatternResolver; - - @Autowired - private JobBuilderFactory jobs; - - @Autowired - private StepBuilderFactory steps; - - @Bean(name = "partitionerJob") - public Job partitionerJob() throws UnexpectedInputException, MalformedURLException, ParseException { - return jobs.get("partitionerJob") - .start(partitionStep()) - .build(); - } - - @Bean - public Step partitionStep() throws UnexpectedInputException, MalformedURLException, ParseException { - return steps.get("partitionStep") - .partitioner("slaveStep", partitioner()) - .step(slaveStep()) - .taskExecutor(taskExecutor()) - .build(); - } - - @Bean - public Step slaveStep() throws UnexpectedInputException, MalformedURLException, ParseException { - return steps.get("slaveStep") - .chunk(1) - .reader(itemReader(null)) - .writer(itemWriter(marshaller(), null)) - .build(); - } - - @Bean - public CustomMultiResourcePartitioner partitioner() { - CustomMultiResourcePartitioner partitioner = new CustomMultiResourcePartitioner(); - Resource[] resources; - try { - resources = resoursePatternResolver.getResources("file:src/main/resources/input/partitioner/*.csv"); - } catch (IOException e) { - throw new RuntimeException("I/O problems when resolving the input file pattern.", e); - } - partitioner.setResources(resources); - return partitioner; - } - - @Bean - @StepScope - public FlatFileItemReader itemReader(@Value("#{stepExecutionContext[fileName]}") String filename) throws UnexpectedInputException, ParseException { - FlatFileItemReader reader = new FlatFileItemReader<>(); - DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); - String[] tokens = {"username", "userid", "transactiondate", "amount"}; - tokenizer.setNames(tokens); - reader.setResource(new ClassPathResource("input/partitioner/" + filename)); - DefaultLineMapper lineMapper = new DefaultLineMapper<>(); - lineMapper.setLineTokenizer(tokenizer); - lineMapper.setFieldSetMapper(new RecordFieldSetMapper()); - reader.setLinesToSkip(1); - reader.setLineMapper(lineMapper); - return reader; - } - - @Bean(destroyMethod = "") - @StepScope - public StaxEventItemWriter itemWriter(Marshaller marshaller, @Value("#{stepExecutionContext[opFileName]}") String filename) throws MalformedURLException { - StaxEventItemWriter itemWriter = new StaxEventItemWriter<>(); - itemWriter.setMarshaller(marshaller); - itemWriter.setRootTagName("transactionRecord"); - itemWriter.setResource(new FileSystemResource("src/main/resources/output/" + filename)); - return itemWriter; - } - - @Bean - public Marshaller marshaller() { - Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); - marshaller.setClassesToBeBound(Transaction.class); - return marshaller; - } - - @Bean - public TaskExecutor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - taskExecutor.setMaxPoolSize(5); - taskExecutor.setCorePoolSize(5); - taskExecutor.setQueueCapacity(5); - taskExecutor.afterPropertiesSet(); - return taskExecutor; - } - - private JobRepository getJobRepository() throws Exception { - JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); - factory.setDataSource(dataSource()); - factory.setTransactionManager(getTransactionManager()); - // JobRepositoryFactoryBean's methods Throws Generic Exception, - // it would have been better to have a specific one - factory.afterPropertiesSet(); - return factory.getObject(); - } - - private DataSource dataSource() { - EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); - return builder.setType(EmbeddedDatabaseType.HSQL) - .addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql") - .addScript("classpath:org/springframework/batch/core/schema-h2.sql") - .build(); - } - - private PlatformTransactionManager getTransactionManager() { - return new ResourcelessTransactionManager(); - } - - public JobLauncher getJobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - // SimpleJobLauncher's methods Throws Generic Exception, - // it would have been better to have a specific one - jobLauncher.setJobRepository(getJobRepository()); - jobLauncher.afterPropertiesSet(); - return jobLauncher; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionerApp.java b/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionerApp.java deleted file mode 100644 index 2896fe8268..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/partitioner/SpringbatchPartitionerApp.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ossez.spring.batch.partitioner; - -import org.springframework.batch.core.Job; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.JobParameters; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -public class SpringbatchPartitionerApp { - public static void main(final String[] args) { - // Spring Java config - final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); - context.register(SpringbatchPartitionConfig.class); - context.refresh(); - - final JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); - final Job job = (Job) context.getBean("partitionerJob"); - System.out.println("Starting the batch job"); - try { - final JobExecution execution = jobLauncher.run(job, new JobParameters()); - System.out.println("Job Status : " + execution.getStatus()); - System.out.println("Job succeeded"); - } catch (final Exception e) { - e.printStackTrace(); - System.out.println("Job failed"); - } - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomItemProcessor.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomItemProcessor.java deleted file mode 100644 index 451806f856..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomItemProcessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.ossez.spring.batch.service; - -import org.baeldung.batch.model.Transaction; -import org.springframework.batch.item.ItemProcessor; - -public class CustomItemProcessor implements ItemProcessor { - - public Transaction process(Transaction item) { - System.out.println("Processing..." + item); - return item; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomSkipPolicy.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomSkipPolicy.java deleted file mode 100644 index 25be1840bd..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/CustomSkipPolicy.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ossez.spring.batch.service; - -import org.springframework.batch.core.step.skip.SkipLimitExceededException; -import org.springframework.batch.core.step.skip.SkipPolicy; - -public class CustomSkipPolicy implements SkipPolicy { - - private static final int MAX_SKIP_COUNT = 2; - private static final int INVALID_TX_AMOUNT_LIMIT = -1000; - - @Override - public boolean shouldSkip(Throwable throwable, int skipCount) throws SkipLimitExceededException { - - if (throwable instanceof MissingUsernameException && skipCount < MAX_SKIP_COUNT) { - return true; - } - - if (throwable instanceof NegativeAmountException && skipCount < MAX_SKIP_COUNT ) { - NegativeAmountException ex = (NegativeAmountException) throwable; - if(ex.getAmount() < INVALID_TX_AMOUNT_LIMIT){ - return false; - } else{ - return true; - } - } - - return false; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/MissingUsernameException.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/MissingUsernameException.java deleted file mode 100644 index 624dcb7ab9..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/MissingUsernameException.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.ossez.spring.batch.service; - -public class MissingUsernameException extends RuntimeException { -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/NegativeAmountException.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/NegativeAmountException.java deleted file mode 100644 index 125bc0d393..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/NegativeAmountException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ossez.spring.batch.service; - -public class NegativeAmountException extends RuntimeException { - - private double amount; - - public NegativeAmountException(double amount){ - this.amount = amount; - } - - public double getAmount() { - return amount; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/RecordFieldSetMapper.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/RecordFieldSetMapper.java deleted file mode 100644 index 3729b3744f..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/RecordFieldSetMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ossez.spring.batch.service; - -import java.text.ParseException; -import java.text.SimpleDateFormat; - -import com.ossez.spring.batch.model.Transaction; -import org.springframework.batch.item.file.mapping.FieldSetMapper; -import org.springframework.batch.item.file.transform.FieldSet; -import org.springframework.validation.BindException; - -public class RecordFieldSetMapper implements FieldSetMapper { - - public Transaction mapFieldSet(FieldSet fieldSet) throws BindException { - - SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); - Transaction transaction = new Transaction(); - // you can either use the indices or custom names - // I personally prefer the custom names easy for debugging and - // validating the pipelines - transaction.setUsername(fieldSet.readString("username")); - transaction.setUserId(fieldSet.readInt("userid")); - transaction.setAmount(fieldSet.readDouble(3)); - // Converting the date - String dateString = fieldSet.readString(2); - try { - transaction.setTransactionDate(dateFormat.parse(dateString)); - } catch (ParseException e) { - e.printStackTrace(); - } - - return transaction; - - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batch/service/SkippingItemProcessor.java b/spring-batch/src/main/java/com/ossez/spring/batch/service/SkippingItemProcessor.java deleted file mode 100644 index 0333e2561e..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batch/service/SkippingItemProcessor.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ossez.spring.batch.service; - -import com.ossez.spring.batch.model.Transaction; -import org.springframework.batch.item.ItemProcessor; - -public class SkippingItemProcessor implements ItemProcessor { - - @Override - public Transaction process(Transaction transaction) { - - System.out.println("SkippingItemProcessor: " + transaction); - - if (transaction.getUsername() == null || transaction.getUsername().isEmpty()) { - throw new MissingUsernameException(); - } - - double txAmount = transaction.getAmount(); - if (txAmount < 0) { - throw new NegativeAmountException(txAmount); - } - - return transaction; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batchscheduler/SpringBatchScheduler.java b/spring-batch/src/main/java/com/ossez/spring/batchscheduler/SpringBatchScheduler.java deleted file mode 100644 index 4c82bfaddf..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batchscheduler/SpringBatchScheduler.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.ossez.spring.batchscheduler; - -import java.util.Date; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import org.baeldung.batchscheduler.model.Book; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.JobParametersBuilder; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; -import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.item.file.FlatFileItemReader; -import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; -import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.scheduling.support.ScheduledMethodRunnable; - -@Configuration -@EnableBatchProcessing -@EnableScheduling -public class SpringBatchScheduler { - - private final Logger logger = LoggerFactory.getLogger(SpringBatchScheduler.class); - - private AtomicBoolean enabled = new AtomicBoolean(true); - - private AtomicInteger batchRunCounter = new AtomicInteger(0); - - private final Map> scheduledTasks = new IdentityHashMap<>(); - - @Autowired - private JobBuilderFactory jobBuilderFactory; - - @Autowired - private StepBuilderFactory stepBuilderFactory; - - @Scheduled(fixedRate = 2000) - public void launchJob() throws Exception { - Date date = new Date(); - logger.debug("scheduler starts at " + date); - if (enabled.get()) { - JobExecution jobExecution = jobLauncher().run(job(), new JobParametersBuilder().addDate("launchDate", date) - .toJobParameters()); - batchRunCounter.incrementAndGet(); - logger.debug("Batch job ends with status as " + jobExecution.getStatus()); - } - logger.debug("scheduler ends "); - } - - public void stop() { - enabled.set(false); - } - - public void start() { - enabled.set(true); - } - - @Bean - public TaskScheduler poolScheduler() { - return new CustomTaskScheduler(); - } - - private class CustomTaskScheduler extends ThreadPoolTaskScheduler { - - private static final long serialVersionUID = -7142624085505040603L; - - @Override - public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) { - ScheduledFuture future = super.scheduleAtFixedRate(task, period); - - ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) task; - scheduledTasks.put(runnable.getTarget(), future); - - return future; - } - - } - - public void cancelFutureSchedulerTasks() { - scheduledTasks.forEach((k, v) -> { - if (k instanceof SpringBatchScheduler) { - v.cancel(false); - } - }); - } - - @Bean - public Job job() { - return jobBuilderFactory.get("job") - .start(readBooks()) - .build(); - } - - @Bean - public JobLauncher jobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - jobLauncher.setJobRepository(jobRepository()); - jobLauncher.afterPropertiesSet(); - return jobLauncher; - } - - @Bean - public JobRepository jobRepository() throws Exception { - MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(); - factory.setTransactionManager(new ResourcelessTransactionManager()); - return (JobRepository) factory.getObject(); - } - - @Bean - protected Step readBooks() { - return stepBuilderFactory.get("readBooks") - . chunk(2) - .reader(reader()) - .writer(writer()) - .build(); - } - - @Bean - public FlatFileItemReader reader() { - return new FlatFileItemReaderBuilder().name("bookItemReader") - .resource(new ClassPathResource("books.csv")) - .delimited() - .names(new String[] { "id", "name" }) - .fieldSetMapper(new BeanWrapperFieldSetMapper() { - { - setTargetType(Book.class); - } - }) - .build(); - } - - @Bean - public ItemWriter writer() { - return new ItemWriter() { - - @Override - public void write(List items) throws Exception { - logger.debug("writer..." + items.size()); - for (Book item : items) { - logger.debug(item.toString()); - } - - } - }; - } - - public AtomicInteger getBatchRunCounter() { - return batchRunCounter; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/batchscheduler/model/Book.java b/spring-batch/src/main/java/com/ossez/spring/batchscheduler/model/Book.java deleted file mode 100644 index f992bde20e..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/batchscheduler/model/Book.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.baeldung.batchscheduler.model; - -public class Book { - private int id; - private String name; - - public Book() {} - - public Book(int id, String name) { - super(); - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String toString() { - return "Book [id=" + id + ", name=" + name + "]"; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/file2db/BatchConfiguration.java b/spring-batch/src/main/java/com/ossez/spring/file2db/BatchConfiguration.java deleted file mode 100644 index 3cad72b8a5..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/file2db/BatchConfiguration.java +++ /dev/null @@ -1,82 +0,0 @@ -package us.cwiki.spring.batch.processing; - -import javax.sql.DataSource; - -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.support.RunIdIncrementer; -import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider; -import org.springframework.batch.item.database.JdbcBatchItemWriter; -import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder; -import org.springframework.batch.item.file.FlatFileItemReader; -import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; -import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; - -@Configuration -@EnableBatchProcessing -public class BatchConfiguration { - - @Autowired - public JobBuilderFactory jobBuilderFactory; - - @Autowired - public StepBuilderFactory stepBuilderFactory; - - // tag::readerwriterprocessor[] - @Bean - public FlatFileItemReader reader() { - return new FlatFileItemReaderBuilder() - .name("personItemReader") - .resource(new ClassPathResource("sample-data.csv")) - .delimited() - .names(new String[]{"firstName", "lastName"}) - .fieldSetMapper(new BeanWrapperFieldSetMapper() {{ - setTargetType(Person.class); - }}) - .build(); - } - - @Bean - public PersonItemProcessor processor() { - return new PersonItemProcessor(); - } - - @Bean - public JdbcBatchItemWriter writer(DataSource dataSource) { - return new JdbcBatchItemWriterBuilder() - .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>()) - .sql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)") - .dataSource(dataSource) - .build(); - } - // end::readerwriterprocessor[] - - // tag::jobstep[] - @Bean - public Job importUserJob(JobCompletionNotificationListener listener, Step step1) { - return jobBuilderFactory.get("importUserJob") - .incrementer(new RunIdIncrementer()) - .listener(listener) - .flow(step1) - .end() - .build(); - } - - @Bean - public Step step1(JdbcBatchItemWriter writer) { - return stepBuilderFactory.get("step1") - . chunk(10) - .reader(reader()) - .processor(processor()) - .writer(writer) - .build(); - } - // end::jobstep[] -} diff --git a/spring-batch/src/main/java/com/ossez/spring/file2db/JobCompletionNotificationListener.java b/spring-batch/src/main/java/com/ossez/spring/file2db/JobCompletionNotificationListener.java deleted file mode 100644 index faf14d5188..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/file2db/JobCompletionNotificationListener.java +++ /dev/null @@ -1,36 +0,0 @@ -package us.cwiki.spring.batch.processing; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.BatchStatus; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.listener.JobExecutionListenerSupport; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Component; - -@Component -public class JobCompletionNotificationListener extends JobExecutionListenerSupport { - - private static final Logger log = LoggerFactory.getLogger(JobCompletionNotificationListener.class); - - private final JdbcTemplate jdbcTemplate; - - @Autowired - public JobCompletionNotificationListener(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - @Override - public void afterJob(JobExecution jobExecution) { - if(jobExecution.getStatus() == BatchStatus.COMPLETED) { - log.info("!!! JOB FINISHED! Time to verify the results"); - - jdbcTemplate.query("SELECT first_name, last_name FROM people", - (rs, row) -> new Person( - rs.getString(1), - rs.getString(2)) - ).forEach(person -> log.info("Found <" + person + "> in the database.")); - } - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/file2db/Person.java b/spring-batch/src/main/java/com/ossez/spring/file2db/Person.java deleted file mode 100644 index 8b29f1d6e8..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/file2db/Person.java +++ /dev/null @@ -1,37 +0,0 @@ -package us.cwiki.spring.batch.processing; - -public class Person { - - private String lastName; - private String firstName; - - public Person() { - } - - public Person(String firstName, String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getFirstName() { - return firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - @Override - public String toString() { - return "firstName: " + firstName + ", lastName: " + lastName; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/file2db/PersonItemProcessor.java b/spring-batch/src/main/java/com/ossez/spring/file2db/PersonItemProcessor.java deleted file mode 100644 index 7de259e7f6..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/file2db/PersonItemProcessor.java +++ /dev/null @@ -1,24 +0,0 @@ -package us.cwiki.spring.batch.processing; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.batch.item.ItemProcessor; - -public class PersonItemProcessor implements ItemProcessor { - - private static final Logger log = LoggerFactory.getLogger(PersonItemProcessor.class); - - @Override - public Person process(final Person person) throws Exception { - final String firstName = person.getFirstName().toUpperCase(); - final String lastName = person.getLastName().toUpperCase(); - - final Person transformedPerson = new Person(firstName, lastName); - - log.info("Converting (" + person + ") into (" + transformedPerson + ")"); - - return transformedPerson; - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineProcessor.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineProcessor.java deleted file mode 100644 index 69a0025236..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineProcessor.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.spring.taskletsvschunks.chunks; - -import com.ossez.spring.taskletsvschunks.model.Line; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.item.ItemProcessor; - -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; - -public class LineProcessor implements ItemProcessor, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LineProcessor.class); - - @Override - public void beforeStep(StepExecution stepExecution) { - logger.debug("Line Processor initialized."); - } - - @Override - public Line process(Line line) throws Exception { - long age = ChronoUnit.YEARS.between(line.getDob(), LocalDate.now()); - logger.debug("Calculated age " + age + " for line " + line.toString()); - line.setAge(age); - return line; - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - logger.debug("Line Processor ended."); - return ExitStatus.COMPLETED; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineReader.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineReader.java deleted file mode 100644 index dc5ff282d8..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LineReader.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ossez.spring.taskletsvschunks.chunks; - -import com.ossez.spring.taskletsvschunks.model.Line; -import com.ossez.spring.taskletsvschunks.utils.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.item.ItemReader; - -public class LineReader implements ItemReader, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LineReader.class); - private FileUtils fu; - - @Override - public void beforeStep(StepExecution stepExecution) { - fu = new FileUtils("taskletsvschunks/input/tasklets-vs-chunks.csv"); - logger.debug("Line Reader initialized."); - } - - @Override - public Line read() throws Exception { - Line line = fu.readLine(); - if (line != null) logger.debug("Read line: " + line.toString()); - return line; - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - fu.closeReader(); - logger.debug("Line Reader ended."); - return ExitStatus.COMPLETED; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LinesWriter.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LinesWriter.java deleted file mode 100644 index 88ec896fa3..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/chunks/LinesWriter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ossez.spring.taskletsvschunks.chunks; - - -import com.ossez.spring.taskletsvschunks.model.Line; -import com.ossez.spring.taskletsvschunks.utils.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.item.ItemWriter; - -import java.util.List; - -public class LinesWriter implements ItemWriter, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LinesWriter.class); - private FileUtils fu; - - @Override - public void beforeStep(StepExecution stepExecution) { - fu = new FileUtils("output.csv"); - logger.debug("Line Writer initialized."); - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - fu.closeWriter(); - logger.debug("Line Writer ended."); - return ExitStatus.COMPLETED; - } - - @Override - public void write(List lines) throws Exception { - for (Line line : lines) { - fu.writeLine(line); - logger.debug("Wrote line " + line.toString()); - } - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/ChunksConfig.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/ChunksConfig.java deleted file mode 100644 index 40e0bbad5b..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/ChunksConfig.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.ossez.spring.taskletsvschunks.config; - -import com.ossez.spring.taskletsvschunks.chunks.LineProcessor; -import com.ossez.spring.taskletsvschunks.chunks.LineReader; -import com.ossez.spring.taskletsvschunks.chunks.LinesWriter; -import com.ossez.spring.taskletsvschunks.model.Line; - -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; -import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.ItemReader; -import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.PlatformTransactionManager; - -@Configuration -@EnableBatchProcessing -public class ChunksConfig { - - @Autowired private JobBuilderFactory jobs; - - @Autowired private StepBuilderFactory steps; - - @Bean - public JobLauncherTestUtils jobLauncherTestUtils() { - return new JobLauncherTestUtils(); - } - - @Bean - public JobRepository jobRepository() throws Exception { - MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(); - factory.setTransactionManager(transactionManager()); - return (JobRepository) factory.getObject(); - } - - @Bean - public PlatformTransactionManager transactionManager() { - return new ResourcelessTransactionManager(); - } - - @Bean - public JobLauncher jobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - jobLauncher.setJobRepository(jobRepository()); - return jobLauncher; - } - - @Bean - public ItemReader itemReader() { - return new LineReader(); - } - - @Bean - public ItemProcessor itemProcessor() { - return new LineProcessor(); - } - - @Bean - public ItemWriter itemWriter() { - return new LinesWriter(); - } - - @Bean - protected Step processLines(ItemReader reader, ItemProcessor processor, ItemWriter writer) { - return steps.get("processLines"). chunk(2) - .reader(reader) - .processor(processor) - .writer(writer) - .build(); - } - - @Bean - public Job job() { - return jobs - .get("chunksJob") - .start(processLines(itemReader(), itemProcessor(), itemWriter())) - .build(); - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/TaskletsConfig.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/TaskletsConfig.java deleted file mode 100644 index 9988c62990..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/config/TaskletsConfig.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.ossez.spring.taskletsvschunks.config; - - -import com.ossez.spring.taskletsvschunks.tasklets.LinesWriter; -import com.ossez.spring.taskletsvschunks.tasklets.LinesProcessor; -import com.ossez.spring.taskletsvschunks.tasklets.LinesReader; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.PlatformTransactionManager; - -@Configuration -@EnableBatchProcessing -public class TaskletsConfig { - - @Autowired private JobBuilderFactory jobs; - - @Autowired private StepBuilderFactory steps; - - @Bean - public JobLauncherTestUtils jobLauncherTestUtils() { - return new JobLauncherTestUtils(); - } - - @Bean - public JobRepository jobRepository() throws Exception { - MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(); - factory.setTransactionManager(transactionManager()); - return (JobRepository) factory.getObject(); - } - - @Bean - public PlatformTransactionManager transactionManager() { - return new ResourcelessTransactionManager(); - } - - @Bean - public JobLauncher jobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - jobLauncher.setJobRepository(jobRepository()); - return jobLauncher; - } - - @Bean - public LinesReader linesReader() { - return new LinesReader(); - } - - @Bean - public LinesProcessor linesProcessor() { - return new LinesProcessor(); - } - - @Bean - public LinesWriter linesWriter() { - return new LinesWriter(); - } - - @Bean - protected Step readLines() { - return steps - .get("readLines") - .tasklet(linesReader()) - .build(); - } - - @Bean - protected Step processLines() { - return steps - .get("processLines") - .tasklet(linesProcessor()) - .build(); - } - - @Bean - protected Step writeLines() { - return steps - .get("writeLines") - .tasklet(linesWriter()) - .build(); - } - - @Bean - public Job job() { - return jobs - .get("taskletsJob") - .start(readLines()) - .next(processLines()) - .next(writeLines()) - .build(); - } - -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/model/Line.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/model/Line.java deleted file mode 100644 index 6f34fa7894..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/model/Line.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.ossez.spring.taskletsvschunks.model; - -import java.io.Serializable; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -public class Line implements Serializable { - - private String name; - private LocalDate dob; - private Long age; - - public Line(String name, LocalDate dob) { - this.name = name; - this.dob = dob; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public LocalDate getDob() { - return dob; - } - - public void setDob(LocalDate dob) { - this.dob = dob; - } - - public Long getAge() { - return age; - } - - public void setAge(Long age) { - this.age = age; - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("["); - sb.append(this.name); - sb.append(","); - sb.append(this.dob.format(DateTimeFormatter.ofPattern("MM/dd/yyyy"))); - if (this.age != null) { - sb.append(","); - sb.append(this.age); - } - sb.append("]"); - return sb.toString(); - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesProcessor.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesProcessor.java deleted file mode 100644 index 5a9c1fdd68..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesProcessor.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ossez.spring.taskletsvschunks.tasklets; - -import com.ossez.spring.taskletsvschunks.model.Line; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.item.ExecutionContext; -import org.springframework.batch.repeat.RepeatStatus; - -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.List; - -public class LinesProcessor implements Tasklet, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LinesProcessor.class); - - private List lines; - - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - for (Line line : lines) { - long age = ChronoUnit.YEARS.between(line.getDob(), LocalDate.now()); - logger.debug("Calculated age " + age + " for line " + line.toString()); - line.setAge(age); - } - return RepeatStatus.FINISHED; - } - - @Override - public void beforeStep(StepExecution stepExecution) { - ExecutionContext executionContext = stepExecution - .getJobExecution() - .getExecutionContext(); - this.lines = (List) executionContext.get("lines"); - logger.debug("Lines Processor initialized."); - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - logger.debug("Lines Processor ended."); - return ExitStatus.COMPLETED; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesReader.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesReader.java deleted file mode 100644 index 6ee0a88ce1..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesReader.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.ossez.spring.taskletsvschunks.tasklets; - -import com.ossez.spring.taskletsvschunks.model.Line; -import com.ossez.spring.taskletsvschunks.utils.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.repeat.RepeatStatus; - -import java.util.ArrayList; -import java.util.List; - -public class LinesReader implements Tasklet, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LinesReader.class); - - private List lines; - private FileUtils fu; - - @Override - public void beforeStep(StepExecution stepExecution) { - lines = new ArrayList(); - fu = new FileUtils("taskletsvschunks/input/tasklets-vs-chunks.csv"); - logger.debug("Lines Reader initialized."); - } - - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - Line line = fu.readLine(); - while (line != null) { - lines.add(line); - logger.debug("Read line: " + line.toString()); - line = fu.readLine(); - } - return RepeatStatus.FINISHED; - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - fu.closeReader(); - stepExecution - .getJobExecution() - .getExecutionContext() - .put("lines", this.lines); - logger.debug("Lines Reader ended."); - return ExitStatus.COMPLETED; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesWriter.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesWriter.java deleted file mode 100644 index 4a969dbd25..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/tasklets/LinesWriter.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ossez.spring.taskletsvschunks.tasklets; - - -import com.ossez.spring.taskletsvschunks.model.Line; -import com.ossez.spring.taskletsvschunks.utils.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.item.ExecutionContext; -import org.springframework.batch.repeat.RepeatStatus; - -import java.util.List; - -public class LinesWriter implements Tasklet, StepExecutionListener { - - private final Logger logger = LoggerFactory.getLogger(LinesWriter.class); - - private List lines; - private FileUtils fu; - - @Override - public void beforeStep(StepExecution stepExecution) { - ExecutionContext executionContext = stepExecution - .getJobExecution() - .getExecutionContext(); - this.lines = (List) executionContext.get("lines"); - fu = new FileUtils("output.csv"); - logger.debug("Lines Writer initialized."); - } - - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - for (Line line : lines) { - fu.writeLine(line); - logger.debug("Wrote line " + line.toString()); - } - return RepeatStatus.FINISHED; - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - fu.closeWriter(); - logger.debug("Lines Writer ended."); - return ExitStatus.COMPLETED; - } -} diff --git a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/utils/FileUtils.java b/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/utils/FileUtils.java deleted file mode 100644 index 46ab5d9304..0000000000 --- a/spring-batch/src/main/java/com/ossez/spring/taskletsvschunks/utils/FileUtils.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.ossez.spring.taskletsvschunks.utils; - -import com.opencsv.CSVReader; -import com.opencsv.CSVWriter; -import com.ossez.spring.taskletsvschunks.model.Line; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -public class FileUtils { - - private final Logger logger = LoggerFactory.getLogger(FileUtils.class); - - private String fileName; - private CSVReader CSVReader; - private CSVWriter CSVWriter; - private FileReader fileReader; - private FileWriter fileWriter; - private File file; - - public FileUtils(String fileName) { - this.fileName = fileName; - } - - public Line readLine() { - try { - if (CSVReader == null) initReader(); - String[] line = CSVReader.readNext(); - if (line == null) return null; - return new Line(line[0], LocalDate.parse(line[1], DateTimeFormatter.ofPattern("MM/dd/yyyy"))); - } catch (Exception e) { - logger.error("Error while reading line in file: " + this.fileName); - return null; - } - } - - public void writeLine(Line line) { - try { - if (CSVWriter == null) initWriter(); - String[] lineStr = new String[2]; - lineStr[0] = line.getName(); - lineStr[1] = line - .getAge() - .toString(); - CSVWriter.writeNext(lineStr); - } catch (Exception e) { - logger.error("Error while writing line in file: " + this.fileName); - } - } - - private void initReader() throws Exception { - ClassLoader classLoader = this - .getClass() - .getClassLoader(); - if (file == null) file = new File(classLoader - .getResource(fileName) - .getFile()); - if (fileReader == null) fileReader = new FileReader(file); - if (CSVReader == null) CSVReader = new CSVReader(fileReader); - } - - private void initWriter() throws Exception { - if (file == null) { - file = new File(fileName); - file.createNewFile(); - } - if (fileWriter == null) fileWriter = new FileWriter(file, true); - if (CSVWriter == null) CSVWriter = new CSVWriter(fileWriter); - } - - public void closeWriter() { - try { - CSVWriter.close(); - fileWriter.close(); - } catch (IOException e) { - logger.error("Error while closing writer."); - } - } - - public void closeReader() { - try { - CSVReader.close(); - fileReader.close(); - } catch (IOException e) { - logger.error("Error while closing reader."); - } - } - -} diff --git a/spring-batch/src/main/resources/books.csv b/spring-batch/src/main/resources/books.csv deleted file mode 100644 index af68e986a2..0000000000 --- a/spring-batch/src/main/resources/books.csv +++ /dev/null @@ -1,4 +0,0 @@ -1,SHARP OBJECTS (MOVIE TIE-IN): A NOVEL -2,ARTEMIS: A NOVEL -3,HER PRETTY FACE -4,ALL WE EVER WANTED \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/partitioner/record1.csv b/spring-batch/src/main/resources/input/partitioner/record1.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/partitioner/record1.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/partitioner/record2.csv b/spring-batch/src/main/resources/input/partitioner/record2.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/partitioner/record2.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/partitioner/record3.csv b/spring-batch/src/main/resources/input/partitioner/record3.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/partitioner/record3.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/partitioner/record4.csv b/spring-batch/src/main/resources/input/partitioner/record4.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/partitioner/record4.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/partitioner/record5.csv b/spring-batch/src/main/resources/input/partitioner/record5.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/partitioner/record5.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/record.csv b/spring-batch/src/main/resources/input/record.csv deleted file mode 100644 index e554becb2a..0000000000 --- a/spring-batch/src/main/resources/input/record.csv +++ /dev/null @@ -1,4 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 \ No newline at end of file diff --git a/spring-batch/src/main/resources/input/recordWithInvalidData.csv b/spring-batch/src/main/resources/input/recordWithInvalidData.csv deleted file mode 100644 index 020edb9826..0000000000 --- a/spring-batch/src/main/resources/input/recordWithInvalidData.csv +++ /dev/null @@ -1,7 +0,0 @@ -username, user_id, transaction_date, transaction_amount -devendra, 1234, 31/10/2015, 10000 -john, 2134, 3/12/2015, 12321 -robin, 2134, 2/02/2015, 23411 -, 2536, 3/10/2019, 100 -mike, 9876, 5/11/2018, -500 -, 3425, 10/10/2017, 100 \ No newline at end of file diff --git a/spring-batch/src/main/resources/logback.xml b/spring-batch/src/main/resources/logback.xml deleted file mode 100644 index 91d4292b8e..0000000000 --- a/spring-batch/src/main/resources/logback.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output1.xml b/spring-batch/src/main/resources/output/output1.xml deleted file mode 100644 index 194b860813..0000000000 --- a/spring-batch/src/main/resources/output/output1.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 10000.0 - 2015-10-31T00:00:00+05:30 - 1234 - devendra - - - 12321.0 - 2015-12-03T00:00:00+05:30 - 2134 - john - - - 23411.0 - 2015-02-02T00:00:00+05:30 - 2134 - robin - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output2.xml b/spring-batch/src/main/resources/output/output2.xml deleted file mode 100644 index 194b860813..0000000000 --- a/spring-batch/src/main/resources/output/output2.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 10000.0 - 2015-10-31T00:00:00+05:30 - 1234 - devendra - - - 12321.0 - 2015-12-03T00:00:00+05:30 - 2134 - john - - - 23411.0 - 2015-02-02T00:00:00+05:30 - 2134 - robin - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output3.xml b/spring-batch/src/main/resources/output/output3.xml deleted file mode 100644 index 194b860813..0000000000 --- a/spring-batch/src/main/resources/output/output3.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 10000.0 - 2015-10-31T00:00:00+05:30 - 1234 - devendra - - - 12321.0 - 2015-12-03T00:00:00+05:30 - 2134 - john - - - 23411.0 - 2015-02-02T00:00:00+05:30 - 2134 - robin - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output4.xml b/spring-batch/src/main/resources/output/output4.xml deleted file mode 100644 index 194b860813..0000000000 --- a/spring-batch/src/main/resources/output/output4.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 10000.0 - 2015-10-31T00:00:00+05:30 - 1234 - devendra - - - 12321.0 - 2015-12-03T00:00:00+05:30 - 2134 - john - - - 23411.0 - 2015-02-02T00:00:00+05:30 - 2134 - robin - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output5.xml b/spring-batch/src/main/resources/output/output5.xml deleted file mode 100644 index 194b860813..0000000000 --- a/spring-batch/src/main/resources/output/output5.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - 10000.0 - 2015-10-31T00:00:00+05:30 - 1234 - devendra - - - 12321.0 - 2015-12-03T00:00:00+05:30 - 2134 - john - - - 23411.0 - 2015-02-02T00:00:00+05:30 - 2134 - robin - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/spring-batch-intro.xml b/spring-batch/src/main/resources/spring-batch-intro.xml deleted file mode 100644 index 0f76dd50ff..0000000000 --- a/spring-batch/src/main/resources/spring-batch-intro.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.baeldung.batch.model.Transaction - - - - - - - - - - - - - diff --git a/spring-batch/src/main/resources/spring.xml b/spring-batch/src/main/resources/spring.xml deleted file mode 100644 index dea261c5e6..0000000000 --- a/spring-batch/src/main/resources/spring.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-batch/src/main/resources/taskletsvschunks/input/tasklets-vs-chunks.csv b/spring-batch/src/main/resources/taskletsvschunks/input/tasklets-vs-chunks.csv deleted file mode 100644 index 214bd3cb70..0000000000 --- a/spring-batch/src/main/resources/taskletsvschunks/input/tasklets-vs-chunks.csv +++ /dev/null @@ -1,6 +0,0 @@ -Mae Hodges,10/22/1972 -Gary Potter,02/22/1953 -Betty Wise,02/17/1968 -Wayne Rose,04/06/1977 -Adam Caldwell,09/27/1995 -Lucille Phillips,05/14/1992 \ No newline at end of file diff --git a/spring-batch/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-batch/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index de9d09d5c5..0000000000 --- a/spring-batch/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.baeldung; - -import com.ossez.spring.batch.App; -import org.junit.Test; - -public class SpringContextIntegrationTest { - - @Test - public final void testMain() throws Exception { - App.main(null); - } -} diff --git a/spring-batch/src/test/java/org/baeldung/SpringContextTest.java b/spring-batch/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index cf706b6072..0000000000 --- a/spring-batch/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung; - - -import com.ossez.spring.batch.App; - -import org.junit.Test; - -public class SpringContextTest { - - @Test - public final void testMain() throws Exception { - App.main(null); - } -} diff --git a/spring-batch/src/test/java/org/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java b/spring-batch/src/test/java/org/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java deleted file mode 100644 index a3d4e590a8..0000000000 --- a/spring-batch/src/test/java/org/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.baeldung.batchscheduler; - -import com.ossez.spring.batchscheduler.SpringBatchScheduler; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import static org.awaitility.Awaitility.await; -import static java.util.concurrent.TimeUnit.*; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = SpringBatchScheduler.class) -public class SpringBatchSchedulerIntegrationTest { - - @Autowired - private ApplicationContext context; - - @Test - public void stopJobsWhenSchedulerDisabled() throws Exception { - SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get())); - schedulerBean.stop(); - await().atLeast(3, SECONDS); - - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get()); - } - - @Test - public void stopJobSchedulerWhenSchedulerDestroyed() throws Exception { - ScheduledAnnotationBeanPostProcessor bean = context.getBean(ScheduledAnnotationBeanPostProcessor.class); - SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get())); - bean.postProcessBeforeDestruction(schedulerBean, "SpringBatchScheduler"); - await().atLeast(3, SECONDS); - - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get()); - } - - @Test - public void stopJobSchedulerWhenFutureTasksCancelled() throws Exception { - SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get())); - schedulerBean.cancelFutureSchedulerTasks(); - await().atLeast(3, SECONDS); - - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get()); - } - - -} diff --git a/spring-batch/src/test/java/org/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java b/spring-batch/src/test/java/org/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java deleted file mode 100644 index 6a444cb68a..0000000000 --- a/spring-batch/src/test/java/org/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.baeldung.taskletsvschunks.chunks; - -import com.ossez.spring.taskletsvschunks.config.ChunksConfig; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = ChunksConfig.class) -public class ChunksIntegrationTest { - - @Autowired private JobLauncherTestUtils jobLauncherTestUtils; - - @Test - public void givenChunksJob_WhenJobEnds_ThenStatusCompleted() throws Exception { - JobExecution jobExecution = jobLauncherTestUtils.launchJob(); - Assert.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - } -} diff --git a/spring-batch/src/test/java/org/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java b/spring-batch/src/test/java/org/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java deleted file mode 100644 index 2ae77628e6..0000000000 --- a/spring-batch/src/test/java/org/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.baeldung.taskletsvschunks.tasklets; - -import com.ossez.spring.taskletsvschunks.config.TaskletsConfig; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = TaskletsConfig.class) -public class TaskletsIntegrationTest { - - @Autowired private JobLauncherTestUtils jobLauncherTestUtils; - - @Test - public void givenTaskletsJob_WhenJobEnds_ThenStatusCompleted() throws Exception { - JobExecution jobExecution = jobLauncherTestUtils.launchJob(); - Assert.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); - } -} diff --git a/spring-boot-modules/spring-boot-1st/README.md b/spring-boot-modules/spring-boot-1st/README.md deleted file mode 100644 index 06f9ecf87f..0000000000 --- a/spring-boot-modules/spring-boot-1st/README.md +++ /dev/null @@ -1,12 +0,0 @@ -## Spring Boot 文档示例程序 - -这个文档为按照官方的 Spring Boot 文档创建的第一个示例程序 - -### 相关文档: - -- [Spring Boot 第一个示例创建 POM 文件](https://www.ossez.com/t/spring-boot-2-4-pom/1089) -- [Spring Boot 第一个示例程序添加 Classpath 依赖](https://www.ossez.com/t/spring-boot-2-4-classpath/1098) -- [Spring Boot 第一个示例程序书写代码](https://www.ossez.com/t/spring-boot-2-4/1099) -- [Spring Boot 第一个示例的 @RestController 和 @RequestMapping 注解](https://www.ossez.com/t/spring-boot-restcontroller-requestmapping/1100) -- [Spring Boot 第一个示例的 @EnableAutoConfiguration 注解](https://www.ossez.com/t/spring-boot-enableautoconfiguration/1101) -- [Spring Boot 第一个示例创建一个可以执行的 Jar](https://www.ossez.com/t/spring-boot-jar/1111) diff --git a/spring-boot-modules/spring-boot-1st/pom.xml b/spring-boot-modules/spring-boot-1st/pom.xml deleted file mode 100644 index a238b97e5d..0000000000 --- a/spring-boot-modules/spring-boot-1st/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - 4.0.0 - - com.example - myproject - 0.0.1-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-parent - 2.5.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - - - - - - - - - - - - - - - - spring-snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - https://repo.spring.io/milestone - - - - - spring-snapshots - https://repo.spring.io/snapshot - - - spring-milestones - https://repo.spring.io/milestone - - - \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-1st/src/main/java/Example.java b/spring-boot-modules/spring-boot-1st/src/main/java/Example.java deleted file mode 100644 index 63a4212a19..0000000000 --- a/spring-boot-modules/spring-boot-1st/src/main/java/Example.java +++ /dev/null @@ -1,19 +0,0 @@ -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@EnableAutoConfiguration -public class Example { - - @RequestMapping("/") - String home() { - return "Hello World!"; - } - - public static void main(String[] args) { - SpringApplication.run(Example.class, args); - } - -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/.gitignore b/spring-boot-modules/spring-boot-testing/.gitignore deleted file mode 100644 index da7c2c5c0a..0000000000 --- a/spring-boot-modules/spring-boot-testing/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/target/ -.settings/ -.classpath -.project - diff --git a/spring-boot-modules/spring-boot-testing/.mvn/wrapper/maven-wrapper.properties b/spring-boot-modules/spring-boot-testing/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index a447c9fa81..0000000000 --- a/spring-boot-modules/spring-boot-testing/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/README.md b/spring-boot-modules/spring-boot-testing/README.md deleted file mode 100644 index a4b9b383fd..0000000000 --- a/spring-boot-modules/spring-boot-testing/README.md +++ /dev/null @@ -1,12 +0,0 @@ -## Spring Boot 测试 - -本模块中包含了有关如何在 Spring Boot 中进行测试和在测试中遇到的一些问题和解决的文章。 - -- [Testing with Spring and Spock](https://www.baeldung.com/spring-spock-testing) -- [Exclude Auto-Configuration Classes in Spring Boot Tests](https://www.baeldung.com/spring-boot-exclude-auto-configuration-test) -- [Embedded Redis Server with Spring Boot Test](https://www.baeldung.com/spring-embedded-redis) -- [Testing Spring Boot @ConfigurationProperties](https://www.baeldung.com/spring-boot-testing-configurationproperties) -- [Prevent ApplicationRunner or CommandLineRunner Beans From Executing During Junit Testing](https://www.baeldung.com/spring-junit-prevent-runner-beans-testing-execution) -- [Testing in Spring Boot](https://www.baeldung.com/spring-boot-testing) -- [解决在 Spring Boot 中运行 JUnit 测试遇到的 NoSuchMethodError 错误](https://www.ossez.com/t/spring-boot-junit-nosuchmethoderror/14066) -- More articles: [[more -->]](../spring-boot-testing-2) diff --git a/spring-boot-modules/spring-boot-testing/mvnw b/spring-boot-modules/spring-boot-testing/mvnw deleted file mode 100644 index e96ccd5fbb..0000000000 --- a/spring-boot-modules/spring-boot-testing/mvnw +++ /dev/null @@ -1,227 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-boot-modules/spring-boot-testing/mvnw.cmd b/spring-boot-modules/spring-boot-testing/mvnw.cmd deleted file mode 100644 index 6a6eec39ba..0000000000 --- a/spring-boot-modules/spring-boot-testing/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/spring-boot-modules/spring-boot-testing/pom.xml b/spring-boot-modules/spring-boot-testing/pom.xml deleted file mode 100644 index fcfc2364ba..0000000000 --- a/spring-boot-modules/spring-boot-testing/pom.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - 4.0.0 - spring-boot-testing - spring-boot-testing - war - This is simple boot application for demonstrating testing features. - - - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT - - - - - - org.apache.logging.log4j - log4j-bom - ${log4j2.version} - import - pom - - - - - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-validation - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-data-jpa - - - com.h2database - h2 - - - org.springframework.boot - spring-boot-starter-test - test - - - - it.ozimov - embedded-redis - ${redis.version} - test - - - - org.spockframework - spock-core - ${spock.version} - test - - - org.spockframework - spock-spring - ${spock.version} - test - - - - - spring-boot-testing - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-war-plugin - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - get-the-git-infos - - revision - - initialize - - - validate-the-git-infos - - validateRevision - - package - - - - true - ${project.build.outputDirectory}/git.properties - - - - org.codehaus.gmavenplus - gmavenplus-plugin - ${gmavenplus-plugin.version} - - - - compileTests - - - - - - - - - - com.baeldung.boot.Application - 2.2.4 - 1.2-groovy-2.4 - 1.6 - 0.7.2 - 2.5.0 - 2.17.1 - - - \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/Application.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/Application.java deleted file mode 100644 index cb0d0c1532..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.boot; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContext; - -@SpringBootApplication -public class Application { - private static ApplicationContext applicationContext; - - public static void main(String[] args) { - applicationContext = SpringApplication.run(Application.class, args); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/Credentials.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/Credentials.java deleted file mode 100644 index e51937cf57..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/Credentials.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -public class Credentials { - - private String username; - private String password; - - public Credentials(String username, String password) { - this.username = username; - this.password = password; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/CustomCredentialsConverter.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/CustomCredentialsConverter.java deleted file mode 100644 index ef160c8c9a..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/CustomCredentialsConverter.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; - -@Component -@ConfigurationPropertiesBinding -public class CustomCredentialsConverter implements Converter { - - @Override - public Credentials convert(String source) { - String[] data = source.split(","); - return new Credentials(data[0], data[1]); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/MailServer.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/MailServer.java deleted file mode 100644 index e23b30759b..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/MailServer.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import java.util.Map; - -import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.validation.annotation.Validated; - -@Configuration -@ConfigurationProperties(prefix = "validate") -@PropertySource("classpath:property-validation.properties") -@Validated -public class MailServer { - - @NotNull - @NotEmpty - private Map propertiesMap; - - @Valid - private MailConfig mailConfig = new MailConfig(); - - public static class MailConfig { - - @NotBlank - @Email - private String address; - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - } - - public Map getPropertiesMap() { - return propertiesMap; - } - - public void setPropertiesMap(Map propertiesMap) { - this.propertiesMap = propertiesMap; - } - - public MailConfig getMailConfig() { - return mailConfig; - } - - public void setMailConfig(MailConfig mailConfig) { - this.mailConfig = mailConfig; - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/PropertyConversion.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/PropertyConversion.java deleted file mode 100644 index 9b2ea39299..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/PropertyConversion.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import java.time.Duration; -import java.time.temporal.ChronoUnit; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.convert.DataSizeUnit; -import org.springframework.boot.convert.DurationUnit; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.unit.DataSize; -import org.springframework.util.unit.DataUnit; - -@Configuration -@ConfigurationProperties(prefix = "server") -public class PropertyConversion { - - private DataSize uploadSpeed; - - @DataSizeUnit(DataUnit.GIGABYTES) - private DataSize downloadSpeed; - - private Duration backupDay; - - @DurationUnit(ChronoUnit.HOURS) - private Duration backupHour; - - private Credentials credentials; - - public Duration getBackupDay() { - return backupDay; - } - - public void setBackupDay(Duration backupDay) { - this.backupDay = backupDay; - } - - public Duration getBackupHour() { - return backupHour; - } - - public void setBackupHour(Duration backupHour) { - this.backupHour = backupHour; - } - - public DataSize getUploadSpeed() { - return uploadSpeed; - } - - public void setUploadSpeed(DataSize uploadSpeed) { - this.uploadSpeed = uploadSpeed; - } - - public DataSize getDownloadSpeed() { - return downloadSpeed; - } - - public void setDownloadSpeed(DataSize downloadSpeed) { - this.downloadSpeed = downloadSpeed; - } - - public Credentials getCredentials() { - return credentials; - } - - public void setCredentials(Credentials credentials) { - this.credentials = credentials; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfig.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfig.java deleted file mode 100644 index 0c9e62445a..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import java.util.Map; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ConfigurationProperties(prefix = "server") -public class ServerConfig { - - private Address address; - private Map resourcesPath; - - public static class Address { - - private String ip; - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - } - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - public Map getResourcesPath() { - return resourcesPath; - } - - public void setResourcesPath(Map resourcesPath) { - this.resourcesPath = resourcesPath; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfigFactory.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfigFactory.java deleted file mode 100644 index ca85d59112..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/configurationproperties/ServerConfigFactory.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ServerConfigFactory { - - @Bean(name = "default_bean") - @ConfigurationProperties(prefix = "server.default") - public ServerConfig getDefaultConfigs() { - return new ServerConfig(); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/HomeController.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/HomeController.java deleted file mode 100644 index 595c34254b..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/HomeController.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.boot.controller.rest; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class HomeController { - - @GetMapping("/") - public String salutation() { - return "Welcome !"; - } - -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/WebController.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/WebController.java deleted file mode 100644 index 7247ca3dfa..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/controller/rest/WebController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.boot.controller.rest; - -import java.util.Optional; - -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/hello") -public class WebController { - - private String name; - - @GetMapping - public String salutation() { - return "Hello " + Optional.ofNullable(name).orElse("world") + '!'; - } - - @PutMapping - @ResponseStatus(HttpStatus.NO_CONTENT) - public void setName(@RequestBody final String name) { - this.name = name; - } - - @DeleteMapping - @ResponseStatus(HttpStatus.NO_CONTENT) - public void resetToDefault() { - this.name = null; - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisConfiguration.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisConfiguration.java deleted file mode 100644 index 6b5b20892f..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.boot.embeddedRedis.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.repository.configuration.EnableRedisRepositories; - -@Configuration -@EnableRedisRepositories -public class RedisConfiguration { - - @Bean - public LettuceConnectionFactory redisConnectionFactory(final RedisProperties redisProperties) { - return new LettuceConnectionFactory(redisProperties.getRedisHost(), redisProperties.getRedisPort()); - } - - @Bean - public RedisTemplate redisTemplate(final LettuceConnectionFactory connectionFactory) { - RedisTemplate template = new RedisTemplate<>(); - template.setConnectionFactory(connectionFactory); - return template; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisProperties.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisProperties.java deleted file mode 100644 index 76f2e1bbfe..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/configuration/RedisProperties.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.boot.embeddedRedis.configuration; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class RedisProperties { - private final int redisPort; - private final String redisHost; - - public RedisProperties(@Value("${spring.redis.port}") final int redisPort, @Value("${spring.redis.host}") final String redisHost) { - this.redisPort = redisPort; - this.redisHost = redisHost; - } - - public int getRedisPort() { - return redisPort; - } - - public String getRedisHost() { - return redisHost; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/User.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/User.java deleted file mode 100644 index 41657aaa66..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/User.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.boot.embeddedRedis.domain; - -import org.springframework.data.annotation.Id; -import org.springframework.data.redis.core.RedisHash; - -import java.util.UUID; - -@RedisHash("user") -public class User { - @Id private UUID id; - private String name; - - public User(UUID id, String name) { - this.id = id; - this.name = name; - } - - public UUID getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepository.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepository.java deleted file mode 100644 index 0558bb8482..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.boot.embeddedRedis.domain.repository; - -import com.baeldung.boot.embeddedRedis.domain.User; -import org.springframework.data.repository.CrudRepository; - -import java.util.UUID; - -public interface UserRepository extends CrudRepository { - -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/Employee.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/Employee.java deleted file mode 100644 index 2921ecc609..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/Employee.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.boot.testing; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.validation.constraints.Size; -import java.util.Date; - -@Entity -@Table(name = "person") -public class Employee { - - public Employee() { - } - - public Employee(String name) { - this.name = name; - } - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - @Size(min = 3, max = 20) - private String name; - - private Date birthday; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRepository.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRepository.java deleted file mode 100644 index bcef5231e0..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.boot.testing; - -import java.util.List; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -@Repository -@Transactional -public interface EmployeeRepository extends JpaRepository { - - public Employee findByName(String name); - - public List findAll(); - -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRestController.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRestController.java deleted file mode 100644 index b52d38e028..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeRestController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.boot.testing; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api") -public class EmployeeRestController { - - @Autowired - private EmployeeService employeeService; - - @PostMapping("/employees") - public ResponseEntity createEmployee(@RequestBody Employee employee) { - HttpStatus status = HttpStatus.CREATED; - Employee saved = employeeService.save(employee); - return new ResponseEntity<>(saved, status); - } - - @GetMapping("/employees") - public List getAllEmployees() { - return employeeService.getAllEmployees(); - } - -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeService.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeService.java deleted file mode 100644 index 6fc48a3c3d..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.boot.testing; - -import java.util.List; - -public interface EmployeeService { - - public Employee getEmployeeById(Long id); - - public Employee getEmployeeByName(String name); - - public List getAllEmployees(); - - public boolean exists(String email); - - public Employee save(Employee employee); -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeServiceImpl.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeServiceImpl.java deleted file mode 100644 index 7d5ec4a05d..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/boot/testing/EmployeeServiceImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.boot.testing; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class EmployeeServiceImpl implements EmployeeService { - - @Autowired - private EmployeeRepository employeeRepository; - - @Override - public Employee getEmployeeById(Long id) { - return employeeRepository.findById(id).orElse(null); - } - - @Override - public Employee getEmployeeByName(String name) { - return employeeRepository.findByName(name); - } - - @Override - public boolean exists(String name) { - if (employeeRepository.findByName(name) != null) { - return true; - } - return false; - } - - @Override - public Employee save(Employee employee) { - return employeeRepository.save(employee); - } - - @Override - public List getAllEmployees() { - return employeeRepository.findAll(); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationCommandLineRunnerApp.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationCommandLineRunnerApp.java deleted file mode 100644 index 76e18dfd2f..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationCommandLineRunnerApp.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class ApplicationCommandLineRunnerApp { - public static void main(String[] args) { - SpringApplication.run(ApplicationCommandLineRunnerApp.class, args); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationRunnerTaskExecutor.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationRunnerTaskExecutor.java deleted file mode 100644 index 3bf08491bf..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/ApplicationRunnerTaskExecutor.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Component; - -@Profile("!test") -@ConditionalOnProperty( - prefix = "application.runner", - value = "enabled", - havingValue = "true", - matchIfMissing = true) -@Component -public class ApplicationRunnerTaskExecutor implements ApplicationRunner { - private TaskService taskService; - - public ApplicationRunnerTaskExecutor(TaskService taskService) { - this.taskService = taskService; - } - - @Override - public void run(ApplicationArguments args) throws Exception { - taskService.execute("application runner task"); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/CommandLineTaskExecutor.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/CommandLineTaskExecutor.java deleted file mode 100644 index 38fd3b9c0a..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/CommandLineTaskExecutor.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Component; - -@Profile("!test") -@ConditionalOnProperty( - prefix = "command.line.runner", - value = "enabled", - havingValue = "true", - matchIfMissing = true) -@Component -public class CommandLineTaskExecutor implements CommandLineRunner { - private TaskService taskService; - - public CommandLineTaskExecutor(TaskService taskService) { - this.taskService = taskService; - } - - @Override - public void run(String... args) throws Exception { - taskService.execute("command line runner task"); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/TaskService.java b/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/TaskService.java deleted file mode 100644 index dac437e72d..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/java/com/baeldung/prevent/commandline/application/runner/execution/TaskService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -@Service -public class TaskService { - private static Logger logger = LoggerFactory.getLogger(TaskService.class); - - public void execute(String task) { - logger.info("do " + task); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/main/resources/application-test.properties b/spring-boot-modules/spring-boot-testing/src/main/resources/application-test.properties deleted file mode 100644 index 8d5e86ba26..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/resources/application-test.properties +++ /dev/null @@ -1,3 +0,0 @@ - -# test properties -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/main/resources/application.properties b/spring-boot-modules/spring-boot-testing/src/main/resources/application.properties deleted file mode 100644 index 70cae370a4..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/resources/application.properties +++ /dev/null @@ -1,8 +0,0 @@ -# embedded redis -spring.redis.host= localhost -spring.redis.port= 6379 - -# security -spring.security.user.name=john -spring.security.user.password=123 - diff --git a/spring-boot-modules/spring-boot-testing/src/main/resources/persistence-generic-entity.properties b/spring-boot-modules/spring-boot-testing/src/main/resources/persistence-generic-entity.properties deleted file mode 100644 index b19304cb1f..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/resources/persistence-generic-entity.properties +++ /dev/null @@ -1,8 +0,0 @@ -jdbc.driverClassName=org.h2.Driver -jdbc.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 -jdbc.user=sa -jdbc.pass=sa - -hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.show_sql=true -hibernate.hbm2ddl.auto=create-drop diff --git a/spring-boot-modules/spring-boot-testing/src/main/resources/property-validation.properties b/spring-boot-modules/spring-boot-testing/src/main/resources/property-validation.properties deleted file mode 100644 index 6b4c881dc0..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/main/resources/property-validation.properties +++ /dev/null @@ -1,4 +0,0 @@ -validate.propertiesMap.first=prop1 -validate.propertiesMap.second=prop2 - -validate.mail_config.address=user1@test \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/LoadContextTest.groovy b/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/LoadContextTest.groovy deleted file mode 100644 index 85b0a4b89b..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/LoadContextTest.groovy +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.boot - -import com.baeldung.boot.controller.rest.WebController -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import spock.lang.Narrative -import spock.lang.Specification -import spock.lang.Title - -@Title("Application Specification") -@Narrative("Specification which beans are expected") -@SpringBootTest -class LoadContextTest extends Specification { - - @Autowired(required = false) - private WebController webController - - - def "when context is loaded then all expected beans are created"() { - expect: "the WebController is created" - webController - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy b/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy deleted file mode 100644 index fe53abd241..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.boot - -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.autoconfigure.EnableAutoConfiguration -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders -import org.springframework.test.web.servlet.result.MockMvcResultMatchers -import spock.lang.Narrative -import spock.lang.Specification -import spock.lang.Title - -@Title("WebController Specification") -@Narrative("The Specification of the behaviour of the WebController. It can greet a person, change the name and reset it to 'world'") -@SpringBootTest -@AutoConfigureMockMvc -@EnableAutoConfiguration(exclude= SecurityAutoConfiguration.class) -class WebControllerTest extends Specification { - - @Autowired - private MockMvc mvc - - def "when get is performed then the response has status 200 and content is 'Hello world!'"() { - expect: "Status is 200 and the response is 'Hello world!'" - mvc.perform(MockMvcRequestBuilders.get("/hello")).andExpect(MockMvcResultMatchers.status().isOk()).andReturn().response.contentAsString == "Hello world!" - } - - def "when set and delete are performed then the response has status 204 and content changes as expected"() { - given: "a new name" - def NAME = "Emmy" - - when: "the name is set" - mvc.perform(MockMvcRequestBuilders.put("/hello").content(NAME)).andExpect(MockMvcResultMatchers.status().isNoContent()) - - then: "the salutation uses the new name" - mvc.perform(MockMvcRequestBuilders.get("/hello")).andExpect(MockMvcResultMatchers.status().isOk()).andReturn().response.contentAsString == "Hello $NAME!" - - when: "the name is deleted" - mvc.perform(MockMvcRequestBuilders.delete("/hello")).andExpect(MockMvcResultMatchers.status().isNoContent()) - - then: "the salutation uses the default name" - mvc.perform(MockMvcRequestBuilders.get("/hello")).andExpect(MockMvcResultMatchers.status().isOk()).andReturn().response.contentAsString == "Hello world!" - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy alias b/spring-boot-modules/spring-boot-testing/src/test/groovy/com/baeldung/boot/WebControllerTest.groovy alias deleted file mode 100644 index f2fc2f48e27bcf946a76f67ec7bacd1a2c3dd394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217036 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

l- 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

L?r!fZ) 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 expectedResourcesPath = new HashMap<>(); - expectedResourcesPath.put("imgs", "/root/def/imgs"); - assertEquals(expectedResourcesPath, serverConfig.getResourcesPath()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingPropertiesToUserDefinedPOJOUnitTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingPropertiesToUserDefinedPOJOUnitTest.java deleted file mode 100644 index 9db906fa04..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingPropertiesToUserDefinedPOJOUnitTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@EnableConfigurationProperties(value = ServerConfig.class) -@TestPropertySource("classpath:server-config-test.properties") -public class BindingPropertiesToUserDefinedPOJOUnitTest { - - @Autowired - private ServerConfig serverConfig; - - @Test - void givenUserDefinedPOJO_whenBindingPropertiesFile_thenAllFieldsAreSet() { - assertEquals("192.168.0.1", serverConfig.getAddress() - .getIp()); - - Map expectedResourcesPath = new HashMap<>(); - expectedResourcesPath.put("imgs", "/root/imgs"); - assertEquals(expectedResourcesPath, serverConfig.getResourcesPath()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingYMLPropertiesUnitTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingYMLPropertiesUnitTest.java deleted file mode 100644 index 99c128997e..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/BindingYMLPropertiesUnitTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) -@EnableConfigurationProperties(value = ServerConfig.class) -@ActiveProfiles("test") -public class BindingYMLPropertiesUnitTest { - - @Autowired - private ServerConfig serverConfig; - - @Test - void whenBindingYMLConfigFile_thenAllFieldsAreSet() { - assertEquals("192.168.0.4", serverConfig.getAddress() - .getIp()); - - Map expectedResourcesPath = new HashMap<>(); - expectedResourcesPath.put("imgs", "/etc/test/imgs"); - assertEquals(expectedResourcesPath, serverConfig.getResourcesPath()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/OverridingConfigurationPropertiesUnitTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/OverridingConfigurationPropertiesUnitTest.java deleted file mode 100644 index 2779b0a313..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/OverridingConfigurationPropertiesUnitTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@EnableConfigurationProperties(value = MailServer.class) -@TestPropertySource(properties = { "validate.mail_config.address=new_user@test" }) -public class OverridingConfigurationPropertiesUnitTest { - - @Autowired - private MailServer mailServer; - - @Test - void givenUsingPropertiesAttribute_whenAssiginingNewValueToProprty_thenSpringUsesNewValue() { - assertEquals("new_user@test", mailServer.getMailConfig() - .getAddress()); - - Map expectedMap = new HashMap<>(); - expectedMap.put("first", "prop1"); - expectedMap.put("second", "prop2"); - assertEquals(expectedMap, mailServer.getPropertiesMap()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/PropertyValidationUnitTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/PropertyValidationUnitTest.java deleted file mode 100644 index 939471dd67..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/PropertyValidationUnitTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import javax.validation.Validation; -import javax.validation.Validator; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@EnableConfigurationProperties(value = MailServer.class) -@TestPropertySource("classpath:property-validation-test.properties") -public class PropertyValidationUnitTest { - - @Autowired - private MailServer mailServer; - - private static Validator propertyValidator; - - @BeforeAll - public static void setup() { - propertyValidator = Validation.buildDefaultValidatorFactory() - .getValidator(); - } - - @Test - void whenBindingPropertiesToValidatedBeans_thenConstrainsAreChecked() { - assertEquals(0, propertyValidator.validate(mailServer.getPropertiesMap()) - .size()); - assertEquals(0, propertyValidator.validate(mailServer.getMailConfig()) - .size()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/SpringPropertiesConversionUnitTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/SpringPropertiesConversionUnitTest.java deleted file mode 100644 index 3f2da2a669..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/configurationproperties/SpringPropertiesConversionUnitTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.boot.configurationproperties; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.time.Duration; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.util.unit.DataSize; - -@ExtendWith(SpringExtension.class) -@EnableConfigurationProperties(value = PropertyConversion.class) -@ContextConfiguration(classes = CustomCredentialsConverter.class) -@TestPropertySource("classpath:spring-conversion-test.properties") -public class SpringPropertiesConversionUnitTest { - - @Autowired - private PropertyConversion propertyConversion; - - @Test - void whenUsingSpringDefaultSizeConversion_thenDataSizeObjectIsSet() { - assertEquals(DataSize.ofMegabytes(500), propertyConversion.getUploadSpeed()); - assertEquals(DataSize.ofGigabytes(10), propertyConversion.getDownloadSpeed()); - } - - @Test - void whenUsingSpringDefaultDurationConversion_thenDurationObjectIsSet() { - assertEquals(Duration.ofDays(1), propertyConversion.getBackupDay()); - assertEquals(Duration.ofHours(8), propertyConversion.getBackupHour()); - } - - @Test - void whenRegisteringCustomCredentialsConverter_thenCredentialsAreParsed() { - assertEquals("user", propertyConversion.getCredentials() - .getUsername()); - assertEquals("123", propertyConversion.getCredentials() - .getPassword()); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/TestRedisConfiguration.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/TestRedisConfiguration.java deleted file mode 100644 index b4748bcd38..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/TestRedisConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.boot.embeddedRedis; - -import com.baeldung.boot.embeddedRedis.configuration.RedisProperties; -import org.springframework.boot.test.context.TestConfiguration; -import redis.embedded.RedisServer; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -@TestConfiguration -public class TestRedisConfiguration { - - private final RedisServer redisServer; - - public TestRedisConfiguration(final RedisProperties redisProperties) { - this.redisServer = new RedisServer(redisProperties.getRedisPort()); - } - - @PostConstruct - public void postConstruct() { - redisServer.start(); - } - - @PreDestroy - public void preDestroy() { - redisServer.stop(); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepositoryIntegrationTest.java deleted file mode 100644 index 9577ccf0e8..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/embeddedRedis/domain/repository/UserRepositoryIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.boot.embeddedRedis.domain.repository; - -import com.baeldung.boot.embeddedRedis.TestRedisConfiguration; -import com.baeldung.boot.embeddedRedis.domain.User; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.UUID; - -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = TestRedisConfiguration.class) -public class UserRepositoryIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Test - public void shouldSaveUser_toRedis() { - final UUID id = UUID.randomUUID(); - final User user = new User(id, "name"); - - final User saved = userRepository.save(user); - - assertNotNull(saved); - } -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeControllerIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeControllerIntegrationTest.java deleted file mode 100644 index c51113a023..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeControllerIntegrationTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.baeldung.boot.testing; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.hasSize; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.util.Arrays; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.internal.verification.VerificationModeFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import com.baeldung.boot.testing.Employee; -import com.baeldung.boot.testing.EmployeeRestController; -import com.baeldung.boot.testing.EmployeeService; - -@RunWith(SpringRunner.class) -@WebMvcTest(value = EmployeeRestController.class, excludeAutoConfiguration = SecurityAutoConfiguration.class) -public class EmployeeControllerIntegrationTest { - - @Autowired - private MockMvc mvc; - - @MockBean - private EmployeeService service; - - @Before - public void setUp() throws Exception { - } - - @Test - public void whenPostEmployee_thenCreateEmployee() throws Exception { - Employee alex = new Employee("alex"); - given(service.save(Mockito.any())).willReturn(alex); - - mvc.perform(post("/api/employees").contentType(MediaType.APPLICATION_JSON).content(JsonUtil.toJson(alex))).andExpect(status().isCreated()).andExpect(jsonPath("$.name", is("alex"))); - verify(service, VerificationModeFactory.times(1)).save(Mockito.any()); - reset(service); - } - - @Test - public void givenEmployees_whenGetEmployees_thenReturnJsonArray() throws Exception { - Employee alex = new Employee("alex"); - Employee john = new Employee("john"); - Employee bob = new Employee("bob"); - - List allEmployees = Arrays.asList(alex, john, bob); - - given(service.getAllEmployees()).willReturn(allEmployees); - - mvc.perform(get("/api/employees").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(jsonPath("$", hasSize(3))).andExpect(jsonPath("$[0].name", is(alex.getName()))).andExpect(jsonPath("$[1].name", is(john.getName()))) - .andExpect(jsonPath("$[2].name", is(bob.getName()))); - verify(service, VerificationModeFactory.times(1)).getAllEmployees(); - reset(service); - } - -} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRepositoryIntegrationTest.java deleted file mode 100644 index b3a7316764..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRepositoryIntegrationTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.boot.testing; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.boot.testing.Employee; -import com.baeldung.boot.testing.EmployeeRepository; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(SpringRunner.class) -@DataJpaTest -public class EmployeeRepositoryIntegrationTest { - - @Autowired - private TestEntityManager entityManager; - - @Autowired - private EmployeeRepository employeeRepository; - - @Test - public void whenFindByName_thenReturnEmployee() { - Employee alex = new Employee("alex"); - entityManager.persistAndFlush(alex); - - Employee found = employeeRepository.findByName(alex.getName()); - assertThat(found.getName()).isEqualTo(alex.getName()); - } - - @Test - public void whenInvalidName_thenReturnNull() { - Employee fromDb = employeeRepository.findByName("doesNotExist"); - assertThat(fromDb).isNull(); - } - - @Test - public void whenFindById_thenReturnEmployee() { - Employee emp = new Employee("test"); - entityManager.persistAndFlush(emp); - - Employee fromDb = employeeRepository.findById(emp.getId()).orElse(null); - assertThat(fromDb.getName()).isEqualTo(emp.getName()); - } - - @Test - public void whenInvalidId_thenReturnNull() { - Employee fromDb = employeeRepository.findById(-11l).orElse(null); - assertThat(fromDb).isNull(); - } - - @Test - public void givenSetOfEmployees_whenFindAll_thenReturnAllEmployees() { - Employee alex = new Employee("alex"); - Employee ron = new Employee("ron"); - Employee bob = new Employee("bob"); - - entityManager.persist(alex); - entityManager.persist(bob); - entityManager.persist(ron); - entityManager.flush(); - - List allEmployees = employeeRepository.findAll(); - - assertThat(allEmployees).hasSize(3).extracting(Employee::getName).containsOnly(alex.getName(), ron.getName(), bob.getName()); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRestControllerIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRestControllerIntegrationTest.java deleted file mode 100644 index d13fcd79aa..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeRestControllerIntegrationTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.boot.testing; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; -import static org.hamcrest.Matchers.hasSize; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.io.IOException; -import java.util.List; - -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import com.baeldung.boot.Application; -import com.baeldung.boot.testing.Employee; -import com.baeldung.boot.testing.EmployeeRepository; - -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = Application.class) -@AutoConfigureMockMvc -@EnableAutoConfiguration(exclude=SecurityAutoConfiguration.class) -// @TestPropertySource(locations = "classpath:application-integrationtest.properties") -@AutoConfigureTestDatabase -public class EmployeeRestControllerIntegrationTest { - - @Autowired - private MockMvc mvc; - - @Autowired - private EmployeeRepository repository; - - @After - public void resetDb() { - repository.deleteAll(); - } - - @Test - public void whenValidInput_thenCreateEmployee() throws IOException, Exception { - Employee bob = new Employee("bob"); - mvc.perform(post("/api/employees").contentType(MediaType.APPLICATION_JSON).content(JsonUtil.toJson(bob))); - - List found = repository.findAll(); - assertThat(found).extracting(Employee::getName).containsOnly("bob"); - } - - @Test - public void givenEmployees_whenGetEmployees_thenStatus200() throws Exception { - createTestEmployee("bob"); - createTestEmployee("alex"); - - // @formatter:off - mvc.perform(get("/api/employees").contentType(MediaType.APPLICATION_JSON)) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$", hasSize(greaterThanOrEqualTo(2)))) - .andExpect(jsonPath("$[0].name", is("bob"))) - .andExpect(jsonPath("$[1].name", is("alex"))); - // @formatter:on - } - - // - - private void createTestEmployee(String name) { - Employee emp = new Employee(name); - repository.saveAndFlush(emp); - } - -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeServiceImplIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeServiceImplIntegrationTest.java deleted file mode 100644 index 3176a7c75a..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/EmployeeServiceImplIntegrationTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.baeldung.boot.testing; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Arrays; -import java.util.List; -import java.util.Optional; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.internal.verification.VerificationModeFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Bean; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.boot.testing.Employee; -import com.baeldung.boot.testing.EmployeeRepository; -import com.baeldung.boot.testing.EmployeeService; -import com.baeldung.boot.testing.EmployeeServiceImpl; - -@RunWith(SpringRunner.class) -public class EmployeeServiceImplIntegrationTest { - - @TestConfiguration - static class EmployeeServiceImplTestContextConfiguration { - @Bean - public EmployeeService employeeService() { - return new EmployeeServiceImpl(); - } - } - - @Autowired - private EmployeeService employeeService; - - @MockBean - private EmployeeRepository employeeRepository; - - @Before - public void setUp() { - Employee john = new Employee("john"); - john.setId(11L); - - Employee bob = new Employee("bob"); - Employee alex = new Employee("alex"); - - List allEmployees = Arrays.asList(john, bob, alex); - - Mockito.when(employeeRepository.findByName(john.getName())).thenReturn(john); - Mockito.when(employeeRepository.findByName(alex.getName())).thenReturn(alex); - Mockito.when(employeeRepository.findByName("wrong_name")).thenReturn(null); - Mockito.when(employeeRepository.findById(john.getId())).thenReturn(Optional.of(john)); - Mockito.when(employeeRepository.findAll()).thenReturn(allEmployees); - Mockito.when(employeeRepository.findById(-99L)).thenReturn(Optional.empty()); - } - - @Test - public void whenValidName_thenEmployeeShouldBeFound() { - String name = "alex"; - Employee found = employeeService.getEmployeeByName(name); - - assertThat(found.getName()).isEqualTo(name); - } - - @Test - public void whenInValidName_thenEmployeeShouldNotBeFound() { - Employee fromDb = employeeService.getEmployeeByName("wrong_name"); - assertThat(fromDb).isNull(); - - verifyFindByNameIsCalledOnce("wrong_name"); - } - - @Test - public void whenValidName_thenEmployeeShouldExist() { - boolean doesEmployeeExist = employeeService.exists("john"); - assertThat(doesEmployeeExist).isEqualTo(true); - - verifyFindByNameIsCalledOnce("john"); - } - - @Test - public void whenNonExistingName_thenEmployeeShouldNotExist() { - boolean doesEmployeeExist = employeeService.exists("some_name"); - assertThat(doesEmployeeExist).isEqualTo(false); - - verifyFindByNameIsCalledOnce("some_name"); - } - - @Test - public void whenValidId_thenEmployeeShouldBeFound() { - Employee fromDb = employeeService.getEmployeeById(11L); - assertThat(fromDb.getName()).isEqualTo("john"); - - verifyFindByIdIsCalledOnce(); - } - - @Test - public void whenInValidId_thenEmployeeShouldNotBeFound() { - Employee fromDb = employeeService.getEmployeeById(-99L); - verifyFindByIdIsCalledOnce(); - assertThat(fromDb).isNull(); - } - - @Test - public void given3Employees_whengetAll_thenReturn3Records() { - Employee alex = new Employee("alex"); - Employee john = new Employee("john"); - Employee bob = new Employee("bob"); - - List allEmployees = employeeService.getAllEmployees(); - verifyFindAllEmployeesIsCalledOnce(); - assertThat(allEmployees).hasSize(3).extracting(Employee::getName).contains(alex.getName(), john.getName(), bob.getName()); - } - - private void verifyFindByNameIsCalledOnce(String name) { - Mockito.verify(employeeRepository, VerificationModeFactory.times(1)).findByName(name); - Mockito.reset(employeeRepository); - } - - private void verifyFindByIdIsCalledOnce() { - Mockito.verify(employeeRepository, VerificationModeFactory.times(1)).findById(Mockito.anyLong()); - Mockito.reset(employeeRepository); - } - - private void verifyFindAllEmployeesIsCalledOnce() { - Mockito.verify(employeeRepository, VerificationModeFactory.times(1)).findAll(); - Mockito.reset(employeeRepository); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/JsonUtil.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/JsonUtil.java deleted file mode 100644 index 49d018dde8..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/boot/testing/JsonUtil.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.boot.testing; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.io.IOException; - -class JsonUtil { - static byte[] toJson(Object object) throws IOException { - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - return mapper.writeValueAsBytes(object); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/LoadSpringContextIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/LoadSpringContextIntegrationTest.java deleted file mode 100644 index 483c67b7a2..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/LoadSpringContextIntegrationTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.ApplicationRunner; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import com.baeldung.prevent.commandline.application.runner.execution.ApplicationCommandLineRunnerApp; -import com.baeldung.prevent.commandline.application.runner.execution.TaskService; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { ApplicationCommandLineRunnerApp.class }, - initializers = ConfigDataApplicationContextInitializer.class) -public class LoadSpringContextIntegrationTest { - @SpyBean - TaskService taskService; - - @SpyBean - CommandLineRunner commandLineRunner; - - @SpyBean - ApplicationRunner applicationRunner; - - @Test - void whenContextLoads_thenRunnersDoNotRun() throws Exception { - assertNotNull(taskService); - assertNotNull(commandLineRunner); - assertNotNull(applicationRunner); - - verify(taskService, times(0)).execute(any()); - verify(commandLineRunner, times(0)).run(any()); - verify(applicationRunner, times(0)).run(any()); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationIntegrationTest.java deleted file mode 100644 index 26a7339f1d..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationIntegrationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; - -import com.baeldung.prevent.commandline.application.runner.execution.ApplicationRunnerTaskExecutor; -import com.baeldung.prevent.commandline.application.runner.execution.CommandLineTaskExecutor; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@SpringBootTest -class RunApplicationIntegrationTest { - @SpyBean - ApplicationRunnerTaskExecutor applicationRunnerTaskExecutor; - @SpyBean - CommandLineTaskExecutor commandLineTaskExecutor; - - @Test - void whenContextLoads_thenRunnersRun() throws Exception { - verify(applicationRunnerTaskExecutor, times(1)).run(any()); - verify(commandLineTaskExecutor, times(1)).run(any()); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestProfileIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestProfileIntegrationTest.java deleted file mode 100644 index 333cd2ab91..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestProfileIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ActiveProfiles; - -import com.baeldung.prevent.commandline.application.runner.execution.ApplicationRunnerTaskExecutor; -import com.baeldung.prevent.commandline.application.runner.execution.CommandLineTaskExecutor; -import com.baeldung.prevent.commandline.application.runner.execution.TaskService; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@ActiveProfiles("test") -@SpringBootTest -class RunApplicationWithTestProfileIntegrationTest { - @Autowired - private ApplicationContext context; - - @Test - void whenContextLoads_thenRunnersAreNotLoaded() { - assertNotNull(context.getBean(TaskService.class)); - assertThrows(NoSuchBeanDefinitionException.class, - () -> context.getBean(CommandLineTaskExecutor.class), - "CommandLineRunner should not be loaded during this integration test"); - assertThrows(NoSuchBeanDefinitionException.class, - () -> context.getBean(ApplicationRunnerTaskExecutor.class), - "ApplicationRunner should not be loaded during this integration test"); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestPropertiesIntegrationTest.java b/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestPropertiesIntegrationTest.java deleted file mode 100644 index 264a06a41e..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/java/com/baeldung/prevent/commandline/application/runner/execution/RunApplicationWithTestPropertiesIntegrationTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.prevent.commandline.application.runner.execution; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ApplicationContext; - -import com.baeldung.prevent.commandline.application.runner.execution.ApplicationRunnerTaskExecutor; -import com.baeldung.prevent.commandline.application.runner.execution.CommandLineTaskExecutor; -import com.baeldung.prevent.commandline.application.runner.execution.TaskService; - -@SpringBootTest(properties = { - "command.line.runner.enabled=false", - "application.runner.enabled=false" }) -class RunApplicationWithTestPropertiesIntegrationTest { - @Autowired - private ApplicationContext context; - - @Test - void whenContextLoads_thenRunnersAreNotLoaded() { - assertNotNull(context.getBean(TaskService.class)); - assertThrows(NoSuchBeanDefinitionException.class, - () -> context.getBean(CommandLineTaskExecutor.class), - "CommandLineRunner should not be loaded during this integration test"); - assertThrows(NoSuchBeanDefinitionException.class, - () -> context.getBean(ApplicationRunnerTaskExecutor.class), - "ApplicationRunner should not be loaded during this integration test"); - } -} diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/application-integrationtest.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/application-integrationtest.properties deleted file mode 100644 index bcd03226d3..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/application-integrationtest.properties +++ /dev/null @@ -1,4 +0,0 @@ -spring.datasource.url=jdbc:mysql://localhost:3306/employee_int_test -spring.datasource.username=root -spring.datasource.password=root - diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/application-test.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/application-test.properties deleted file mode 100644 index a2c9b6d480..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/application-test.properties +++ /dev/null @@ -1,2 +0,0 @@ -# test properties -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/application.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/application.properties deleted file mode 100644 index 1810c7b1eb..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/application.properties +++ /dev/null @@ -1,8 +0,0 @@ -#embedded redis -spring.redis.host= localhost -spring.redis.port= 6370 -# security -spring.security.user.name=john -spring.security.user.password=123 - -spring.main.allow-bean-definition-overriding=true \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/application.yml b/spring-boot-modules/spring-boot-testing/src/test/resources/application.yml deleted file mode 100644 index 056b5baffc..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/application.yml +++ /dev/null @@ -1,19 +0,0 @@ -spring: - config: - activate: - on-profile: test -server: - address: - ip: 192.168.0.4 - resources_path: - imgs: /etc/test/imgs ---- -spring: - config: - activate: - on-profile: dev -server: - address: - ip: 192.168.0.5 - resources_path: - imgs: /etc/dev/imgs \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/logback-test.xml b/spring-boot-modules/spring-boot-testing/src/test/resources/logback-test.xml deleted file mode 100644 index 9553dcad41..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/logback-test.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/property-validation-test.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/property-validation-test.properties deleted file mode 100644 index 6b4c881dc0..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/property-validation-test.properties +++ /dev/null @@ -1,4 +0,0 @@ -validate.propertiesMap.first=prop1 -validate.propertiesMap.second=prop2 - -validate.mail_config.address=user1@test \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/server-config-test.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/server-config-test.properties deleted file mode 100644 index 62b23ed1d6..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/server-config-test.properties +++ /dev/null @@ -1,6 +0,0 @@ -server.address.ip=192.168.0.1 -server.resources_path.imgs=/root/imgs - -# default config -server.default.address.ip=192.168.0.2 -server.default.resources_path.imgs=/root/def/imgs \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-testing/src/test/resources/spring-conversion-test.properties b/spring-boot-modules/spring-boot-testing/src/test/resources/spring-conversion-test.properties deleted file mode 100644 index 87444cee10..0000000000 --- a/spring-boot-modules/spring-boot-testing/src/test/resources/spring-conversion-test.properties +++ /dev/null @@ -1,10 +0,0 @@ -# bandwidth -server.upload_speed=500MB -server.download_speed=10 - -# backup date -server.backup_day=1d -server.backup_hour=8 - -# custom converter -server.credentials=user,123 \ No newline at end of file diff --git a/spring-remoting-modules-3/README.md b/spring-remoting-modules-3/README.md deleted file mode 100644 index 91db561f83..0000000000 --- a/spring-remoting-modules-3/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## Spring Remoting - -This module contains articles about Spring Remoting - - -### Overview -This Maven project contains the Java source code for various modules used in the Spring Remoting series of articles. - -### Building the Project -You can build the project using Maven inside your IDE or from the command line: -``` -mvn clean install -``` diff --git a/spring-remoting-modules-3/pom.xml b/spring-remoting-modules-3/pom.xml deleted file mode 100644 index ea3e6e70f7..0000000000 --- a/spring-remoting-modules-3/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - spring-remoting-modules-3 - 1.0-SNAPSHOT - spring-remoting-modules-3 - pom - Parent for all projects related to Spring Remoting, except remoting-hessian-burlap - - - com.ossez - parent-boot-3 - 0.0.1-SNAPSHOT - parent-boot-3 - - - - remoting-jms-artemis - - - - - - - ${project.groupId} - api - ${project.version} - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - 17 - 17 - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/.gitignore b/spring-remoting-modules-3/remoting-jms-artemis/.idea/.gitignore deleted file mode 100644 index 0a8642fac0..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Zeppelin ignored files -/ZeppelinRemoteNotebooks/ diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/checkstyle-idea.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/checkstyle-idea.xml deleted file mode 100644 index f0c49846ff..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/checkstyle-idea.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - 10.12.2 - JavaOnly - true - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/compiler.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/compiler.xml deleted file mode 100644 index 4352c98059..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/compiler.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/encodings.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/encodings.xml deleted file mode 100644 index 56c6c7bcd3..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/encodings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/jarRepositories.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/jarRepositories.xml deleted file mode 100644 index 1067e4c6b5..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/jarRepositories.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/jpa-buddy.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/jpa-buddy.xml deleted file mode 100644 index 898e07a675..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/jpa-buddy.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/misc.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/misc.xml deleted file mode 100644 index a2eb346bb8..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/uiDesigner.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946d5b..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/.idea/vcs.xml b/spring-remoting-modules-3/remoting-jms-artemis/.idea/vcs.xml deleted file mode 100644 index b2bdec2d71..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/README.md b/spring-remoting-modules-3/remoting-jms-artemis/README.md deleted file mode 100644 index cf86f4adc4..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## Remoting JMS Artemis - -This module contains articles about Spring Remoting with Java Message Service (JMS) - -### Relevant Articles: - -- [Spring Remoting with JMS and ActiveMQ](https://www.baeldung.com/spring-remoting-jms) - diff --git a/spring-remoting-modules-3/remoting-jms-artemis/pom.xml b/spring-remoting-modules-3/remoting-jms-artemis/pom.xml deleted file mode 100644 index 0e06f402cf..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - remoting-jms-artemis - remoting-jms-artemis - pom - - - com.ossez - spring-remoting-modules-3 - 1.0-SNAPSHOT - - - - remoting-jms-artemis-client - remoting-jms-artemis-server - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/pom.xml b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/pom.xml deleted file mode 100644 index d0d7cd88bb..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - 4.0.0 - remoting-jms-artemis-client - remoting-jms-client - - - com.ossez - remoting-jms-artemis - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-artemis - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-autoconfigure - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsArtemisClientApplication.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsArtemisClientApplication.java deleted file mode 100644 index 7e6013b88e..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsArtemisClientApplication.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ossez.artemis.client; - - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * JMS Message Producer Application - * - * @author YuCheng Hu - */ - - -@SpringBootApplication -public class JmsArtemisClientApplication { - - public static void main(String[] args) { - JmsProducer jmsProducer = SpringApplication.run(JmsArtemisClientApplication.class, args).getBean(JmsProducer.class); - jmsProducer.send("xxxddx");; - - } - -} diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsProducer.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsProducer.java deleted file mode 100644 index 4b38e380d7..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/JmsProducer.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ossez.artemis.client; - -import org.springframework.jms.core.JmsTemplate; -import org.springframework.stereotype.Component; - -/** - * JmsProducer - * @author YuCheng Hu - */ -@Component -public class JmsProducer { - - private final JmsTemplate jmsTemplate; - - public JmsProducer(JmsTemplate jmsTemplate) { - this.jmsTemplate = jmsTemplate; - } - - public void send(String message) { - jmsTemplate.convertAndSend("remotingQueue", message); - } - -} diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/controller/MQController.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/controller/MQController.java deleted file mode 100644 index 4a490ed6c1..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/java/com/ossez/artemis/client/controller/MQController.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ossez.artemis.client.controller; - -import com.ossez.artemis.client.JmsProducer; -import lombok.RequiredArgsConstructor; - -import org.springframework.web.bind.annotation.*; - -/** - * 承包商相关 API - * - * @author ForteScarlet - */ -@RestController -@RequiredArgsConstructor -@RequestMapping(MQController.BASE_URL) -public class MQController { - - protected static final String BASE_URL = "/mq"; - - private final JmsProducer jmsProducer; - - @PostMapping("/send") - public String sendToMQ(@RequestBody String request) { - jmsProducer.send(request); - - return "Send"; - } - - -} diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/application.properties b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/application.properties deleted file mode 100644 index 6a7307708b..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -spring.artemis.mode=native -spring.artemis.broker-url=tcp://nas1120:61616 -#spring.artemis.host=nas1120 -#spring.artemis.port=61616 -spring.artemis.user=artemis -spring.artemis.password=artemis \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/logback.xml b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/logback.xml deleted file mode 100644 index 35be7e9f22..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/main/resources/logback.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/test/java/com/ossez/artemis/SpringContextTest.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/test/java/com/ossez/artemis/SpringContextTest.java deleted file mode 100644 index 149ff0ab41..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-client/src/test/java/com/ossez/artemis/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ossez.artemis; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.ossez.artemis.client.JmsArtemisClientApplication; - -@SpringBootTest(classes = JmsArtemisClientApplication.class) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/pom.xml b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/pom.xml deleted file mode 100644 index 37f1ce4010..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - remoting-jms-artemis-server - remoting-jms-server - - - com.ossez - remoting-jms-artemis - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-artemis - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/java/com/ossez/artemis/server/JmsArtemisServerApplication.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/java/com/ossez/artemis/server/JmsArtemisServerApplication.java deleted file mode 100644 index 9a8ba8a857..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/java/com/ossez/artemis/server/JmsArtemisServerApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ossez.artemis.server; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.jms.annotation.JmsListener; - -/** - * JMS Message Consumer Application - * - * @author YuCheng Hu - */ -@SpringBootApplication -public class JmsArtemisServerApplication { - - - @JmsListener(destination = "remotingQueue") - public void receive(String message) { - System.out.println("Received message: " + message); - } - - public static void main(String[] args) { - SpringApplication.run(JmsArtemisServerApplication.class, args); - } - -} diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/application.properties b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/application.properties deleted file mode 100644 index 1992e49a35..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/application.properties +++ /dev/null @@ -1,13 +0,0 @@ -spring.artemis.mode=native -spring.artemis.broker-url=tcp://nas1120:61616 -spring.artemis.user=artemis -spring.artemis.password=artemis -#spring.activemq.packages.trusted=org.springframework.remoting.support,java.lang,com.baeldung.api - -# Logging -logging.pattern.console=%d{mm:ss.SSS} %-5p [%-31t] [%-54logger{0}] %marker%m%ex{full} - %logger - %F:%L%n -logging.level.root=WARN -logging.level.org.apache.activemq=DEBUG -logging.level.org.springframework.jms=DEBUG -logging.level.org.springframework=WARN - diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/logback.xml b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/test/java/com/ossez/artemis/SpringContextLiveTest.java b/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/test/java/com/ossez/artemis/SpringContextLiveTest.java deleted file mode 100644 index c87c582465..0000000000 --- a/spring-remoting-modules-3/remoting-jms-artemis/remoting-jms-artemis-server/src/test/java/com/ossez/artemis/SpringContextLiveTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ossez.artemis; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.ossez.artemis.server.JmsArtemisServerApplication; - -/** - * This Live Test requires: - * * the `com.baeldung:remoting-http-api:jar:1.0-SNAPSHOT` artifact accessible. For that we can run `mvn clean install` in the 'spring-remoting/remoting-http/remoting-http-api' module. - * * an ActiveMQ instance running (e.g. `docker run -p 61616:61616 -p 8161:8161 --name bael-activemq rmohr/activemq`) - * - */ -@SpringBootTest(classes = JmsArtemisServerApplication.class) -@RunWith(SpringRunner.class) -public class SpringContextLiveTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/.idea/.gitignore b/spring-remoting-modules/.idea/.gitignore deleted file mode 100644 index 0a8642fac0..0000000000 --- a/spring-remoting-modules/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Zeppelin ignored files -/ZeppelinRemoteNotebooks/ diff --git a/spring-remoting-modules/.idea/checkstyle-idea.xml b/spring-remoting-modules/.idea/checkstyle-idea.xml deleted file mode 100644 index f0c49846ff..0000000000 --- a/spring-remoting-modules/.idea/checkstyle-idea.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - 10.12.2 - JavaOnly - true - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/compiler.xml b/spring-remoting-modules/.idea/compiler.xml deleted file mode 100644 index 92b98354bd..0000000000 --- a/spring-remoting-modules/.idea/compiler.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/encodings.xml b/spring-remoting-modules/.idea/encodings.xml deleted file mode 100644 index 9635c68aa3..0000000000 --- a/spring-remoting-modules/.idea/encodings.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/jarRepositories.xml b/spring-remoting-modules/.idea/jarRepositories.xml deleted file mode 100644 index 1067e4c6b5..0000000000 --- a/spring-remoting-modules/.idea/jarRepositories.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/jpa-buddy.xml b/spring-remoting-modules/.idea/jpa-buddy.xml deleted file mode 100644 index 898e07a675..0000000000 --- a/spring-remoting-modules/.idea/jpa-buddy.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/misc.xml b/spring-remoting-modules/.idea/misc.xml deleted file mode 100644 index a2eb346bb8..0000000000 --- a/spring-remoting-modules/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/.idea/vcs.xml b/spring-remoting-modules/.idea/vcs.xml deleted file mode 100644 index 6c0b863585..0000000000 --- a/spring-remoting-modules/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/README.md b/spring-remoting-modules/README.md deleted file mode 100644 index 91db561f83..0000000000 --- a/spring-remoting-modules/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## Spring Remoting - -This module contains articles about Spring Remoting - - -### Overview -This Maven project contains the Java source code for various modules used in the Spring Remoting series of articles. - -### Building the Project -You can build the project using Maven inside your IDE or from the command line: -``` -mvn clean install -``` diff --git a/spring-remoting-modules/pom.xml b/spring-remoting-modules/pom.xml deleted file mode 100644 index 480e7db21d..0000000000 --- a/spring-remoting-modules/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - spring-remoting-modules - 1.0-SNAPSHOT - spring-remoting-modules - pom - Parent for all projects related to Spring Remoting, except remoting-hessian-burlap - - - - - com.ossez - parent-boot-2 - 0.0.2-SNAPSHOT - parent-boot-2 - - - - - remoting-http - - remoting-jms - - - - - - - - ${project.groupId} - api - ${project.version} - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - 11 - 11 - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/README.md b/spring-remoting-modules/remoting-amqp/README.md deleted file mode 100644 index b4367f0cd0..0000000000 --- a/spring-remoting-modules/remoting-amqp/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Relevant Articles - -- [Spring Remoting with AMQP](https://www.baeldung.com/spring-remoting-amqp) diff --git a/spring-remoting-modules/remoting-amqp/pom.xml b/spring-remoting-modules/remoting-amqp/pom.xml deleted file mode 100644 index 7e1aa83cc5..0000000000 --- a/spring-remoting-modules/remoting-amqp/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - remoting-amqp - remoting-amqp - pom - - - com.baeldung - spring-remoting-modules - 1.0-SNAPSHOT - - - - remoting-amqp-server - remoting-amqp-client - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/pom.xml b/spring-remoting-modules/remoting-amqp/remoting-amqp-client/pom.xml deleted file mode 100644 index 1bcab004f1..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - remoting-amqp-client - remoting-amqp-client - jar - http://maven.apache.org - - - com.baeldung - remoting-amqp - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-amqp - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - com.baeldung - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/java/com/baeldung/client/AmqpClient.java b/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/java/com/baeldung/client/AmqpClient.java deleted file mode 100644 index def80f6b5e..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/java/com/baeldung/client/AmqpClient.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.springframework.amqp.core.*; -import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.remoting.client.AmqpProxyFactoryBean; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; - -import static java.lang.System.out; - -@SpringBootApplication public class AmqpClient { - - @Bean Queue queue() { - return new Queue("remotingQueue"); - } - - @Bean AmqpProxyFactoryBean amqpFactoryBean(AmqpTemplate amqpTemplate) { - AmqpProxyFactoryBean factoryBean = new AmqpProxyFactoryBean(); - factoryBean.setServiceInterface(CabBookingService.class); - factoryBean.setAmqpTemplate(amqpTemplate); - return factoryBean; - } - - @Bean Exchange directExchange(Queue someQueue) { - DirectExchange exchange = new DirectExchange("remoting.exchange"); - BindingBuilder.bind(someQueue).to(exchange).with("remoting.binding"); - return exchange; - } - - @Bean RabbitTemplate amqpTemplate(ConnectionFactory factory) { - RabbitTemplate template = new RabbitTemplate(factory); - template.setRoutingKey("remoting.binding"); - template.setExchange("remoting.exchange"); - return template; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(AmqpClient.class, args).getBean(CabBookingService.class); - out.println(service.bookRide("13 Seagate Blvd, Key Largo, FL 33037")); - } - -} diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/application.properties b/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/application.properties deleted file mode 100644 index 8df44a7c8d..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/application.properties +++ /dev/null @@ -1,19 +0,0 @@ -# This is true to make SpringBoot to automatically register a bean of type 'org.springframework.amqp.core.AmqpAdmin'. -# Check the org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration javadoc for details. -spring.rabbitmq.dynamic=true - -# The port to which the client should connect defaults to 5672. -spring.rabbitmq.port=32769 - -# Username and password -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest - -# The host, defaults to localhost. -spring.rabbitmq.host=192.168.99.100 - -# Logging -logging.pattern.console=%d{mm:ss.SSS} %-5p [%-31t] [%-54logger{0}] %marker%m%ex{full} - %logger - %F:%L%n -logging.level.root=WARN -logging.level.org.springframework.amqp=TRACE - diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/logback.xml b/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index fe20382ab4..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-client/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.client.AmqpClient; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = AmqpClient.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/pom.xml b/spring-remoting-modules/remoting-amqp/remoting-amqp-server/pom.xml deleted file mode 100644 index 6b6c12b41a..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - remoting-amqp-server - remoting-amqp-server - jar - http://maven.apache.org - - - com.baeldung - remoting-amqp - 1.0-SNAPSHOT - - - - - com.baeldung - remoting-http-api - ${project.version} - - - org.springframework.boot - spring-boot-starter-amqp - - - com.baeldung - remoting-http-server - ${remoting-http-server.version} - - - - - 1.0-SNAPSHOT - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/java/com/baeldung/server/AmqpServer.java b/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/java/com/baeldung/server/AmqpServer.java deleted file mode 100644 index f0155b2141..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/java/com/baeldung/server/AmqpServer.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.CabBookingService; -import org.springframework.amqp.core.AmqpTemplate; -import org.springframework.amqp.core.Queue; -import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; -import org.springframework.amqp.remoting.service.AmqpInvokerServiceExporter; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration @ComponentScan @EnableAutoConfiguration -public class AmqpServer { - - /* - Please note that - - CachingConnectionFactory - - RabbitAdmin - - AmqpTemplate - are automatically declared by SpringBoot. - */ - - @Bean CabBookingService bookingService() { - return new CabBookingServiceImpl(); - } - - @Bean Queue queue() { - return new Queue("remotingQueue"); - } - - @Bean AmqpInvokerServiceExporter exporter(CabBookingService implementation, AmqpTemplate template) { - AmqpInvokerServiceExporter exporter = new AmqpInvokerServiceExporter(); - exporter.setServiceInterface(CabBookingService.class); - exporter.setService(implementation); - exporter.setAmqpTemplate(template); - return exporter; - } - - @Bean SimpleMessageListenerContainer listener(ConnectionFactory factory, AmqpInvokerServiceExporter exporter, Queue queue) { - SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(factory); - container.setMessageListener(exporter); - container.setQueueNames(queue.getName()); - return container; - } - - public static void main(String[] args) { - SpringApplication.run(AmqpServer.class, args); - } - -} \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/application.properties b/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/application.properties deleted file mode 100644 index 8df44a7c8d..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/application.properties +++ /dev/null @@ -1,19 +0,0 @@ -# This is true to make SpringBoot to automatically register a bean of type 'org.springframework.amqp.core.AmqpAdmin'. -# Check the org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration javadoc for details. -spring.rabbitmq.dynamic=true - -# The port to which the client should connect defaults to 5672. -spring.rabbitmq.port=32769 - -# Username and password -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest - -# The host, defaults to localhost. -spring.rabbitmq.host=192.168.99.100 - -# Logging -logging.pattern.console=%d{mm:ss.SSS} %-5p [%-31t] [%-54logger{0}] %marker%m%ex{full} - %logger - %F:%L%n -logging.level.root=WARN -logging.level.org.springframework.amqp=TRACE - diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/logback.xml b/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/test/java/org/baeldung/SpringContextManualTest.java b/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/test/java/org/baeldung/SpringContextManualTest.java deleted file mode 100644 index a6ee0b6000..0000000000 --- a/spring-remoting-modules/remoting-amqp/remoting-amqp-server/src/test/java/org/baeldung/SpringContextManualTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.server.AmqpServer; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = AmqpServer.class) -public class SpringContextManualTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-hessian-burlap/README.md b/spring-remoting-modules/remoting-hessian-burlap/README.md deleted file mode 100644 index cacceddc5a..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/README.md +++ /dev/null @@ -1,12 +0,0 @@ -## Spring Remoting with Hessian and Burlap - -This module contains articles about Spring Remoting with Hessian and Burlap - -### Relevant Articles - -- [Spring Remoting with Hessian and Burlap](http://www.baeldung.com/spring-remoting-hessian-burlap) - -### Overview -This Maven project contains the Java source code for the Hessian and Burlap modules - used in the [Spring Remoting](https://github.com/eugenp/tutorials/tree/master/spring-remoting) - series of articles. diff --git a/spring-remoting-modules/remoting-hessian-burlap/pom.xml b/spring-remoting-modules/remoting-hessian-burlap/pom.xml deleted file mode 100644 index e5975b9f37..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - 4.0.0 - remoting-hessian-burlap - 1.0-SNAPSHOT - remoting-hessian-burlap - pom - - - - com.baeldung - parent-boot-1 - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - remoting-hessian-burlap-server - remoting-hessian-burlap-client - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml deleted file mode 100644 index 1939e00386..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - 4.0.0 - remoting-hessian-burlap-client - remoting-hessian-burlap-client - - - com.baeldung - remoting-hessian-burlap - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - ${project.groupId} - remoting-http-api - ${project.version} - - - com.caucho - hessian - ${hessian.version} - - - - ${project.groupId} - remoting-hessian-burlap-server - ${project.version} - test - - - javax.servlet - javax.servlet-api - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-starter-tomcat - test - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - 4.0.38 - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/BurlapClient.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/BurlapClient.java deleted file mode 100644 index 1079c4163f..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/BurlapClient.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.caucho.BurlapProxyFactoryBean; - -import static java.lang.System.out; - -@Configuration -public class BurlapClient { - - @Bean - public BurlapProxyFactoryBean burlapInvoker() { - BurlapProxyFactoryBean invoker = new BurlapProxyFactoryBean(); - invoker.setServiceUrl("http://localhost:8032/b_booking"); - invoker.setServiceInterface(CabBookingService.class); - return invoker; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(BurlapClient.class, args).getBean(CabBookingService.class); - out.println(service.bookRide("13 Seagate Blvd, Key Largo, FL 33037")); - } - -} diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/HessianClient.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/HessianClient.java deleted file mode 100644 index b2a2f4ffae..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/java/com/baeldung/client/HessianClient.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.caucho.HessianProxyFactoryBean; - -import static java.lang.System.out; - -@Configuration -public class HessianClient { - - @Bean - public HessianProxyFactoryBean hessianInvoker() { - HessianProxyFactoryBean invoker = new HessianProxyFactoryBean(); - invoker.setServiceUrl("http://localhost:8032/booking"); - invoker.setServiceInterface(CabBookingService.class); - return invoker; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(HessianClient.class, args).getBean(CabBookingService.class); - out.println(service.bookRide("13 Seagate Blvd, Key Largo, FL 33037")); - } - -} diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/resources/logback.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/com/baeldung/client/CabBookingServiceIntegrationTest.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/com/baeldung/client/CabBookingServiceIntegrationTest.java deleted file mode 100644 index a1fed9637f..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/com/baeldung/client/CabBookingServiceIntegrationTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import com.baeldung.server.Server; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import static java.lang.Thread.sleep; - -@SpringBootTest(classes = {BurlapClient.class, HessianClient.class}) -@RunWith(SpringRunner.class) -public class CabBookingServiceIntegrationTest { - - static Logger log = LoggerFactory.getLogger(CabBookingServiceIntegrationTest.class); - @Autowired @Qualifier("burlapInvoker") CabBookingService burlapClient; - @Autowired @Qualifier("hessianInvoker") CabBookingService hessianClient; - static Thread serverThread; - - @BeforeClass - public static void startServer() throws InterruptedException { - serverThread = serverThread(); - log.info("Starting server."); - serverThread.start(); - // increase this enough to let the server start - sleep(6000); - } - - @org.junit.Test - public void bookACabWithBurlapClient() throws InterruptedException { - bookACab(this.burlapClient); - } - - @org.junit.Test - public void bookACabWithHessianClient() throws InterruptedException { - bookACab(this.hessianClient); - } - - private void bookACab(CabBookingService burlapClient) { - Booking booking; - try { - booking = burlapClient.bookRide("Duomo place"); - log.info("Booking success: {}", booking); - } catch (BookingException e) { - log.info("Booking failed: {}", e.getMessage()); - } - } - - @AfterClass - public static void stopServer() throws InterruptedException { - serverThread.interrupt(); - serverThread.join(); - log.info("Server terminated."); - } - - static Thread serverThread() { - Thread serverThread = new Thread(()-> { - log.info("Starting Burlap and Hessian server"); - Server.main(new String[]{}); - log.info("Burlap and Hessian server terminated"); - }); - serverThread.setDaemon(true); - return serverThread; - } - -} diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 4325b0ddef..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.client.BurlapClient; -import com.baeldung.client.HessianClient; - -@SpringBootTest(classes = {BurlapClient.class, HessianClient.class}) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/resources/application.properties b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/resources/application.properties deleted file mode 100644 index 13577dc391..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/src/test/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -application.properties=9999 \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml deleted file mode 100644 index 68a70f24b6..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - remoting-hessian-burlap-server - remoting-hessian-burlap-server - - - com.baeldung - remoting-hessian-burlap - 1.0-SNAPSHOT - - - - - com.baeldung - remoting-http-server - ${project.version} - - - org.springframework.boot - spring-boot-starter-web - - - com.caucho - hessian - ${hessian.version} - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - --add-opens java.base/java.lang=ALL-UNNAMED - - - - - - - - 4.0.38 - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/java/com/baeldung/server/Server.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/java/com/baeldung/server/Server.java deleted file mode 100644 index 9c825a2a80..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/java/com/baeldung/server/Server.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.caucho.BurlapServiceExporter; -import org.springframework.remoting.caucho.HessianServiceExporter; -import org.springframework.remoting.support.RemoteExporter; - -import java.util.Collections; - -@Configuration @ComponentScan @EnableAutoConfiguration public class Server { - - @Bean CabBookingService bookingService() { - return new CabBookingServiceImpl(); - } - - @Bean(name = "/booking") RemoteExporter hessianService(CabBookingService service) { - HessianServiceExporter exporter = new HessianServiceExporter(); - exporter.setService(bookingService()); - exporter.setServiceInterface(CabBookingService.class); - return exporter; - } - - @Bean(name = "/b_booking") RemoteExporter burlapService(CabBookingService service) { - BurlapServiceExporter exporter = new BurlapServiceExporter(); - exporter.setService(bookingService()); - exporter.setServiceInterface(CabBookingService.class); - return exporter; - } - - public static void main(String[] args) { - SpringApplication app = new SpringApplication(Server.class); - app.setDefaultProperties(Collections.singletonMap("server.port", "8032")); - app.run(args); - } - -} \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/resources/logback.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index e676bb0ff2..0000000000 --- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.server.Server; - -@SpringBootTest(classes = Server.class) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-http/README.md b/spring-remoting-modules/remoting-http/README.md deleted file mode 100644 index a4f3ea82a9..0000000000 --- a/spring-remoting-modules/remoting-http/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## Remoting HTTP - -This module contains articles about Spring Remoting over HTTP - -### Relevant Articles: - -- [Intro to Spring Remoting with HTTP Invokers](https://www.baeldung.com/spring-remoting-http-invoker) - diff --git a/spring-remoting-modules/remoting-http/pom.xml b/spring-remoting-modules/remoting-http/pom.xml deleted file mode 100644 index cee1d82196..0000000000 --- a/spring-remoting-modules/remoting-http/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - 4.0.0 - remoting-http - remoting-http - pom - Parent for all modules related to HTTP Spring Remoting. - - - com.ossez - spring-remoting-modules - 1.0-SNAPSHOT - - - - remoting-http-server - remoting-http-client - remoting-http-api - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-api/pom.xml b/spring-remoting-modules/remoting-http/remoting-http-api/pom.xml deleted file mode 100644 index d84d942659..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-api/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - remoting-http-api - remoting-http-api - API definition shared between client and server. - - - com.ossez - remoting-http - 1.0-SNAPSHOT - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/Booking.java b/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/Booking.java deleted file mode 100644 index 5d2d3683a1..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/Booking.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.api; - -import java.io.Serializable; - -import static java.lang.String.format; - -public class Booking implements Serializable { - private String bookingCode; - - @Override public String toString() { - return format("Ride confirmed: code '%s'.", bookingCode); - } - - public Booking(String bookingCode) { - this.bookingCode = bookingCode; - } -} diff --git a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/BookingException.java b/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/BookingException.java deleted file mode 100644 index 4099db2908..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/BookingException.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.api; - -public class BookingException extends Exception { - public BookingException(String message) { - super(message); - } -} diff --git a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/CabBookingService.java b/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/CabBookingService.java deleted file mode 100644 index b554415e07..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-api/src/main/java/com/baeldung/api/CabBookingService.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.api; - -public interface CabBookingService { - Booking bookRide(String pickUpLocation) throws BookingException; -} diff --git a/spring-remoting-modules/remoting-http/remoting-http-client/pom.xml b/spring-remoting-modules/remoting-http/remoting-http-client/pom.xml deleted file mode 100644 index 219319f75d..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-client/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - 4.0.0 - remoting-http-client - remoting-http-client - Shows how to invoke a remote service using Spring Remoting HTTP. - - - com.ossez - remoting-http - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - ${project.groupId} - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-client/src/main/java/com/baeldug/client/Client.java b/spring-remoting-modules/remoting-http/remoting-http-client/src/main/java/com/baeldug/client/Client.java deleted file mode 100644 index 90f6736a43..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-client/src/main/java/com/baeldug/client/Client.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldug.client; - -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; - -import static java.lang.System.out; - -@Configuration -public class Client { - - @Bean - public HttpInvokerProxyFactoryBean invoker() { - HttpInvokerProxyFactoryBean invoker = new HttpInvokerProxyFactoryBean(); - invoker.setServiceUrl("http://localhost:8080/booking"); - invoker.setServiceInterface(CabBookingService.class); - return invoker; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(Client.class, args).getBean(CabBookingService.class); - out.println(service.bookRide("13 Seagate Blvd, Key Largo, FL 33037")); - } - -} diff --git a/spring-remoting-modules/remoting-http/remoting-http-client/src/main/resources/logback.xml b/spring-remoting-modules/remoting-http/remoting-http-client/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-client/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/pom.xml b/spring-remoting-modules/remoting-http/remoting-http-server/pom.xml deleted file mode 100644 index 1dd711aedc..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - remoting-http-server - remoting-http-server - Shows how to expose a service using Spring Remoting HTTP. - - - com.ossez - remoting-http - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - ${project.groupId} - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/readme.md b/spring-remoting-modules/remoting-http/remoting-http-server/readme.md deleted file mode 100644 index 4a2abb5d03..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -Build and launch with the following command. - - mvn clean package tomcat7:run-war - -Exposed service is available at following URL. - - http://localhost:9090/spring-remoting-http-server/account - -## References - - - diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java b/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java deleted file mode 100644 index 55ec9c5733..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; - -import static java.lang.Math.random; -import static java.util.UUID.randomUUID; - -public class CabBookingServiceImpl implements CabBookingService { - - @Override public Booking bookRide(String pickUpLocation) throws BookingException { - if (random() < 0.3) throw new BookingException("Cab unavailable"); - return new Booking(randomUUID().toString()); - } -} diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/Server.java b/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/Server.java deleted file mode 100644 index c6b198507f..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/java/com/baeldung/server/Server.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; - -@Configuration -@ComponentScan -@EnableAutoConfiguration -public class Server { - - @Bean(name = "/booking") HttpInvokerServiceExporter accountService() { - HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter(); - exporter.setService( new CabBookingServiceImpl() ); - exporter.setServiceInterface( CabBookingService.class ); - return exporter; - } - - public static void main(String[] args) { - SpringApplication.run(Server.class, args); - } - -} \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/resources/logback.xml b/spring-remoting-modules/remoting-http/remoting-http-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-http/remoting-http-server/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-http/remoting-http-server/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index e676bb0ff2..0000000000 --- a/spring-remoting-modules/remoting-http/remoting-http-server/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.server.Server; - -@SpringBootTest(classes = Server.class) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-jms/README.md b/spring-remoting-modules/remoting-jms/README.md deleted file mode 100644 index 2f48a8f57f..0000000000 --- a/spring-remoting-modules/remoting-jms/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## Remoting JMS - -This module contains articles about Spring Remoting with Java Message Service (JMS) - -### Relevant Articles: - -- [Spring Remoting with JMS and ActiveMQ](https://www.baeldung.com/spring-remoting-jms) - diff --git a/spring-remoting-modules/remoting-jms/pom.xml b/spring-remoting-modules/remoting-jms/pom.xml deleted file mode 100644 index fd63fa01c2..0000000000 --- a/spring-remoting-modules/remoting-jms/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - remoting-jms - remoting-jms - pom - - - com.ossez - spring-remoting-modules - 1.0-SNAPSHOT - - - - remoting-jms-client - remoting-jms-server - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-client/pom.xml b/spring-remoting-modules/remoting-jms/remoting-jms-client/pom.xml deleted file mode 100644 index 4ef18620bb..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-client/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - remoting-jms-client - remoting-jms-client - - - com.ossez - remoting-jms - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-activemq - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - com.ossez - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/java/com/baeldung/client/JmsClient.java b/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/java/com/baeldung/client/JmsClient.java deleted file mode 100644 index 0c5d728f07..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/java/com/baeldung/client/JmsClient.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.apache.activemq.command.ActiveMQQueue; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.jms.remoting.JmsInvokerProxyFactoryBean; - -import javax.jms.ConnectionFactory; -import javax.jms.Queue; - -@SpringBootApplication -public class JmsClient { - - @Bean Queue queue() { - return new ActiveMQQueue("remotingQueue"); -} - - @Bean FactoryBean invoker(ConnectionFactory factory, Queue queue) { - JmsInvokerProxyFactoryBean factoryBean = new JmsInvokerProxyFactoryBean(); - factoryBean.setConnectionFactory(factory); - factoryBean.setServiceInterface(CabBookingService.class); - factoryBean.setQueue(queue); - return factoryBean; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(JmsClient.class, args).getBean(CabBookingService.class); - System.out.println("here"); - Booking bookingOutcome = service.bookRide("13 Seagate Blvd, Key Largo, FL 33037"); - System.out.println("there"); - System.out.println(bookingOutcome); - } - -} diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/application.properties b/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/application.properties deleted file mode 100644 index 738b030a59..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/application.properties +++ /dev/null @@ -1,10 +0,0 @@ -spring.activemq.broker-url=tcp://127.0.0.1:61616 -spring.activemq.packages.trusted=org.springframework.remoting.support,java.lang,com.baeldung.api - -# Logging -logging.pattern.console=%d{mm:ss.SSS} %-5p [%-31t] [%-54logger{0}] %marker%m%ex{full} - %logger - %F:%L%n -logging.level.root=WARN -logging.level.org.apache.activemq=DEBUG -logging.level.org.springframework.jms=DEBUG -logging.level.org.springframework=WARN - diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/logback.xml b/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-jms/remoting-jms-client/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 95721b6eaa..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-client/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.client.JmsClient; - -@SpringBootTest(classes = JmsClient.class) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/pom.xml b/spring-remoting-modules/remoting-jms/remoting-jms-server/pom.xml deleted file mode 100644 index 697c0612e3..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - remoting-jms-server - remoting-jms-server - - - com.ossez - remoting-jms - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-activemq - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - com.ossez - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java b/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java deleted file mode 100644 index 55ec9c5733..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; - -import static java.lang.Math.random; -import static java.util.UUID.randomUUID; - -public class CabBookingServiceImpl implements CabBookingService { - - @Override public Booking bookRide(String pickUpLocation) throws BookingException { - if (random() < 0.3) throw new BookingException("Cab unavailable"); - return new Booking(randomUUID().toString()); - } -} diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/JmsServer.java b/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/JmsServer.java deleted file mode 100644 index 8572718042..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/java/com/baeldung/server/JmsServer.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.CabBookingService; -import org.apache.activemq.command.ActiveMQQueue; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.jms.listener.SimpleMessageListenerContainer; -import org.springframework.jms.remoting.JmsInvokerServiceExporter; - -import javax.jms.ConnectionFactory; -import javax.jms.Queue; - -@SpringBootApplication public class JmsServer { - - /* - This server needs to be connected to an ActiveMQ server. - To quickly spin up an ActiveMQ server, you can use Docker. - - docker run -p 61616:61616 -p 8161:8161 rmohr/activemq:5.14.3 - */ - - @Bean CabBookingService bookingService() { - return new CabBookingServiceImpl(); - } - - @Bean Queue queue() { - return new ActiveMQQueue("remotingQueue"); -} - - @Bean JmsInvokerServiceExporter exporter(CabBookingService implementation) { - JmsInvokerServiceExporter exporter = new JmsInvokerServiceExporter(); - exporter.setServiceInterface(CabBookingService.class); - exporter.setService(implementation); - return exporter; - } - - @Bean SimpleMessageListenerContainer listener(ConnectionFactory factory, JmsInvokerServiceExporter exporter) { - SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); - container.setConnectionFactory(factory); - container.setDestinationName("remotingQueue"); - container.setConcurrentConsumers(1); - container.setMessageListener(exporter); - return container; - } - - public static void main(String[] args) { - SpringApplication.run(JmsServer.class, args); - } - -} diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/application.properties b/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/application.properties deleted file mode 100644 index 738b030a59..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/application.properties +++ /dev/null @@ -1,10 +0,0 @@ -spring.activemq.broker-url=tcp://127.0.0.1:61616 -spring.activemq.packages.trusted=org.springframework.remoting.support,java.lang,com.baeldung.api - -# Logging -logging.pattern.console=%d{mm:ss.SSS} %-5p [%-31t] [%-54logger{0}] %marker%m%ex{full} - %logger - %F:%L%n -logging.level.root=WARN -logging.level.org.apache.activemq=DEBUG -logging.level.org.springframework.jms=DEBUG -logging.level.org.springframework=WARN - diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/logback.xml b/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-remoting-modules/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java deleted file mode 100644 index 4904873be2..0000000000 --- a/spring-remoting-modules/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.server.JmsServer; - -/** - * This Live Test requires: - * * the `com.baeldung:remoting-http-api:jar:1.0-SNAPSHOT` artifact accessible. For that we can run `mvn clean install` in the 'spring-remoting/remoting-http/remoting-http-api' module. - * * an ActiveMQ instance running (e.g. `docker run -p 61616:61616 -p 8161:8161 --name bael-activemq rmohr/activemq`) - * - */ -@SpringBootTest(classes = JmsServer.class) -@RunWith(SpringRunner.class) -public class SpringContextLiveTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-rmi/README.md b/spring-remoting-modules/remoting-rmi/README.md deleted file mode 100644 index 082b5c37ed..0000000000 --- a/spring-remoting-modules/remoting-rmi/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Remoting RMI - -This module contains articles about Spring Remoting with Remote Method Invocation (RMI) - -### Relevant Articles: - -- [Spring Remoting with RMI](https://www.baeldung.com/spring-remoting-rmi) \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/pom.xml b/spring-remoting-modules/remoting-rmi/pom.xml deleted file mode 100644 index aece04a64f..0000000000 --- a/spring-remoting-modules/remoting-rmi/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - remoting-rmi - remoting-rmi - pom - - - com.baeldung - spring-remoting-modules - 1.0-SNAPSHOT - - - - remoting-rmi-server - remoting-rmi-client - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/pom.xml b/spring-remoting-modules/remoting-rmi/remoting-rmi-client/pom.xml deleted file mode 100644 index 91630a88e9..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - remoting-rmi-client - remoting-rmi-client - - - com.baeldung - remoting-rmi - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-activemq - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - com.baeldung - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java b/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java deleted file mode 100644 index a568b749f9..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.client; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.remoting.rmi.RmiProxyFactoryBean; - -@SpringBootApplication public class RmiClient { - - @Bean RmiProxyFactoryBean service() { - RmiProxyFactoryBean rmiProxyFactory = new RmiProxyFactoryBean(); - rmiProxyFactory.setServiceUrl("rmi://localhost:1099/CabBookingService"); - rmiProxyFactory.setServiceInterface(CabBookingService.class); - return rmiProxyFactory; - } - - public static void main(String[] args) throws BookingException { - CabBookingService service = SpringApplication.run(RmiClient.class, args).getBean(CabBookingService.class); - Booking bookingOutcome = service.bookRide("13 Seagate Blvd, Key Largo, FL 33037"); - System.out.println(bookingOutcome); - } - -} diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/resources/logback.xml b/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java deleted file mode 100644 index 73f7592dcc..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.client.RmiClient; - -/** - * This Live Test requires: - * * the `com.baeldung:remoting-http-api:jar:1.0-SNAPSHOT` artifact accessible. For that we can run `mvn clean install` in the 'spring-remoting/remoting-http/remoting-http-api' module. - * * the 'spring-remoting\remoting-rmi\remoting-rmi-server' service running - * - */ -@SpringBootTest(classes = RmiClient.class) -@RunWith(SpringRunner.class) -public class SpringContextLiveTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/pom.xml b/spring-remoting-modules/remoting-rmi/remoting-rmi-server/pom.xml deleted file mode 100644 index ecf57018ec..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - 4.0.0 - remoting-rmi-server - remoting-rmi-server - - - com.baeldung - remoting-rmi - 1.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - com.baeldung - remoting-http-api - ${project.version} - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java b/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java deleted file mode 100644 index 55ec9c5733..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.Booking; -import com.baeldung.api.BookingException; -import com.baeldung.api.CabBookingService; - -import static java.lang.Math.random; -import static java.util.UUID.randomUUID; - -public class CabBookingServiceImpl implements CabBookingService { - - @Override public Booking bookRide(String pickUpLocation) throws BookingException { - if (random() < 0.3) throw new BookingException("Cab unavailable"); - return new Booking(randomUUID().toString()); - } -} diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java b/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java deleted file mode 100644 index 7778c65e85..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.server; - -import com.baeldung.api.CabBookingService; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.remoting.rmi.RmiServiceExporter; - -@SpringBootApplication public class RmiServer { - - @Bean CabBookingService bookingService() { - return new CabBookingServiceImpl(); - } - - @Bean RmiServiceExporter exporter(CabBookingService implementation) { - - // Expose a service via RMI. Remote obect URL is: - // rmi://:/ - // 1099 is the default port - - Class serviceInterface = CabBookingService.class; - RmiServiceExporter exporter = new RmiServiceExporter(); - exporter.setServiceInterface(serviceInterface); - exporter.setService(implementation); - exporter.setServiceName(serviceInterface.getSimpleName()); - exporter.setRegistryPort(1099); - return exporter; - } - - public static void main(String[] args) { - SpringApplication.run(RmiServer.class, args); - } - -} diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/resources/logback.xml b/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/test/java/org/baeldung/SpringContextTest.java b/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 6cae1b66fc..0000000000 --- a/spring-remoting-modules/remoting-rmi/remoting-rmi-server/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import com.baeldung.server.RmiServer; - -@SpringBootTest(classes = RmiServer.class) -@RunWith(SpringRunner.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-rest-full/.gitignore b/spring-rest-full/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/spring-rest-full/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/spring-rest-full/README.md b/spring-rest-full/README.md deleted file mode 100644 index a0ba8df27d..0000000000 --- a/spring-rest-full/README.md +++ /dev/null @@ -1,37 +0,0 @@ -## Spring REST Full - -This module contains articles about REST APIs with Spring - -### Courses - -The "REST With Spring" Classes: http://bit.ly/restwithspring - -The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - -### Relevant Articles: -- [Integration Testing with the Maven Cargo plugin](https://www.baeldung.com/integration-testing-with-the-maven-cargo-plugin) -- [Project Configuration with Spring](https://www.baeldung.com/project-configuration-with-spring) -- [Metrics for your Spring REST API](https://www.baeldung.com/spring-rest-api-metrics) -- [Spring Security Expressions - hasRole Example](https://www.baeldung.com/spring-security-expressions-basic) - - -### Build the Project -``` -mvn clean install -``` - - -### Set up MySQL -``` -mysql -u root -p -> CREATE USER 'tutorialuser'@'localhost' IDENTIFIED BY 'tutorialmy5ql'; -> GRANT ALL PRIVILEGES ON *.* TO 'tutorialuser'@'localhost'; -> FLUSH PRIVILEGES; -``` - - -### Use the REST Service - -``` -curl http://localhost:8082/spring-rest-full/auth/foos -``` diff --git a/spring-rest-full/pom.xml b/spring-rest-full/pom.xml deleted file mode 100644 index 5bc3a70ed5..0000000000 --- a/spring-rest-full/pom.xml +++ /dev/null @@ -1,297 +0,0 @@ - - 4.0.0 - com.baeldung - spring-rest-full - 0.1-SNAPSHOT - spring-rest-full - war - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.aspectj - aspectjweaver - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - - - - org.springframework - spring-core - - - commons-logging - commons-logging - - - - - org.springframework - spring-context - - - org.springframework - spring-jdbc - - - org.springframework - spring-beans - - - org.springframework - spring-aop - - - org.springframework - spring-tx - - - org.springframework - spring-expression - - - org.springframework - spring-web - - - org.springframework - spring-webmvc - - - org.springframework.data - spring-data-commons - - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - org.apache.httpcomponents - httpclient - - - commons-logging - commons-logging - - - - - org.apache.httpcomponents - httpcore - - - - - - org.springframework - spring-orm - - - org.springframework.data - spring-data-jpa - - - org.hibernate - hibernate-entitymanager - - - xml-apis - xml-apis - - - org.javassist - javassist - ${javassist.version} - - - mysql - mysql-connector-java - runtime - - - com.h2database - h2 - - - - - - javax.servlet - javax.servlet-api - provided - - - javax.servlet - jstl - runtime - - - - - com.fasterxml.jackson.core - jackson-databind - - - - - - com.google.guava - guava - ${guava.version} - - - - - - org.springframework - spring-test - test - - - - - - - - - org.hamcrest - hamcrest-library - test - - - - org.mockito - mockito-core - test - - - - - - spring-rest-full - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-war-plugin - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - - - com.mysema.maven - apt-maven-plugin - ${apt-maven-plugin.version} - - - - process - - - target/generated-sources/java - com.querydsl.apt.jpa.JPAAnnotationProcessor - - - - - - - - - - live - - - - org.codehaus.cargo - cargo-maven2-plugin - - false - - - - start-server - pre-integration-test - - start - - - - stop-server - post-integration-test - - stop - - - - - - - - - - - - 1.4.9 - - - 19.0 - 3.25.0-GA - - - 1.6.1 - 1.1.3 - - - \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/IOperations.java b/spring-rest-full/src/main/java/org/baeldung/persistence/IOperations.java deleted file mode 100644 index 0b617bf7ab..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/IOperations.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.persistence; - -import java.io.Serializable; -import java.util.List; - -public interface IOperations { - - // read - one - - T findOne(final long id); - - // read - all - - List findAll(); - - // write - - T create(final T entity); - - T update(final T entity); - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/spring-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java deleted file mode 100644 index 230abd0d5f..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/dao/IFooDao.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.Foo; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -public interface IFooDao extends JpaRepository { - - @Query("SELECT f FROM Foo f WHERE LOWER(f.name) = LOWER(:name)") - Foo retrieveByName(@Param("name") String name); -} diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/model/Foo.java b/spring-rest-full/src/main/java/org/baeldung/persistence/model/Foo.java deleted file mode 100644 index 8e1dee33e8..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/model/Foo.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.baeldung.persistence.model; - -import java.io.Serializable; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; - -@Entity -public class Foo implements Serializable { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; - - @Column(nullable = false) - private String name; - - public Foo() { - super(); - } - - public Foo(final String name) { - super(); - - this.name = name; - } - - // API - - public long getId() { - return id; - } - - public void setId(final long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Foo other = (Foo) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Foo [name=").append(name).append("]"); - return builder.toString(); - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/model/User.java b/spring-rest-full/src/main/java/org/baeldung/persistence/model/User.java deleted file mode 100644 index 670d4a2e74..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/model/User.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; - -@Entity -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String firstName; - - private String lastName; - - private String email; - - private int age; - - public User() { - super(); - } - - public Long getId() { - return id; - } - - public void setId(final Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(final String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(final String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(final String username) { - email = username; - } - - public int getAge() { - return age; - } - - public void setAge(final int age) { - this.age = age; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((email == null) ? 0 : email.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final User user = (User) obj; - return email.equals(user.email); - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]"); - return builder.toString(); - } - -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java b/spring-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java deleted file mode 100644 index 60d607b9ef..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/service/IFooService.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.baeldung.persistence.service; - -import org.baeldung.persistence.IOperations; -import org.baeldung.persistence.model.Foo; - -public interface IFooService extends IOperations { - - Foo retrieveByName(String name); - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java b/spring-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java deleted file mode 100644 index ceefbbe0e3..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/service/common/AbstractService.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.baeldung.persistence.service.common; - -import java.io.Serializable; -import java.util.List; - -import org.baeldung.persistence.IOperations; -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.transaction.annotation.Transactional; - -import com.google.common.collect.Lists; - -@Transactional -public abstract class AbstractService implements IOperations { - - // read - one - - @Override - @Transactional(readOnly = true) - public T findOne(final long id) { - return getDao().findById(id).orElse(null); - } - - // read - all - - @Override - @Transactional(readOnly = true) - public List findAll() { - return Lists.newArrayList(getDao().findAll()); - } - - // write - - @Override - public T create(final T entity) { - return getDao().save(entity); - } - - @Override - public T update(final T entity) { - return getDao().save(entity); - } - - protected abstract PagingAndSortingRepository getDao(); - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java b/spring-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java deleted file mode 100644 index 32fe1bd7e0..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/persistence/service/impl/FooService.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.baeldung.persistence.service.impl; - -import org.baeldung.persistence.dao.IFooDao; -import org.baeldung.persistence.model.Foo; -import org.baeldung.persistence.service.IFooService; -import org.baeldung.persistence.service.common.AbstractService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class FooService extends AbstractService implements IFooService { - - @Autowired - private IFooDao dao; - - public FooService() { - super(); - } - - // API - - @Override - protected PagingAndSortingRepository getDao() { - return dao; - } - - // custom methods - - @Override - public Foo retrieveByName(final String name) { - return dao.retrieveByName(name); - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/spring/Application.java b/spring-rest-full/src/main/java/org/baeldung/spring/Application.java deleted file mode 100644 index ca72a4ef56..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/spring/Application.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.baeldung.spring; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.web.context.request.RequestContextListener; - -/** - * Main Application Class - uses Spring Boot. Just run this as a normal Java - * class to run up a Jetty Server (on http://localhost:8082/spring-rest-full) - * - */ -@EnableScheduling -@EnableAutoConfiguration -@ComponentScan("org.baeldung") -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - @Override - public void onStartup(ServletContext sc) throws ServletException { - // Manages the lifecycle of the root application context - sc.addListener(new RequestContextListener()); - } - - public static void main(final String[] args) { - SpringApplication.run(Application.class, args); - } - -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java b/spring-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java deleted file mode 100644 index f3a87b189e..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.baeldung.spring; - -import java.util.Properties; - -import javax.sql.DataSource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -import com.google.common.base.Preconditions; - -@Configuration -@EnableTransactionManagement -@PropertySource({ "classpath:persistence-${envTarget:h2}.properties" }) -@ComponentScan({ "org.baeldung.persistence" }) -// @ImportResource("classpath*:springDataPersistenceConfig.xml") -@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") -public class PersistenceConfig { - - @Autowired - private Environment env; - - public PersistenceConfig() { - super(); - } - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { - final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); - - final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - // vendorAdapter.set - em.setJpaVendorAdapter(vendorAdapter); - em.setJpaProperties(additionalProperties()); - - return em; - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); - dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); - dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); - dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); - - return dataSource; - } - - @Bean - public PlatformTransactionManager transactionManager() { - final JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); - - return transactionManager; - } - - @Bean - public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { - return new PersistenceExceptionTranslationPostProcessor(); - } - - final Properties additionalProperties() { - final Properties hibernateProperties = new Properties(); - hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); - hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); - // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); - return hibernateProperties; - } - -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/spring/WebConfig.java b/spring-rest-full/src/main/java/org/baeldung/spring/WebConfig.java deleted file mode 100644 index a0db08d93d..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/spring/WebConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.baeldung.spring; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.ViewResolver; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.view.InternalResourceViewResolver; - -@Configuration -@ComponentScan("org.baeldung.web") -@EnableWebMvc -public class WebConfig implements WebMvcConfigurer { - - public WebConfig() { - super(); - } - - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); - viewResolver.setPrefix("/WEB-INF/view/"); - viewResolver.setSuffix(".jsp"); - return viewResolver; - } - - // API - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - registry.addViewController("/graph.html"); - registry.addViewController("/homepage.html"); - } - -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/web/controller/FooController.java b/spring-rest-full/src/main/java/org/baeldung/web/controller/FooController.java deleted file mode 100644 index caaf422410..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/controller/FooController.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.baeldung.web.controller; - -import java.util.List; - -import javax.servlet.http.HttpServletResponse; - -import org.baeldung.persistence.model.Foo; -import org.baeldung.persistence.service.IFooService; -import org.baeldung.web.util.RestPreconditions; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -import com.google.common.base.Preconditions; - -@Controller -@RequestMapping(value = "/auth/foos") -public class FooController { - - @Autowired - private IFooService service; - - public FooController() { - super(); - } - - // API - - @RequestMapping(method = RequestMethod.GET, value = "/count") - @ResponseBody - @ResponseStatus(value = HttpStatus.OK) - public long count() { - return 2l; - } - - // read - one - - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - @ResponseBody - public Foo findById(@PathVariable("id") final Long id, final HttpServletResponse response) { - final Foo resourceById = RestPreconditions.checkFound(service.findOne(id)); - - return resourceById; - } - - // read - all - - @RequestMapping(method = RequestMethod.GET) - @ResponseBody - public List findAll() { - return service.findAll(); - } - - // write - - @RequestMapping(method = RequestMethod.POST) - @ResponseStatus(HttpStatus.CREATED) - @ResponseBody - public Foo create(@RequestBody final Foo resource, final HttpServletResponse response) { - Preconditions.checkNotNull(resource); - final Foo foo = service.create(resource); - - return foo; - } - - @RequestMapping(method = RequestMethod.HEAD) - @ResponseStatus(HttpStatus.OK) - public void head(final HttpServletResponse resp) { - resp.setContentType(MediaType.APPLICATION_JSON_VALUE); - resp.setHeader("bar", "baz"); - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java b/spring-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java deleted file mode 100644 index 9c4d14cae3..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.web.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -@RequestMapping(value = "/") -public class HomeController { - - public String index() { - return "homepage"; - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/controller/RootController.java b/spring-rest-full/src/main/java/org/baeldung/web/controller/RootController.java deleted file mode 100644 index a66f3d1893..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/controller/RootController.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.baeldung.web.controller; - -import java.util.Map; - -import org.baeldung.web.metric.IActuatorMetricService; -import org.baeldung.web.metric.IMetricService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping(value = "/auth/") -public class RootController { - - @Autowired - private IMetricService metricService; - - @Autowired - private IActuatorMetricService actMetricService; - - public RootController() { - super(); - } - - // API - - @RequestMapping(value = "/metric", method = RequestMethod.GET) - @ResponseBody - public Map getMetric() { - return metricService.getFullMetric(); - } - - @RequestMapping(value = "/status-metric", method = RequestMethod.GET) - @ResponseBody - public Map getStatusMetric() { - return metricService.getStatusMetric(); - } - - @RequestMapping(value = "/metric-graph", method = RequestMethod.GET) - @ResponseBody - public Object[][] drawMetric() { - final Object[][] result = metricService.getGraphData(); - for (int i = 1; i < result[0].length; i++) { - result[0][i] = result[0][i].toString(); - } - return result; - } - - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/exception/MyResourceNotFoundException.java b/spring-rest-full/src/main/java/org/baeldung/web/exception/MyResourceNotFoundException.java deleted file mode 100644 index 14b61f9832..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/exception/MyResourceNotFoundException.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.web.exception; - -public final class MyResourceNotFoundException extends RuntimeException { - - public MyResourceNotFoundException() { - super(); - } - - public MyResourceNotFoundException(final String message, final Throwable cause) { - super(message, cause); - } - - public MyResourceNotFoundException(final String message) { - super(message); - } - - public MyResourceNotFoundException(final Throwable cause) { - super(cause); - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java deleted file mode 100644 index 4dcec17b9e..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.baeldung.web.metric; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import io.micrometer.core.instrument.Counter; -import io.micrometer.core.instrument.Meter; -import io.micrometer.core.instrument.MeterRegistry; - -@Service -public class ActuatorMetricService implements IActuatorMetricService { - - @Autowired - private MeterRegistry publicMetrics; - - private final List> statusMetricsByMinute; - private final List statusList; - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - public ActuatorMetricService() { - super(); - statusMetricsByMinute = new ArrayList>(); - statusList = new ArrayList(); - } - - @Override - public Object[][] getGraphData() { - final Date current = new Date(); - final int colCount = statusList.size() + 1; - final int rowCount = statusMetricsByMinute.size() + 1; - final Object[][] result = new Object[rowCount][colCount]; - result[0][0] = "Time"; - int j = 1; - - for (final String status : statusList) { - result[0][j] = status; - j++; - } - - for (int i = 1; i < rowCount; i++) { - result[i][0] = dateFormat.format(new Date(current.getTime() - (60000 * (rowCount - i)))); - } - - List minuteOfStatuses; - List last = new ArrayList(); - - for (int i = 1; i < rowCount; i++) { - minuteOfStatuses = statusMetricsByMinute.get(i - 1); - for (j = 1; j <= minuteOfStatuses.size(); j++) { - result[i][j] = minuteOfStatuses.get(j - 1) - (last.size() >= j ? last.get(j - 1) : 0); - } - while (j < colCount) { - result[i][j] = 0; - j++; - } - last = minuteOfStatuses; - } - return result; - } - - // Non - API - - @Scheduled(fixedDelay = 60000) - private void exportMetrics() { - final ArrayList lastMinuteStatuses = initializeStatuses(statusList.size()); - - for (final Meter counterMetric : publicMetrics.getMeters()) { - updateMetrics(counterMetric, lastMinuteStatuses); - } - - statusMetricsByMinute.add(lastMinuteStatuses); - } - - private ArrayList initializeStatuses(final int size) { - final ArrayList counterList = new ArrayList(); - for (int i = 0; i < size; i++) { - counterList.add(0); - } - return counterList; - } - - private void updateMetrics(final Meter counterMetric, final ArrayList statusCount) { - String status = ""; - int index = -1; - int oldCount = 0; - - if (counterMetric.getId().getName().contains("counter.status.")) { - status = counterMetric.getId().getName().substring(15, 18); // example 404, 200 - appendStatusIfNotExist(status, statusCount); - index = statusList.indexOf(status); - oldCount = statusCount.get(index) == null ? 0 : statusCount.get(index); - statusCount.set(index, (int)((Counter) counterMetric).count() + oldCount); - } - } - - private void appendStatusIfNotExist(final String status, final ArrayList statusCount) { - if (!statusList.contains(status)) { - statusList.add(status); - statusCount.add(0); - } - } - - // -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java deleted file mode 100644 index cf30686e52..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.baeldung.web.metric; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -import io.micrometer.core.instrument.Counter; -import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.search.Search; - -@Service -public class CustomActuatorMetricService implements ICustomActuatorMetricService { - - @Autowired - private MeterRegistry registry; - - private final List> statusMetricsByMinute; - private final List statusList; - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - public CustomActuatorMetricService() { - super(); - statusMetricsByMinute = new ArrayList>(); - statusList = new ArrayList(); - } - - // API - - @Override - public void increaseCount(final int status) { - String counterName = "counter.status." + status; - registry.counter(counterName).increment(1); - if (!statusList.contains(counterName)) { - statusList.add(counterName); - } - } - - @Override - public Object[][] getGraphData() { - final Date current = new Date(); - final int colCount = statusList.size() + 1; - final int rowCount = statusMetricsByMinute.size() + 1; - final Object[][] result = new Object[rowCount][colCount]; - result[0][0] = "Time"; - - int j = 1; - for (final String status : statusList) { - result[0][j] = status; - j++; - } - - for (int i = 1; i < rowCount; i++) { - result[i][0] = dateFormat.format(new Date(current.getTime() - (60000 * (rowCount - i)))); - } - - List minuteOfStatuses; - for (int i = 1; i < rowCount; i++) { - minuteOfStatuses = statusMetricsByMinute.get(i - 1); - for (j = 1; j <= minuteOfStatuses.size(); j++) { - result[i][j] = minuteOfStatuses.get(j - 1); - } - while (j < colCount) { - result[i][j] = 0; - j++; - } - } - return result; - } - - // Non - API - - @Scheduled(fixedDelay = 60000) - private void exportMetrics() { - final ArrayList statusCount = new ArrayList(); - for (final String status : statusList) { - Search search = registry.find(status); - if (search != null) { - Counter counter = search.counter(); - statusCount.add(counter != null ? ((int) counter.count()) : 0); - registry.remove(counter); - } else { - statusCount.add(0); - } - } - statusMetricsByMinute.add(statusCount); - } -} \ No newline at end of file diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/IActuatorMetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/IActuatorMetricService.java deleted file mode 100644 index 191d347070..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/IActuatorMetricService.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.baeldung.web.metric; - -public interface IActuatorMetricService { - Object[][] getGraphData(); -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/ICustomActuatorMetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/ICustomActuatorMetricService.java deleted file mode 100644 index 19ab7164ac..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/ICustomActuatorMetricService.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.baeldung.web.metric; - -public interface ICustomActuatorMetricService { - - void increaseCount(final int status); - - Object[][] getGraphData(); -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/IMetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/IMetricService.java deleted file mode 100644 index 902d6ac811..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/IMetricService.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.web.metric; - -import java.util.Map; - -public interface IMetricService { - - void increaseCount(final String request, final int status); - - Map getFullMetric(); - - Map getStatusMetric(); - - Object[][] getGraphData(); -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricFilter.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricFilter.java deleted file mode 100644 index 6c2fb0cb39..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricFilter.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.baeldung.web.metric; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.context.support.WebApplicationContextUtils; - -@Component -public class MetricFilter implements Filter { - - @Autowired - private IMetricService metricService; - - @Autowired - private ICustomActuatorMetricService actMetricService; - - @Override - public void init(final FilterConfig config) throws ServletException { - if (metricService == null || actMetricService == null) { - metricService = (IMetricService) WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext()).getBean("metricService"); - actMetricService = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext()).getBean(CustomActuatorMetricService.class); - } - } - - @Override - public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws java.io.IOException, ServletException { - final HttpServletRequest httpRequest = ((HttpServletRequest) request); - final String req = httpRequest.getMethod() + " " + httpRequest.getRequestURI(); - - chain.doFilter(request, response); - - final int status = ((HttpServletResponse) response).getStatus(); - metricService.increaseCount(req, status); - actMetricService.increaseCount(status); - } - - @Override - public void destroy() { - - } -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricService.java b/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricService.java deleted file mode 100644 index 086068ad8f..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/metric/MetricService.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.baeldung.web.metric; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import org.springframework.stereotype.Service; - -@Service -public class MetricService implements IMetricService { - - private ConcurrentMap> metricMap; - private ConcurrentMap statusMetric; - private ConcurrentMap> timeMap; - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - public MetricService() { - super(); - metricMap = new ConcurrentHashMap>(); - statusMetric = new ConcurrentHashMap(); - timeMap = new ConcurrentHashMap>(); - } - - // API - - @Override - public void increaseCount(final String request, final int status) { - increaseMainMetric(request, status); - increaseStatusMetric(status); - updateTimeMap(status); - } - - @Override - public Map getFullMetric() { - return metricMap; - } - - @Override - public Map getStatusMetric() { - return statusMetric; - } - - @Override - public Object[][] getGraphData() { - final int colCount = statusMetric.keySet().size() + 1; - final Set allStatus = statusMetric.keySet(); - final int rowCount = timeMap.keySet().size() + 1; - - final Object[][] result = new Object[rowCount][colCount]; - result[0][0] = "Time"; - - int j = 1; - for (final int status : allStatus) { - result[0][j] = status; - j++; - } - int i = 1; - ConcurrentMap tempMap; - for (final Entry> entry : timeMap.entrySet()) { - result[i][0] = entry.getKey(); - tempMap = entry.getValue(); - for (j = 1; j < colCount; j++) { - result[i][j] = tempMap.get(result[0][j]); - if (result[i][j] == null) { - result[i][j] = 0; - } - } - i++; - } - - return result; - } - - // NON-API - - private void increaseMainMetric(final String request, final int status) { - ConcurrentHashMap statusMap = metricMap.get(request); - if (statusMap == null) { - statusMap = new ConcurrentHashMap(); - } - - Integer count = statusMap.get(status); - if (count == null) { - count = 1; - } else { - count++; - } - statusMap.put(status, count); - metricMap.put(request, statusMap); - } - - private void increaseStatusMetric(final int status) { - final Integer statusCount = statusMetric.get(status); - if (statusCount == null) { - statusMetric.put(status, 1); - } else { - statusMetric.put(status, statusCount + 1); - } - } - - private void updateTimeMap(final int status) { - final String time = dateFormat.format(new Date()); - ConcurrentHashMap statusMap = timeMap.get(time); - if (statusMap == null) { - statusMap = new ConcurrentHashMap(); - } - - Integer count = statusMap.get(status); - if (count == null) { - count = 1; - } else { - count++; - } - statusMap.put(status, count); - timeMap.put(time, statusMap); - } - -} diff --git a/spring-rest-full/src/main/java/org/baeldung/web/util/RestPreconditions.java b/spring-rest-full/src/main/java/org/baeldung/web/util/RestPreconditions.java deleted file mode 100644 index 4f2dedcfa0..0000000000 --- a/spring-rest-full/src/main/java/org/baeldung/web/util/RestPreconditions.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.baeldung.web.util; - -import org.springframework.http.HttpStatus; - -import org.baeldung.web.exception.MyResourceNotFoundException; - -/** - * Simple static methods to be called at the start of your own methods to verify correct arguments and state. If the Precondition fails, an {@link HttpStatus} code is thrown - */ -public final class RestPreconditions { - - private RestPreconditions() { - throw new AssertionError(); - } - - // API - - /** - * Check if some value was found, otherwise throw exception. - * - * @param expression - * has value true if found, otherwise false - * @throws MyResourceNotFoundException - * if expression is false, means value not found. - */ - public static void checkFound(final boolean expression) { - if (!expression) { - throw new MyResourceNotFoundException(); - } - } - - /** - * Check if some value was found, otherwise throw exception. - * - * @param resource - * has value not null to be returned, otherwise throw exception - * @throws MyResourceNotFoundException - * if resource is null, means value not found. - */ - public static T checkFound(final T resource) { - if (resource == null) { - throw new MyResourceNotFoundException(); - } - - return resource; - } - -} diff --git a/spring-rest-full/src/main/resources/application.properties b/spring-rest-full/src/main/resources/application.properties deleted file mode 100644 index 52d93b4cff..0000000000 --- a/spring-rest-full/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port=8082 -server.servlet.context-path=/spring-rest-full -endpoints.metrics.enabled=true \ No newline at end of file diff --git a/spring-rest-full/src/main/resources/logback.xml b/spring-rest-full/src/main/resources/logback.xml deleted file mode 100644 index 56af2d397e..0000000000 --- a/spring-rest-full/src/main/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-rest-full/src/main/resources/persistence-h2.properties b/spring-rest-full/src/main/resources/persistence-h2.properties deleted file mode 100644 index 839a466533..0000000000 --- a/spring-rest-full/src/main/resources/persistence-h2.properties +++ /dev/null @@ -1,22 +0,0 @@ -## jdbc.X -#jdbc.driverClassName=com.mysql.jdbc.Driver -#jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_01?createDatabaseIfNotExist=true -#jdbc.user=tutorialuser -#jdbc.pass=tutorialmy5ql -# -## hibernate.X -#hibernate.dialect=org.hibernate.dialect.MySQL5Dialect -#hibernate.show_sql=false -#hibernate.hbm2ddl.auto=create-drop - - -# jdbc.X -jdbc.driverClassName=org.h2.Driver -jdbc.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE -jdbc.user=sa -jdbc.pass= - -# hibernate.X -hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.show_sql=false -hibernate.hbm2ddl.auto=create-drop diff --git a/spring-rest-full/src/main/resources/persistence-mysql.properties b/spring-rest-full/src/main/resources/persistence-mysql.properties deleted file mode 100644 index 8263b0d9ac..0000000000 --- a/spring-rest-full/src/main/resources/persistence-mysql.properties +++ /dev/null @@ -1,10 +0,0 @@ -# jdbc.X -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_01?createDatabaseIfNotExist=true -jdbc.user=tutorialuser -jdbc.pass=tutorialmy5ql - -# hibernate.X -hibernate.dialect=org.hibernate.dialect.MySQL5Dialect -hibernate.show_sql=false -hibernate.hbm2ddl.auto=create-drop diff --git a/spring-rest-full/src/main/resources/springDataPersistenceConfig.xml b/spring-rest-full/src/main/resources/springDataPersistenceConfig.xml deleted file mode 100644 index d6d0ec6e47..0000000000 --- a/spring-rest-full/src/main/resources/springDataPersistenceConfig.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/spring-rest-full/src/main/webapp/WEB-INF/api-servlet.xml b/spring-rest-full/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4ba9642448..0000000000 --- a/spring-rest-full/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/spring-rest-full/src/main/webapp/WEB-INF/view/graph.jsp b/spring-rest-full/src/main/webapp/WEB-INF/view/graph.jsp deleted file mode 100644 index e1d5fdc987..0000000000 --- a/spring-rest-full/src/main/webapp/WEB-INF/view/graph.jsp +++ /dev/null @@ -1,43 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> - - -Metric Graph - - - - - -

- - \ No newline at end of file diff --git a/spring-rest-full/src/main/webapp/WEB-INF/view/homepage.jsp b/spring-rest-full/src/main/webapp/WEB-INF/view/homepage.jsp deleted file mode 100644 index 7cc14b5dcd..0000000000 --- a/spring-rest-full/src/main/webapp/WEB-INF/view/homepage.jsp +++ /dev/null @@ -1,7 +0,0 @@ - - - - -

This is the body of the sample view

- - \ No newline at end of file diff --git a/spring-rest-full/src/main/webapp/WEB-INF/web.xml b/spring-rest-full/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 5f90c3519f..0000000000 --- a/spring-rest-full/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - Spring REST Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.spring - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - metricFilter - org.baeldung.web.metric.MetricFilter - - - - metricFilter - /* - - - - index.html - - - \ No newline at end of file diff --git a/spring-rest-full/src/test/java/org/baeldung/Consts.java b/spring-rest-full/src/test/java/org/baeldung/Consts.java deleted file mode 100644 index e5f0be160f..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/Consts.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.baeldung; - -public interface Consts { - int APPLICATION_PORT = 8082; -} diff --git a/spring-rest-full/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-rest-full/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 35939c992f..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.spring.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-rest-full/src/test/java/org/baeldung/SpringContextTest.java b/spring-rest-full/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 8debddc40a..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.spring.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java b/spring-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java deleted file mode 100644 index fb0fd00bb5..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung.persistence; - -import org.baeldung.persistence.service.FooServicePersistenceIntegrationTest; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - // @formatter:off - - FooServicePersistenceIntegrationTest.class - -}) // -public class PersistenceTestSuite { - -} diff --git a/spring-rest-full/src/test/java/org/baeldung/persistence/service/AbstractServicePersistenceIntegrationTest.java b/spring-rest-full/src/test/java/org/baeldung/persistence/service/AbstractServicePersistenceIntegrationTest.java deleted file mode 100644 index 79889e0f9e..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/persistence/service/AbstractServicePersistenceIntegrationTest.java +++ /dev/null @@ -1,255 +0,0 @@ -package org.baeldung.persistence.service; - -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; - -import java.io.Serializable; -import java.util.List; - -import org.baeldung.persistence.IOperations; -import org.baeldung.persistence.model.Foo; -import org.baeldung.util.IDUtil; -import org.hamcrest.Matchers; -import org.junit.Ignore; -import org.junit.Test; -import org.springframework.dao.DataAccessException; - -public abstract class AbstractServicePersistenceIntegrationTest { - - // tests - - // find - one - - @Test - /**/public final void givenResourceDoesNotExist_whenResourceIsRetrieved_thenNoResourceIsReceived() { - // When - final Foo createdResource = getApi().findOne(IDUtil.randomPositiveLong()); - - // Then - assertNull(createdResource); - } - - @Test - public void givenResourceExists_whenResourceIsRetrieved_thenNoExceptions() { - final Foo existingResource = persistNewEntity(); - getApi().findOne(existingResource.getId()); - } - - @Test - public void givenResourceDoesNotExist_whenResourceIsRetrieved_thenNoExceptions() { - getApi().findOne(IDUtil.randomPositiveLong()); - } - - @Test - public void givenResourceExists_whenResourceIsRetrieved_thenTheResultIsNotNull() { - final Foo existingResource = persistNewEntity(); - final Foo retrievedResource = getApi().findOne(existingResource.getId()); - assertNotNull(retrievedResource); - } - - @Test - public void givenResourceExists_whenResourceIsRetrieved_thenResourceIsRetrievedCorrectly() { - final Foo existingResource = persistNewEntity(); - final Foo retrievedResource = getApi().findOne(existingResource.getId()); - assertEquals(existingResource, retrievedResource); - } - - // find - one - by name - - // find - all - - @Test - /**/public void whenAllResourcesAreRetrieved_thenNoExceptions() { - getApi().findAll(); - } - - @Test - /**/public void whenAllResourcesAreRetrieved_thenTheResultIsNotNull() { - final List resources = getApi().findAll(); - - assertNotNull(resources); - } - - @Test - /**/public void givenAtLeastOneResourceExists_whenAllResourcesAreRetrieved_thenRetrievedResourcesAreNotEmpty() { - persistNewEntity(); - - // When - final List allResources = getApi().findAll(); - - // Then - assertThat(allResources, not(Matchers. empty())); - } - - @Test - /**/public void givenAnResourceExists_whenAllResourcesAreRetrieved_thenTheExistingResourceIsIndeedAmongThem() { - final Foo existingResource = persistNewEntity(); - - final List resources = getApi().findAll(); - - assertThat(resources, hasItem(existingResource)); - } - - @Test - /**/public void whenAllResourcesAreRetrieved_thenResourcesHaveIds() { - persistNewEntity(); - - // When - final List allResources = getApi().findAll(); - - // Then - for (final Foo resource : allResources) { - assertNotNull(resource.getId()); - } - } - - // create - - @Test(expected = RuntimeException.class) - /**/public void whenNullResourceIsCreated_thenException() { - getApi().create(null); - } - - @Test - /**/public void whenResourceIsCreated_thenNoExceptions() { - persistNewEntity(); - } - - @Test - /**/public void whenResourceIsCreated_thenResourceIsRetrievable() { - final Foo existingResource = persistNewEntity(); - - assertNotNull(getApi().findOne(existingResource.getId())); - } - - @Test - /**/public void whenResourceIsCreated_thenSavedResourceIsEqualToOriginalResource() { - final Foo originalResource = createNewEntity(); - final Foo savedResource = getApi().create(originalResource); - - assertEquals(originalResource, savedResource); - } - - @Test(expected = RuntimeException.class) - public void whenResourceWithFailedConstraintsIsCreated_thenException() { - final Foo invalidResource = createNewEntity(); - invalidate(invalidResource); - - getApi().create(invalidResource); - } - - /** - * -- specific to the persistence engine - */ - @Test(expected = DataAccessException.class) - @Ignore("Hibernate simply ignores the id silently and still saved (tracking this)") - public void whenResourceWithIdIsCreated_thenDataAccessException() { - final Foo resourceWithId = createNewEntity(); - resourceWithId.setId(IDUtil.randomPositiveLong()); - - getApi().create(resourceWithId); - } - - // update - - @Test(expected = RuntimeException.class) - /**/public void whenNullResourceIsUpdated_thenException() { - getApi().update(null); - } - - @Test - /**/public void givenResourceExists_whenResourceIsUpdated_thenNoExceptions() { - // Given - final Foo existingResource = persistNewEntity(); - - // When - getApi().update(existingResource); - } - - /** - * - can also be the ConstraintViolationException which now occurs on the update operation will not be translated; as a consequence, it will be a TransactionSystemException - */ - @Test(expected = RuntimeException.class) - public void whenResourceIsUpdatedWithFailedConstraints_thenException() { - final Foo existingResource = persistNewEntity(); - invalidate(existingResource); - - getApi().update(existingResource); - } - - @Test - /**/public void givenResourceExists_whenResourceIsUpdated_thenUpdatesArePersisted() { - // Given - final Foo existingResource = persistNewEntity(); - - // When - change(existingResource); - getApi().update(existingResource); - - final Foo updatedResource = getApi().findOne(existingResource.getId()); - - // Then - assertEquals(existingResource, updatedResource); - } - - // delete - - // @Test(expected = RuntimeException.class) - // public void givenResourceDoesNotExists_whenResourceIsDeleted_thenException() { - // // When - // getApi().delete(IDUtil.randomPositiveLong()); - // } - // - // @Test(expected = RuntimeException.class) - // public void whenResourceIsDeletedByNegativeId_thenException() { - // // When - // getApi().delete(IDUtil.randomNegativeLong()); - // } - // - // @Test - // public void givenResourceExists_whenResourceIsDeleted_thenNoExceptions() { - // // Given - // final Foo existingResource = persistNewEntity(); - // - // // When - // getApi().delete(existingResource.getId()); - // } - // - // @Test - // /**/public final void givenResourceExists_whenResourceIsDeleted_thenResourceNoLongerExists() { - // // Given - // final Foo existingResource = persistNewEntity(); - // - // // When - // getApi().delete(existingResource.getId()); - // - // // Then - // assertNull(getApi().findOne(existingResource.getId())); - // } - - // template method - - protected Foo createNewEntity() { - return new Foo(randomAlphabetic(6)); - } - - protected abstract IOperations getApi(); - - private final void invalidate(final Foo entity) { - entity.setName(null); - } - - private final void change(final Foo entity) { - entity.setName(randomAlphabetic(6)); - } - - protected Foo persistNewEntity() { - return getApi().create(createNewEntity()); - } - -} diff --git a/spring-rest-full/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/spring-rest-full/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java deleted file mode 100644 index 089d2d13a2..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.baeldung.persistence.service; - -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import static org.junit.Assert.assertNotNull; - -import org.baeldung.persistence.IOperations; -import org.baeldung.persistence.model.Foo; -import org.baeldung.spring.PersistenceConfig; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.dao.InvalidDataAccessApiUsageException; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class FooServicePersistenceIntegrationTest extends AbstractServicePersistenceIntegrationTest { - - @Autowired - private IFooService service; - - // tests - - @Test - public final void whenContextIsBootstrapped_thenNoExceptions() { - // - } - - @Test - public final void whenEntityIsCreated_thenNoExceptions() { - service.create(new Foo(randomAlphabetic(6))); - } - - @Test(expected = DataIntegrityViolationException.class) - public final void whenInvalidEntityIsCreated_thenDataException() { - service.create(new Foo()); - } - - @Test(expected = DataIntegrityViolationException.class) - public final void whenEntityWithLongNameIsCreated_thenDataException() { - service.create(new Foo(randomAlphabetic(2048))); - } - - // custom Query method - - @Test - public final void givenUsingCustomQuery_whenRetrievingEntity_thenFound() { - final String name = randomAlphabetic(6); - service.create(new Foo(name)); - - final Foo retrievedByName = service.retrieveByName(name); - assertNotNull(retrievedByName); - } - - // work in progress - - @Test(expected = InvalidDataAccessApiUsageException.class) - @Ignore("Right now, persist has saveOrUpdate semantics, so this will no longer fail") - public final void whenSameEntityIsCreatedTwice_thenDataException() { - final Foo entity = new Foo(randomAlphabetic(8)); - service.create(entity); - service.create(entity); - } - - // API - - @Override - protected final IOperations getApi() { - return service; - } - -} diff --git a/spring-rest-full/src/test/java/org/baeldung/util/IDUtil.java b/spring-rest-full/src/test/java/org/baeldung/util/IDUtil.java deleted file mode 100644 index 85ab623e5f..0000000000 --- a/spring-rest-full/src/test/java/org/baeldung/util/IDUtil.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.baeldung.util; - -import java.util.Random; - -public final class IDUtil { - - private IDUtil() { - throw new AssertionError(); - } - - // API - - public static String randomPositiveLongAsString() { - return Long.toString(randomPositiveLong()); - } - - public static String randomNegativeLongAsString() { - return Long.toString(randomNegativeLong()); - } - - public static long randomPositiveLong() { - long id = new Random().nextLong() * 10000; - id = (id < 0) ? (-1 * id) : id; - return id; - } - - private static long randomNegativeLong() { - long id = new Random().nextLong() * 10000; - id = (id > 0) ? (-1 * id) : id; - return id; - } - -} diff --git a/spring-rest-full/src/test/resources/.gitignore b/spring-rest-full/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/spring-rest-full/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/spring-rest-full/src/testFile b/spring-rest-full/src/testFile deleted file mode 100644 index 8b13789179..0000000000 --- a/spring-rest-full/src/testFile +++ /dev/null @@ -1 +0,0 @@ -