{"id":82665,"date":"2018-10-12T07:00:12","date_gmt":"2018-10-12T04:00:12","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=82665"},"modified":"2018-10-11T10:24:35","modified_gmt":"2018-10-11T07:24:35","slug":"parameterizedtest-null-values-cvssource","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html","title":{"rendered":"@ParameterizedTest with null values in @CvsSource"},"content":{"rendered":"<p>Writing parameterized tests in JUnit 4 was pretty cumbersome. JUnit 5 introduced several useful improvements to the framework and running the same test with different arguments is much simpler than in the previous version. However, there is one small issue with passing null values in such arguments.<\/p>\n<p>In this post, I\u2019m going to show you <b>how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5<\/b>.<ins><\/ins><\/p>\n<h2>1. Null values in @CsvSource<\/h2>\n<p>In order to analyze the problem, we need a sample case.<\/p>\n<p>Let\u2019s say that we create a class called <i>DateRange<\/i> which contains two boundary dates of a time period. You can create a new object only if you pass at least one boundary date to the constructor. We also need to make sure the start date is before the end date.<\/p>\n<p>With <i>@ParametrizedTest<\/i> from JUnit 5 we can describe given requirements with two following tests.<\/p>\n<pre class=\"brush:java\">@ParameterizedTest\r\n@CsvSource({\r\n       \"2017-06-01, 2018-10-15\",\r\n       \"null, 2018-10-15\",\r\n       \"2017-06-01, null\"\r\n})\r\nvoid shouldCreateValidDateRange(LocalDate startDate, LocalDate endDate) {\r\n   new DateRange(startDate, endDate);\r\n}\r\n\r\n@ParameterizedTest\r\n@CsvSource({\r\n       \"2018-10-15, 2017-06-01\",\r\n       \"null, null\"\r\n})\r\nvoid shouldNotCreateInvalidDateRange(LocalDate startDate, LocalDate endDate) {\r\n   assertThrows(IllegalArgumentException.class, () -&gt; new DateRange(startDate, endDate));\r\n}<\/pre>\n<p>However, when you try to execute these tests, you will end up with an error similar to the one presented below.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><i>org.junit.jupiter.api.extension.ParameterResolutionException: Error converting parameter at index 0: Failed to convert String \u201cnull\u201d to type java.time.LocalDate<\/i><\/p>\n<p>Although JUnit 5 comes with <a href=\"https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#writing-tests-parameterized-tests-argument-conversion\">numerous built-in converters<\/a> from string values to different types, <b>the null value isn\u2019t accepted in <\/b><b>@ValueSource or<\/b> <b><i>@CsvSource<\/i><\/b>.<\/p>\n<p>So how can you force JUnit 5 to work with null literals?<\/p>\n<h2>2. Custom nullable argument converter<\/h2>\n<p>Fortunately, JUnit 5 is flexible and we can easily extend its features.<\/p>\n<p>By default, the framework uses <a href=\"https:\/\/junit.org\/junit5\/docs\/current\/api\/org\/junit\/jupiter\/params\/converter\/DefaultArgumentConverter.html\">the DefaultArgumentConverter class<\/a> to convert Strings into other types. Our goal is to represent String \u201cnull\u201d as the null literal. Other string values should be converted with the default converter.<\/p>\n<p>In order to do so, we create a class which extends <i>SimpleArgumentConverter<\/i> and implement its abstract <i>convert()<\/i> method. In the body, we check for \u201cnull\u201d values. In other cases, we execute the default converter.<\/p>\n<pre class=\"brush:java\">import org.junit.jupiter.params.converter.DefaultArgumentConverter;\r\n\r\npublic final class NullableConverter extends SimpleArgumentConverter {\r\n   @Override\r\n   protected Object convert(Object source, Class&lt;?&gt; targetType) throws ArgumentConversionException {\r\n       if (\"null\".equals(source)) {\r\n           return null;\r\n       }\r\n       return DefaultArgumentConverter.INSTANCE.convert(source, targetType);\r\n   }\r\n}<\/pre>\n<p>Note that <b>the signature of the <\/b><b><i>DefaultArgumentConverter.convert()<\/i><\/b><b> presented above is available since JUnit 5.2.<\/b><\/p>\n<h2>3. Using custom argument converter<\/h2>\n<p>Once our custom converter is ready, we can call it in our tests using the <i>@ConvertWith<\/i> annotation.<\/p>\n<pre class=\"brush:java\">@ParameterizedTest\r\n@CsvSource({\r\n       \"2017-06-01, 2018-10-15\",\r\n       \"null, 2018-10-15\",\r\n       \"2017-06-01, null\"\r\n})\r\nvoid shouldCreateValidDateRange(@ConvertWith(NullableConverter.class) LocalDate startDate,\r\n                                @ConvertWith(NullableConverter.class) LocalDate endDate) {\r\n   new DateRange(startDate, endDate);\r\n}<\/pre>\n<h2>Conclusion<\/h2>\n<p>At this point, you should already know how to accept null values in JUnit 5 argument sources for parameterized tests. I hope such conversion will be automatic in future releases of the framework. For now, we need a small workaround.<\/p>\n<p>In case of any question please leave it in the comments. If you want to know about the latest posts, follow me or join the subscription list.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>Published on Java Code Geeks with permission by Daniel Olszewski, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener\">JCG program<\/a>. See the original article here: <a href=\"http:\/\/dolszewski.com\/testing\/parameterizedtest-with-null-values-in-cvssource\/\" target=\"_blank\" rel=\"noopener\">@ParameterizedTest with null values in @CvsSource<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Writing parameterized tests in JUnit 4 was pretty cumbersome. JUnit 5 introduced several useful improvements to the framework and running the same test with different arguments is much simpler than in the previous version. However, there is one small issue with passing null values in such arguments. In this post, I\u2019m going to show you &hellip;<\/p>\n","protected":false},"author":3861,"featured_media":176,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[274,1816,273],"class_list":["post-82665","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-junit","tag-junit5","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>@ParameterizedTest with null values in @CvsSource - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"@ParameterizedTest with null values in @CvsSource - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2018-10-12T04:00:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniel Olszewski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@daolszewski\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Olszewski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html\"},\"author\":{\"name\":\"Daniel Olszewski\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/f2727a76059a91188524de49e1e397fb\"},\"headline\":\"@ParameterizedTest with null values in @CvsSource\",\"datePublished\":\"2018-10-12T04:00:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html\"},\"wordCount\":449,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"keywords\":[\"JUnit\",\"JUnit5\",\"Testing\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html\",\"name\":\"@ParameterizedTest with null values in @CvsSource - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"datePublished\":\"2018-10-12T04:00:12+00:00\",\"description\":\"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/junit-logo-e1426444701180.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/10\\\/parameterizedtest-null-values-cvssource.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"@ParameterizedTest with null values in @CvsSource\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/f2727a76059a91188524de49e1e397fb\",\"name\":\"Daniel Olszewski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g\",\"caption\":\"Daniel Olszewski\"},\"description\":\"Daniel Olszewski is a software developer passionate about the JVM ecosystem and web development. He is an advocate of clean, maintainable, and well tested code\",\"sameAs\":[\"http:\\\/\\\/dolszewski.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/olszewskidaniel\\\/\",\"https:\\\/\\\/x.com\\\/daolszewski\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/daniel-olszewski\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"@ParameterizedTest with null values in @CvsSource - Java Code Geeks","description":"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html","og_locale":"en_US","og_type":"article","og_title":"@ParameterizedTest with null values in @CvsSource - Java Code Geeks","og_description":"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5","og_url":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2018-10-12T04:00:12+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","type":"image\/jpeg"}],"author":"Daniel Olszewski","twitter_card":"summary_large_image","twitter_creator":"@daolszewski","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Daniel Olszewski","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html"},"author":{"name":"Daniel Olszewski","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/f2727a76059a91188524de49e1e397fb"},"headline":"@ParameterizedTest with null values in @CvsSource","datePublished":"2018-10-12T04:00:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html"},"wordCount":449,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","keywords":["JUnit","JUnit5","Testing"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html","url":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html","name":"@ParameterizedTest with null values in @CvsSource - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","datePublished":"2018-10-12T04:00:12+00:00","description":"Interested to learn about parameterized tests? Check our article explaining how to pass null in @CvsSource and @ValueSource for @ParametrziedTest in JUnit 5","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/junit-logo-e1426444701180.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2018\/10\/parameterizedtest-null-values-cvssource.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"@ParameterizedTest with null values in @CvsSource"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/f2727a76059a91188524de49e1e397fb","name":"Daniel Olszewski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/478137d4c1cdb34323c29f65310308ecaabeb98e1efdf179d47932b1ddb219d3?s=96&d=mm&r=g","caption":"Daniel Olszewski"},"description":"Daniel Olszewski is a software developer passionate about the JVM ecosystem and web development. He is an advocate of clean, maintainable, and well tested code","sameAs":["http:\/\/dolszewski.com","https:\/\/www.linkedin.com\/in\/olszewskidaniel\/","https:\/\/x.com\/daolszewski"],"url":"https:\/\/www.javacodegeeks.com\/author\/daniel-olszewski"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/82665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/3861"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=82665"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/82665\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/176"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=82665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=82665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=82665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}