tag:blogger.com,1999:blog-16097585931849165912024-03-05T16:30:34.642-08:00Tech-OutsVenkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.comBlogger83125tag:blogger.com,1999:blog-1609758593184916591.post-42805935690042678272023-03-30T15:45:00.008-07:002023-04-05T16:13:30.444-07:00Spring security - 0.001 :)<p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">spring. boot-starter-security-> allows defining credentials in application properties. <br /></div><div class="separator" style="clear: both; text-align: left;"><span style="text-align: center;">Add below in pom . application for boot applicatoins</span></div><div class="separator" style="clear: both; text-align: center;"></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi1RpmGpZjbBPaXZUg2HJVByHGGX1xDB-GX4OwNQ-myotsSD6mfypbvaiVTs97EMVkjXqZW0MYeAEXlgZAreTjuEeogxD1k6eiYaK3sApXwIFVLuWOutWZE0Xj25I4yany9Ij3-2xYgbsuYd4KLjJz4e6opkBl-awskZRjB4cYSZH_nwsNS88eEpumr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="227" data-original-width="676" height="107" src="https://blogger.googleusercontent.com/img/a/AVvXsEi1RpmGpZjbBPaXZUg2HJVByHGGX1xDB-GX4OwNQ-myotsSD6mfypbvaiVTs97EMVkjXqZW0MYeAEXlgZAreTjuEeogxD1k6eiYaK3sApXwIFVLuWOutWZE0Xj25I4yany9Ij3-2xYgbsuYd4KLjJz4e6opkBl-awskZRjB4cYSZH_nwsNS88eEpumr" width="320" /></a></div><div><br /></div><p>adding below security. properties : which makes applications ask for these credentials (Un safe as the credentials are in text file)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhNKbdRodpWn5CuLsU2xH5J7JB4gSrFKJiQ4Fj9iAr2FjNJAO6b3v6N6hEpeomOHFPozGtcvsCN1C6htZD9t1KNpO0KL0PwLVXiMGrywsshE50FfTs5YSTY_UlH7M7mL1RxdbXxojyhoujRNL6BCbYbyTpaP7T0PnJqb_AFSd_h_H-aIfZ20Ckk8gwM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="195" data-original-width="556" height="112" src="https://blogger.googleusercontent.com/img/a/AVvXsEhNKbdRodpWn5CuLsU2xH5J7JB4gSrFKJiQ4Fj9iAr2FjNJAO6b3v6N6hEpeomOHFPozGtcvsCN1C6htZD9t1KNpO0KL0PwLVXiMGrywsshE50FfTs5YSTY_UlH7M7mL1RxdbXxojyhoujRNL6BCbYbyTpaP7T0PnJqb_AFSd_h_H-aIfZ20Ckk8gwM" width="320" /></a></div><br />will ask for the credentials to see the boot application from now.<p></p><p><br /></p><p><b><u>Step2 ) </u></b></p><p>as exposing in text file as above is vulnerable, use spring security config</p><p>using. @EnableWebSecurity annotation and extend WebSeucirtyConfigurerAdapter class . Then implement global configureGlobal function with the credential details.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgazOsBezWGv1ssJi7nvaujSyU2-Pdi69Yvr9b4PoLLPUxjqXE2UbcHedcgsWES-KZ_CebJh97IDbRN89fikw0LSfxZcqnl3snmmYBwsiZQsJqz6V-5eIDQZreWyJzjqu0zqGm-llWZw1KPVjWNQYmY4wGQBA9VCUDYht-ScRUU9xQxNoC5EUo8dgKs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="253" data-original-width="1003" height="81" src="https://blogger.googleusercontent.com/img/a/AVvXsEgazOsBezWGv1ssJi7nvaujSyU2-Pdi69Yvr9b4PoLLPUxjqXE2UbcHedcgsWES-KZ_CebJh97IDbRN89fikw0LSfxZcqnl3snmmYBwsiZQsJqz6V-5eIDQZreWyJzjqu0zqGm-llWZw1KPVjWNQYmY4wGQBA9VCUDYht-ScRUU9xQxNoC5EUo8dgKs" width="320" /></a></div><br /><p>Update global credentials instead of placing in application properties file using AuthenticationManagerBuilder as above.</p><p>and create a new object by calling in the main Boot Class to create instance as below</p><p><br /></p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiI-Y2L6lj5y4xaLKQNJbWA0TFCxTk3XjNX7guJ9ATb-o_XdSqkXF6Rz5M4czJeFTU0BAF-UBJNufdFk7dNb3N4Y-qk0uyYxm5oJiN_bJchHiYjcvCkH0xSyZCVrp8fq3ttDDBUQw92LNo8AtK57_RIRn48ltSyRqpARWZ_B_ZeifWaA4uc79jr4cZn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="111" data-original-width="935" height="82" src="https://blogger.googleusercontent.com/img/a/AVvXsEiI-Y2L6lj5y4xaLKQNJbWA0TFCxTk3XjNX7guJ9ATb-o_XdSqkXF6Rz5M4czJeFTU0BAF-UBJNufdFk7dNb3N4Y-qk0uyYxm5oJiN_bJchHiYjcvCkH0xSyZCVrp8fq3ttDDBUQw92LNo8AtK57_RIRn48ltSyRqpARWZ_B_ZeifWaA4uc79jr4cZn=w590-h82" width="590" /></a></div><br /><p>This also enables Spring to generate an autogenerated Form which asks for credentials and the user is allowed only when the credentials are correct. (Unlike Step1 -> Where browser pop-up will come)</p><p><br /></p><p>if the above POM file changes are not recognising and not giving the login form for application properties change, then </p><p>add the below one and check (also if <span style="background-color: white; color: #212338; font-family: Proxima; font-size: 17px;">not using Boot, you need to define the following dependencies)</span></p><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><<span style="color: #0033b3;">dependency</span>><br /> <<span style="color: #0033b3;">groupId</span>>org.springframework.security</<span style="color: #0033b3;">groupId</span>><br /> <<span style="color: #0033b3;">artifactId</span>>spring-security-config</<span style="color: #0033b3;">artifactId</span>><br /></<span style="color: #0033b3;">dependency</span>><br /><<span style="color: #0033b3;">dependency</span>><br /> <<span style="color: #0033b3;">groupId</span>>org.springframework.security</<span style="color: #0033b3;">groupId</span>><br /> <<span style="color: #0033b3;">artifactId</span>>spring-security-web</<span style="color: #0033b3;">artifactId</span>><br /></<span style="color: #0033b3;">dependency</span>></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">3) Another way of doing this is to implement other than mentioning in properties file</pre><pre style="background-color: white;"><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #9e880d;">@EnableWebSecurity<br /></span><span style="color: #0033b3;">public class </span><span style="color: black;">LssSecurityConfig </span><span style="color: #0033b3;">extends </span><span style="color: black;">WebSecurityConfigurerAdapter </span>{<br /> <span style="color: #9e880d;">@Autowired<br /></span><span style="color: #9e880d;"> </span><span style="color: #0033b3;">public void </span><span style="color: #00627a;">configureGlobal</span>(<span style="color: black;">AuthenticationManagerBuilder </span>auth) <span style="color: #0033b3;">throws </span><span style="color: black;">Exception </span>{<br /> auth.inMemoryAuthentication().withUser(<span style="color: #067d17;">"user"</span>).password(<span style="color: #067d17;">"{noop}password"</span>).roles(<span style="color: #067d17;">"USER"</span>);<br /> }</pre><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">}</pre><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">please observe that {noop} need to be mentioned along with the password </pre><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">otherwise, this will give below exception </pre><pre><span style="color: #080808; font-family: JetBrains Mono, monospace;"><span style="font-size: 13.0667px;">java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:289)
at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:237)
at org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration$LazyPasswordEncoder.matches(AuthenticationConfiguration.java:313)</span></span></pre><pre><br /></pre><pre><br /></pre><pre>and to make URL level authentication in override Configure fucntion of WebSecurityCongirurerAdapter</pre><pre><br /></pre><pre>as below</pre><pre><pre style="color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #9e880d;">@EnableWebSecurity<br /></span><span style="color: #0033b3;">public class </span><span style="color: black;">LssSecurityConfig </span><span style="color: #0033b3;">extends </span><span style="color: black;">WebSecurityConfigurerAdapter </span>{<br /> <span style="color: #9e880d;">@Autowired<br /></span><span style="color: #9e880d;"> </span><span style="color: #0033b3;">public void </span><span style="color: #00627a;">configureGlobal</span>(<span style="color: black;">AuthenticationManagerBuilder </span>auth) <span style="color: #0033b3;">throws </span><span style="color: black;">Exception </span>{<br /> auth.inMemoryAuthentication().withUser(<span style="color: #067d17;">"user"</span>).password(<span style="color: #067d17;">"{noop}password"</span>).roles(<span style="color: #067d17;">"USER"</span>);<br /> }<br /><br /> <span style="color: #9e880d;">@Override<br /></span><span style="color: #9e880d;"> </span><span style="color: #0033b3;">protected void </span><span style="color: #00627a;">configure</span>(<span style="color: black;">HttpSecurity </span>http) <span style="color: #0033b3;">throws </span><span style="color: black;">Exception </span>{<br /><br /> <span style="color: #0033b3;">try </span>{<br /> http.authorizeRequests().anyRequest().<br /> authenticated().<br /> antMatchers(<span style="color: #067d17;">"/delete/**"</span>).<br /> hasAnyAuthority(<span style="color: #067d17;">"ADMIN"</span>).and().formLogin();<br /> http.httpBasic();<br /> } <span style="color: #0033b3;">catch </span>(<span style="color: black;">Exception </span>e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}<br /></pre><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">This makes for all Delete operations the user role should be of ADMIN type. </pre></pre></pre><pre><br /></pre></pre>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-589906045160867642023-03-06T00:26:00.002-08:002023-03-10T10:37:27.269-08:00jks keytool commands <table class="highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file" data-hpc="" data-paste-markdown-skip="" data-tab-size="8" data-tagsearch-lang="Shell" data-tagsearch-path="keytool-openssl-commands-cheat-sheet.sh" style="background: var(--color-canvas-default); border-collapse: collapse; border: 0px; color: #333333; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 12px; line-height: 1.4; margin: 0px; padding: 0px;"><tbody><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2" id="file-keytool-openssl-commands-cheat-sheet-sh-L2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC2" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c"><table class="highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file" data-hpc="" data-paste-markdown-skip="" data-tab-size="8" data-tagsearch-lang="Shell" data-tagsearch-path="keytool-openssl-commands-cheat-sheet.sh" style="background: var(--color-canvas-default); border-collapse: collapse; border: 0px; color: #333333; font-size: 12px; line-height: 1.4; margin: 0px; padding: 0px;"><tbody><tr><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC1" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding-bottom: 1px !important; padding-left: 10px !important; padding-right: 10px !important; padding-top: 4px; padding: 4px 10px 1px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 1. Create a Java Key Store (JKS) with Private & Public key pairs using keytool</span></td></tr></tbody></table>
#</span>-------------------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="3" id="file-keytool-openssl-commands-cheat-sheet-sh-L3" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC3" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Keytool '-genkeypair' option used, in earlier version of keytool '-genkey' option was used which is still supported for backward compatibility</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="4" id="file-keytool-openssl-commands-cheat-sheet-sh-L4" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC4" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command generates a RSA 2048 bit Public and Private key pair, wraps the public key into an X.509 v3 self-signed certificate signed by SHA256withRSA with a validity period of 365 days, which is then stored as a single-element certificate chain. This certificate chain and the private key are stored in a new keystore 'sample_keystore.jks' entry identified by alias 'sample'.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="5" id="file-keytool-openssl-commands-cheat-sheet-sh-L5" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC5" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Option defaults: </span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="6" id="file-keytool-openssl-commands-cheat-sheet-sh-L6" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC6" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -alias: mykey</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="7" id="file-keytool-openssl-commands-cheat-sheet-sh-L7" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC7" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -keyalg: DSA</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="8" id="file-keytool-openssl-commands-cheat-sheet-sh-L8" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC8" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -keysize: 2048 bit (for both RSA and DSA)</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="9" id="file-keytool-openssl-commands-cheat-sheet-sh-L9" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC9" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -validity: 90 days</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="10" id="file-keytool-openssl-commands-cheat-sheet-sh-L10" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC10" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -storetype: JKS (property value fetched from 'java.security.keystore.type' from Java jdk/jre)</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="11" id="file-keytool-openssl-commands-cheat-sheet-sh-L11" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC11" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Ref: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html#keytool_option_genkeypair</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="12" id="file-keytool-openssl-commands-cheat-sheet-sh-L12" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC12" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -genkeypair -v -alias sample -keyalg RSA -keysize 2048 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="13" id="file-keytool-openssl-commands-cheat-sheet-sh-L13" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC13" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-dname <span class="pl-s" style="color: #032f62;"><span class="pl-pds">"</span>CN=sample.com, OU=apim, O=wso2, L=colombo, ST=western, C=lk<span class="pl-pds">"</span></span> -validity 365 -keypass abcd@1234 -storepass abcd@1234 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="14" id="file-keytool-openssl-commands-cheat-sheet-sh-L14" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC14" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-keystore sample_keystore.jks</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="15" id="file-keytool-openssl-commands-cheat-sheet-sh-L15" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC15" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="16" id="file-keytool-openssl-commands-cheat-sheet-sh-L16" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC16" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="17" id="file-keytool-openssl-commands-cheat-sheet-sh-L17" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC17" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 2. Create a JKS with Private & Public key pairs including SANs, IPs, KeyUsages & ExtendedKeyUsages using keytool</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="18" id="file-keytool-openssl-commands-cheat-sheet-sh-L18" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC18" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-----------------------------------------------------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="19" id="file-keytool-openssl-commands-cheat-sheet-sh-L19" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC19" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Keytool extension '-ext' option used to provide 'SAN', 'IP', 'KeyUsage' and 'ExtendedKeyUsage'</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="20" id="file-keytool-openssl-commands-cheat-sheet-sh-L20" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC20" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Note:</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="21" id="file-keytool-openssl-commands-cheat-sheet-sh-L21" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC21" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Using JDKs below JDK15, it is not possible to generate a JKS 'passing wildcard SAN extension' with keytool</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="22" id="file-keytool-openssl-commands-cheat-sheet-sh-L22" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC22" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Example, with JDK8, 'dns:*.efs.eu-west-1.amazonaws.com' Or 'dns:test.*.eu-west-1.amazonaws.com' will result in an error</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="23" id="file-keytool-openssl-commands-cheat-sheet-sh-L23" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC23" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> This has been fixed with JDK15, https://bugs.openjdk.java.net/browse/JDK-8186143</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="24" id="file-keytool-openssl-commands-cheat-sheet-sh-L24" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC24" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -genkeypair -v -alias sample -keyalg RSA -keysize 2048 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="25" id="file-keytool-openssl-commands-cheat-sheet-sh-L25" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC25" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-dname <span class="pl-s" style="color: #032f62;"><span class="pl-pds">"</span>CN=sample.com, OU=apim, O=wso2, L=colombo, ST=western, C=lk<span class="pl-pds">"</span></span> \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="26" id="file-keytool-openssl-commands-cheat-sheet-sh-L26" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC26" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-ext <span class="pl-s" style="color: #032f62;"><span class="pl-pds">"</span>san=dns:test.sample.com,dns:test.efs.eu-west-1.amazonaws.com,dns:localhost,ip:127.0.0.1<span class="pl-pds">"</span></span> \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="27" id="file-keytool-openssl-commands-cheat-sheet-sh-L27" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC27" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-ext KeyUsage=digitalSignature,keyEncipherment,dataEncipherment,nonRepudiation,keyCertSign \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="28" id="file-keytool-openssl-commands-cheat-sheet-sh-L28" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC28" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-ext ExtendedKeyUsage=serverAuth,clientAuth -validity 365 -keypass abcd@1234 -storepass abcd@1234 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="29" id="file-keytool-openssl-commands-cheat-sheet-sh-L29" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC29" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-keystore sample_keystore.jks</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="30" id="file-keytool-openssl-commands-cheat-sheet-sh-L30" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC30" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="31" id="file-keytool-openssl-commands-cheat-sheet-sh-L31" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC31" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 3. List entries of JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="32" id="file-keytool-openssl-commands-cheat-sheet-sh-L32" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC32" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-----------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="33" id="file-keytool-openssl-commands-cheat-sheet-sh-L33" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC33" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -list -v -keystore sample_keystore.jks</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="34" id="file-keytool-openssl-commands-cheat-sheet-sh-L34" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC34" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="35" id="file-keytool-openssl-commands-cheat-sheet-sh-L35" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC35" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 4. Converting a JKS to PKCS12 keystore</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="36" id="file-keytool-openssl-commands-cheat-sheet-sh-L36" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC36" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>---------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="37" id="file-keytool-openssl-commands-cheat-sheet-sh-L37" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC37" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -importkeystore -srckeystore sample_keystore.jks -destkeystore sample_keystore.pfx -deststoretype pkcs12</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="38" id="file-keytool-openssl-commands-cheat-sheet-sh-L38" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC38" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="39" id="file-keytool-openssl-commands-cheat-sheet-sh-L39" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC39" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 5. Export public certificate from JKS in DER format (binary-encoded format)</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="40" id="file-keytool-openssl-commands-cheat-sheet-sh-L40" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC40" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>----------------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="41" id="file-keytool-openssl-commands-cheat-sheet-sh-L41" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC41" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -exportcert -alias sample -file sample.crt -keystore sample_keystore.jks</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="42" id="file-keytool-openssl-commands-cheat-sheet-sh-L42" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC42" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="43" id="file-keytool-openssl-commands-cheat-sheet-sh-L43" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC43" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 6. Export public certificate from JKS in PEM format (ASCII Base64 human-readble format)</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="44" id="file-keytool-openssl-commands-cheat-sheet-sh-L44" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC44" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>----------------------------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="45" id="file-keytool-openssl-commands-cheat-sheet-sh-L45" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC45" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Additional '-rfc' option need to be passed along with '-exportcert' option to get a pem encoded certificate</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="46" id="file-keytool-openssl-commands-cheat-sheet-sh-L46" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC46" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -exportcert -alias sample -file sample.pem -keystore sample_keystore.jks -rfc</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="47" id="file-keytool-openssl-commands-cheat-sheet-sh-L47" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC47" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="48" id="file-keytool-openssl-commands-cheat-sheet-sh-L48" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC48" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 7. Import third-party public certificates to the JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="49" id="file-keytool-openssl-commands-cheat-sheet-sh-L49" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC49" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-----------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="50" id="file-keytool-openssl-commands-cheat-sheet-sh-L50" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC50" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Third party public certificates are imported as Trusted CA certificates</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="51" id="file-keytool-openssl-commands-cheat-sheet-sh-L51" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC51" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -import -trustcacerts -alias wso2carbon -file wso2carbon.pem -keystore sample_keystore.jks</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="52" id="file-keytool-openssl-commands-cheat-sheet-sh-L52" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC52" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="53" id="file-keytool-openssl-commands-cheat-sheet-sh-L53" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC53" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 8. Export private key entry from JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="54" id="file-keytool-openssl-commands-cheat-sheet-sh-L54" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC54" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="55" id="file-keytool-openssl-commands-cheat-sheet-sh-L55" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC55" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> By default, the JKS key store type doesn't support exporting the Private key entry using the key tool</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="56" id="file-keytool-openssl-commands-cheat-sheet-sh-L56" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC56" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Private key entry can be exported by converting the JKS to a PKCS12 key store</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="57" id="file-keytool-openssl-commands-cheat-sheet-sh-L57" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC57" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Command for converting JKS to PKCS12 key store can be found in 4</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="58" id="file-keytool-openssl-commands-cheat-sheet-sh-L58" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC58" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> We will use the PKCS12 key store 'sample_keystore.pfx' and export the private key entry in 'PEM' format using the following OpenSSL command</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="59" id="file-keytool-openssl-commands-cheat-sheet-sh-L59" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC59" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Options:</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="60" id="file-keytool-openssl-commands-cheat-sheet-sh-L60" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC60" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -nodes: No DES format so the Private key won't be encrypted</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="61" id="file-keytool-openssl-commands-cheat-sheet-sh-L61" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC61" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -nocerts: No certificates will be exported at all, only the private key entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="62" id="file-keytool-openssl-commands-cheat-sheet-sh-L62" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC62" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkcs12 -in sample_keystore.pfx -nodes -nocerts -out sample_keystore_private_key.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="63" id="file-keytool-openssl-commands-cheat-sheet-sh-L63" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC63" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="64" id="file-keytool-openssl-commands-cheat-sheet-sh-L64" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC64" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 9. Convert the private key entry from 'PEM' encoding to 'DER' encoding</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="65" id="file-keytool-openssl-commands-cheat-sheet-sh-L65" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC65" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-----------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="66" id="file-keytool-openssl-commands-cheat-sheet-sh-L66" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC66" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> By default, OpenSSL command saves the private key entry (encrypted/unencrypted) to the file using the 'PEM' encoding</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="67" id="file-keytool-openssl-commands-cheat-sheet-sh-L67" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC67" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> We can convert the 'PEM' format to 'DER' format using openssl 'pkey','-inform' and '-outform' options</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="68" id="file-keytool-openssl-commands-cheat-sheet-sh-L68" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC68" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkey -in sample_keystore_private_key.pem -inform pem -out sample_keystore_private_key.der -outform der</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="69" id="file-keytool-openssl-commands-cheat-sheet-sh-L69" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC69" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="70" id="file-keytool-openssl-commands-cheat-sheet-sh-L70" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC70" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 10. Export the Triple-DES encrypted private key entry from the JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="71" id="file-keytool-openssl-commands-cheat-sheet-sh-L71" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC71" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="72" id="file-keytool-openssl-commands-cheat-sheet-sh-L72" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC72" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Convert the JKS to PKCS12 key store, command for converting JKS to PKCS12 key store can be found in 4</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="73" id="file-keytool-openssl-commands-cheat-sheet-sh-L73" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC73" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> By default, if the 'encryption algorithm' is not specified explicitly Or the '-nodes' options is not passed, OpenSSL will encrypt the private key entry using '3DES encryption algorithm'</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="74" id="file-keytool-openssl-commands-cheat-sheet-sh-L74" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC74" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following exports the 'PEM' encoded '3DES encrypted' private key entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="75" id="file-keytool-openssl-commands-cheat-sheet-sh-L75" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC75" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkcs12 -in sample_keystore.pfx -nocerts -out sample_keystore_private_key_default_enc.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="76" id="file-keytool-openssl-commands-cheat-sheet-sh-L76" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC76" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="77" id="file-keytool-openssl-commands-cheat-sheet-sh-L77" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC77" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 11. Export the 'AES256' encrypted private key entry from the JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="78" id="file-keytool-openssl-commands-cheat-sheet-sh-L78" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC78" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>---------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="79" id="file-keytool-openssl-commands-cheat-sheet-sh-L79" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC79" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Convert the JKS to PKCS12 key store, command for converting JKS to PKCS12 key store can be found in 4</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="80" id="file-keytool-openssl-commands-cheat-sheet-sh-L80" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC80" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> We can explicitly pass the encryption algorithm as an argument (ex: -aes256)</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="81" id="file-keytool-openssl-commands-cheat-sheet-sh-L81" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC81" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Apart from using the 'default 3DES algorithm', we can export the encrypted Private key entry by specifying one of the following encryption algorithms. </span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="82" id="file-keytool-openssl-commands-cheat-sheet-sh-L82" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC82" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> AES (aes128, aes192, aes256) => -aes128, -aes192, -aes256</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="83" id="file-keytool-openssl-commands-cheat-sheet-sh-L83" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC83" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> DES => -des</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="84" id="file-keytool-openssl-commands-cheat-sheet-sh-L84" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC84" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 3DES => -des3</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="85" id="file-keytool-openssl-commands-cheat-sheet-sh-L85" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC85" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkcs12 -in sample_keystore.pfx -aes256 -nocerts -out sample_keystore_private_key_aes256.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="86" id="file-keytool-openssl-commands-cheat-sheet-sh-L86" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC86" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="87" id="file-keytool-openssl-commands-cheat-sheet-sh-L87" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC87" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 12. Export the 'RSAPrivateKey' from the JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="88" id="file-keytool-openssl-commands-cheat-sheet-sh-L88" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC88" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>--------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="89" id="file-keytool-openssl-commands-cheat-sheet-sh-L89" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC89" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Convert the JKS to PKCS12 key store, command for converting JKS to PKCS12 key store can be found in 4</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="90" id="file-keytool-openssl-commands-cheat-sheet-sh-L90" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC90" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Private key entry contains 'Bag Attributes' and 'Key Attributes' apart from the 'Encrypted/Un-encrypted RSAPrivateKey'</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="91" id="file-keytool-openssl-commands-cheat-sheet-sh-L91" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC91" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 'RSAPrivateKey' ASN.1 structure defined in 'PKCS#1 (RFC 3447)' allows the private key entry to only contain the private key eliminating the 'Bag Attributes' and 'Key Attributes'.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="92" id="file-keytool-openssl-commands-cheat-sheet-sh-L92" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC92" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 'RSAPrivateKey' contains -----BEGIN RSA PRIVATE KEY----- and -----END RSA PRIVATE KEY----- tags</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="93" id="file-keytool-openssl-commands-cheat-sheet-sh-L93" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC93" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command will extract an unencrypted RSA private key from the JKS without other attributes</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="94" id="file-keytool-openssl-commands-cheat-sheet-sh-L94" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC94" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkcs12 -in sample_keystore.pfx -nodes -nocerts <span class="pl-k" style="color: #d73a49;">|</span> openssl rsa -out sample_keystore_private_key_rsa.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="95" id="file-keytool-openssl-commands-cheat-sheet-sh-L95" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC95" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="96" id="file-keytool-openssl-commands-cheat-sheet-sh-L96" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC96" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 13. Extracting 'RSAPrivateKey' from the 'PKCS#8' private key entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="97" id="file-keytool-openssl-commands-cheat-sheet-sh-L97" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC97" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="98" id="file-keytool-openssl-commands-cheat-sheet-sh-L98" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC98" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Older versions of OpenSSL generated private key entry (not RSA private key) in 'PKCS#1', newer versions in 'PKCS#8'</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="99" id="file-keytool-openssl-commands-cheat-sheet-sh-L99" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC99" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command extracts the 'RSAPrivateKey' from an existing private key entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="100" id="file-keytool-openssl-commands-cheat-sheet-sh-L100" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC100" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl rsa -in sample_keystore_private_key.pem -out sample_keystore_private_key_rsa_converted.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="101" id="file-keytool-openssl-commands-cheat-sheet-sh-L101" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC101" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="102" id="file-keytool-openssl-commands-cheat-sheet-sh-L102" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC102" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 14. Extracting Triple DES encrypted 'RSAPrivateKey' from the 'PKCS#8' private key entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="103" id="file-keytool-openssl-commands-cheat-sheet-sh-L103" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC103" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>----------------------------------------------------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="104" id="file-keytool-openssl-commands-cheat-sheet-sh-L104" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC104" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> RSA private key exported nonencrypted poses a security threat</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="105" id="file-keytool-openssl-commands-cheat-sheet-sh-L105" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC105" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command extracts a 'RSAPrivateKey' from a 'PKCS#8' private key entry in a Triple DES encrypted format</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="106" id="file-keytool-openssl-commands-cheat-sheet-sh-L106" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC106" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Note:</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="107" id="file-keytool-openssl-commands-cheat-sheet-sh-L107" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC107" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 'Proc-Type: 4,ENCRYPTED' attribute which shows us the RSA private key entry is encrypted.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="108" id="file-keytool-openssl-commands-cheat-sheet-sh-L108" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC108" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl rsa -in sample_keystore_private_key.pem -des3 -out sample_keystore_private_key_rsa_des3.pem</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="109" id="file-keytool-openssl-commands-cheat-sheet-sh-L109" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC109" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="110" id="file-keytool-openssl-commands-cheat-sheet-sh-L110" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC110" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 15. Import a private key entry to JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="111" id="file-keytool-openssl-commands-cheat-sheet-sh-L111" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC111" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>--------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="112" id="file-keytool-openssl-commands-cheat-sheet-sh-L112" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC112" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> It is not possible to directly import private key entry to JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="113" id="file-keytool-openssl-commands-cheat-sheet-sh-L113" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC113" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> We can import the private key to a 'PKCS12' key store and convert it to a 'JKS' key store</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="114" id="file-keytool-openssl-commands-cheat-sheet-sh-L114" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC114" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command exports the private key, public certificate and certificate chain as a 'PKCS12' keystore</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="115" id="file-keytool-openssl-commands-cheat-sheet-sh-L115" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC115" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Be sure to set an export password to avoid NullPointerException</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="116" id="file-keytool-openssl-commands-cheat-sheet-sh-L116" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC116" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">openssl pkcs12 -export -in <span class="pl-k" style="color: #d73a49;"><</span>public_cert<span class="pl-k" style="color: #d73a49;">></span>.crt -inkey <span class="pl-k" style="color: #d73a49;"><</span>private_key<span class="pl-k" style="color: #d73a49;">></span>.key -chain -CAfile <span class="pl-k" style="color: #d73a49;"><</span>ca_cert<span class="pl-k" style="color: #d73a49;">></span>.crt \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="117" id="file-keytool-openssl-commands-cheat-sheet-sh-L117" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC117" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-name <span class="pl-s" style="color: #032f62;"><span class="pl-pds">"</span>sample.com<span class="pl-pds">"</span></span> -out sample_keystore_pkcs12.p12</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="118" id="file-keytool-openssl-commands-cheat-sheet-sh-L118" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC118" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="119" id="file-keytool-openssl-commands-cheat-sheet-sh-L119" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC119" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Following command converts the 'PKCS12' key store to a JKS</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="120" id="file-keytool-openssl-commands-cheat-sheet-sh-L120" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC120" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -importkeystore -srckeystore sample_keystore_pkcs12.p12 -srcstoretype PKCS12 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="121" id="file-keytool-openssl-commands-cheat-sheet-sh-L121" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC121" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-destkeystore sample_keystore_with_imported_private_key.jks -deststoretype JKS -deststorepass abcd@1234</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="122" id="file-keytool-openssl-commands-cheat-sheet-sh-L122" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC122" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">
</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="123" id="file-keytool-openssl-commands-cheat-sheet-sh-L123" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC123" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> 16. Generating JKS with 'Secret Key' entry</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="124" id="file-keytool-openssl-commands-cheat-sheet-sh-L124" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC124" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span>-------------------------------------------#</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="125" id="file-keytool-openssl-commands-cheat-sheet-sh-L125" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC125" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> According to the JKS key store specification, we can't store 'non-PrivateKeys' in a 'JKS' type key store. </span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="126" id="file-keytool-openssl-commands-cheat-sheet-sh-L126" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC126" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Let's try to generate a JKS with secret key entry using the below command</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="127" id="file-keytool-openssl-commands-cheat-sheet-sh-L127" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC127" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Note:</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="128" id="file-keytool-openssl-commands-cheat-sheet-sh-L128" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC128" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -genseckey: Option is used to generate the Secret key.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="129" id="file-keytool-openssl-commands-cheat-sheet-sh-L129" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC129" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> -keyalg: Argument is used to pass the Secret key algorithm.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="130" id="file-keytool-openssl-commands-cheat-sheet-sh-L130" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC130" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> Common secret key algorithms include DES, 3DES, and AES.</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="131" id="file-keytool-openssl-commands-cheat-sheet-sh-L131" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC131" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">keytool -genseckey -alias secretKey -keypass secretKey -keyalg AES -keysize 256 \</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="132" id="file-keytool-openssl-commands-cheat-sheet-sh-L132" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC132" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;">-keystore secretKey.jks -storepass secretKey -storetype JKS -v</td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="133" id="file-keytool-openssl-commands-cheat-sheet-sh-L133" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC133" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> The above command will result in an error with an exception </span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="134" id="file-keytool-openssl-commands-cheat-sheet-sh-L134" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC134" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> keytool error: java.security.KeyStoreException: Cannot store non-PrivateKeys</span></td></tr><tr><td class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="135" id="file-keytool-openssl-commands-cheat-sheet-sh-L135" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: var(--color-fg-subtle); cursor: pointer; line-height: 20px; min-width: inherit; padding: 1px 10px; position: relative; text-align: right; user-select: none; vertical-align: top; white-space: nowrap; width: 21.6071px;"></td><td class="blob-code blob-code-inner js-file-line" id="file-keytool-openssl-commands-cheat-sheet-sh-LC135" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: var(--color-fg-default); line-height: 20px; overflow-wrap: anywhere; overflow: visible; padding: 1px 10px; position: relative; vertical-align: top; white-space: pre;"><span class="pl-c" style="color: #6a737d;"><span class="pl-c">#</span> It is not possible to generate Or import
Courtesy: https://techexpertise.medium.com/exploring-key-stores-and-public-certificates-jks-723eb6b32a21 </span></td></tr></tbody></table>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-80371766101597320052023-02-21T15:09:00.003-08:002023-02-21T15:10:22.633-08:00@ControllerAdvice against @ExceptionHandler and using @Order<p> Being Each ExceptionHandler is limited to controller. In the case of where multiple controllers exists, @ExceptionHandler using will not be affective and increase duplicate code.</p><p>To get Global Exception Handling</p><p>Application -wide across all controllers and all exceptions</p><p><br /></p><p>- While handling it is good to create package-level handlers</p><p>- Control the controllers by their annotations (global handling specific to some controllers by include/exclude)</p><p><br /></p><p>@ControllerAdvice : comes from Aspect Programming</p><p>This is single advice across application wide</p><p>can also create domain level (scope level)</p><p><br /></p><p>While writing:</p><p>- Mark with @ControllerAdvice</p><p>- Add one or many @ExceptionHandler for specific/group of exceptions like @ExceptionHandler</p><p>- Can also add catch all exception handler (Refer @Exceptionhandler post)</p><p>like below</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEih9OG_mf9Xvn07FkeKPYT6NnCt9iuG9JUcFveCbeAeA9noghZQE2xu4VhdceYYv0MkWfPQ-71E_izWblmQyj7MRPmuvsBmEiO--mqrG-ALek81yifMvpL9aG-mDHL3kStGfoZjMLlzK1kPYZxeVJyglIh4XQ4ZYRGNvlpTRGLQqz1BZy_amhTqEOCU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="954" data-original-width="776" height="395" src="https://blogger.googleusercontent.com/img/a/AVvXsEih9OG_mf9Xvn07FkeKPYT6NnCt9iuG9JUcFveCbeAeA9noghZQE2xu4VhdceYYv0MkWfPQ-71E_izWblmQyj7MRPmuvsBmEiO--mqrG-ALek81yifMvpL9aG-mDHL3kStGfoZjMLlzK1kPYZxeVJyglIh4XQ4ZYRGNvlpTRGLQqz1BZy_amhTqEOCU=w321-h395" width="321" /></a></div><br /><br /><p></p><p><b>Spring Provides @ControllerAdvice </b></p><p><b>and</b></p><p><b>@RestControllerAdvice (This is @ControllerAdvice + @ResponseBody) - for REST Services</b></p><p><b><br /></b></p><p><b>Topic 6:</b></p><p>Scoping the ControllerAdvice for particular packages also can be done so that this global handler is applicable for only the packages.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjUEs4i7WSbCUKrKhaIXxeNgfuGNegFTgbDA6ANM9e_3ZbCx3cPXNsuMscEO5_7SqQh-wC_XFJISwxnhznyaSYDOi73OoasLqHR-4Qk7FjXmCWY_CAwXvfPIWVe6vSOaCrLfNGVSkww_HZuXXyl3XBGiH5XuKMGXjwTHPHq7zmO9mvKQuETfJSbPXFp" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="100" data-original-width="912" height="50" src="https://blogger.googleusercontent.com/img/a/AVvXsEjUEs4i7WSbCUKrKhaIXxeNgfuGNegFTgbDA6ANM9e_3ZbCx3cPXNsuMscEO5_7SqQh-wC_XFJISwxnhznyaSYDOi73OoasLqHR-4Qk7FjXmCWY_CAwXvfPIWVe6vSOaCrLfNGVSkww_HZuXXyl3XBGiH5XuKMGXjwTHPHq7zmO9mvKQuETfJSbPXFp=w459-h50" width="459" /></a></div><br /><br /><p></p><p>to assign to only set of controllers not to packages then</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjHxkIbjNKog_r2d6Rql0-OntI7az_9pW8AOOVmlDGoUQuQOOqUvL0e885hXYrxWsyasdbHI7pKc-LI5yqWu7mjRu9YUoILDI7tEHZFX2mAc79Feiax3F3Qt5Rq0n2rq-NO-P5lvOK0ItSta6N2j1DyBuPleI_klMvkYppLfjgJ8rtIjP2ugHnNaGMd" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="88" data-original-width="902" height="39" src="https://blogger.googleusercontent.com/img/a/AVvXsEjHxkIbjNKog_r2d6Rql0-OntI7az_9pW8AOOVmlDGoUQuQOOqUvL0e885hXYrxWsyasdbHI7pKc-LI5yqWu7mjRu9YUoILDI7tEHZFX2mAc79Feiax3F3Qt5Rq0n2rq-NO-P5lvOK0ItSta6N2j1DyBuPleI_klMvkYppLfjgJ8rtIjP2ugHnNaGMd=w407-h39" width="407" /></a></div><br /><br /><p></p><p><b>PLEASE NOTE THAT , WE SHOULD NOT HAVE MULTIPLE @CONTROLLERADVICES IN ONE APPLICATION. TO MAKE IT THERE SHOULD BE MORE CARE NEED TO BE TAKEN CARE LIKE USING PRIORITY, ETC., GENERALLY IT IS NOT RECOMMENDED AS IT IS NOT PREDICTABLE</b></p><p><b><br /></b></p><p><b>Topic 7:</b></p><p>When multiple ControllerAdvices are present , it will be picked up in Alphabetical order (Please check in your system). As this is not predictable, "Order" annotation can be used to set the order. Generally takes integer value</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjL3QaNO1iRxG7TuchdWnkO8u0ed3N-OyWyV6r1KaDH7ookaC8lUDZiusUv2S5aQCGejWcyaawOyrz0M-0w6bsG4lpluzDICIsXoKCNtL0vb4pRiVY6-32uLVP61iJV_4kweVC3Sa9a-flyyG_E3Fyr64AQUjpYD2FXqtm6sQe5AHqILHqcBDSC3lwb" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="144" data-original-width="858" height="77" src="https://blogger.googleusercontent.com/img/a/AVvXsEjL3QaNO1iRxG7TuchdWnkO8u0ed3N-OyWyV6r1KaDH7ookaC8lUDZiusUv2S5aQCGejWcyaawOyrz0M-0w6bsG4lpluzDICIsXoKCNtL0vb4pRiVY6-32uLVP61iJV_4kweVC3Sa9a-flyyG_E3Fyr64AQUjpYD2FXqtm6sQe5AHqILHqcBDSC3lwb=w455-h77" width="455" /></a></div><p><br /></p>as these values are integers ranging min to max. value can be given as integer to set the order<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiaQSo1FpS_NVX9NJgvJdO6KmawuqErGCNlknuT_WiczQ-k3zQkuX4irjWKB2cmCpfM_K_oiRYddNAiuzUjr2hzqFA4ZS38NYitXMs8Wcq1K8I-pywnpX84XjPtL6GNnT46re1GWQvB8lKc4BxvKKEXW0Nbfg8oXG59SzvERkisxo19okQ3KyBfvzs9" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="340" data-original-width="758" height="144" src="https://blogger.googleusercontent.com/img/a/AVvXsEiaQSo1FpS_NVX9NJgvJdO6KmawuqErGCNlknuT_WiczQ-k3zQkuX4irjWKB2cmCpfM_K_oiRYddNAiuzUjr2hzqFA4ZS38NYitXMs8Wcq1K8I-pywnpX84XjPtL6GNnT46re1GWQvB8lKc4BxvKKEXW0Nbfg8oXG59SzvERkisxo19okQ3KyBfvzs9" width="320" /></a></div><br /><br /><p></p><p><br /></p>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-71469971562718392842023-02-21T14:38:00.001-08:002023-02-21T14:38:08.421-08:00Exception Handler<p> To make method mark with @ExceptionHandler</p><p>Accepts parameters to help with the exception handling and provide response.</p><p>Sample Exception handler </p><p>- use the annotation</p><p>- pass the exception that this exception hanlder function handles as an argument</p><p>- below is handled for indexoutofboundexception</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgDXfrH097A00svEgKGrbIihksZhBXtEOqxGXBy8Q4JLYE2RVLeodIZieVW6QI99E2WahILSitVXLrai_496oFo6ayL2ZnWC1SveYaz8fCb4zUXuITSOoUaUpAWdJreKSYYYJGLiIiObiri64rX6kOrNos31AXuiYX9eJqQjV1NuFCUAjUR6WvA_Xc6" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="212" data-original-width="900" height="75" src="https://blogger.googleusercontent.com/img/a/AVvXsEgDXfrH097A00svEgKGrbIihksZhBXtEOqxGXBy8Q4JLYE2RVLeodIZieVW6QI99E2WahILSitVXLrai_496oFo6ayL2ZnWC1SveYaz8fCb4zUXuITSOoUaUpAWdJreKSYYYJGLiIiObiri64rX6kOrNos31AXuiYX9eJqQjV1NuFCUAjUR6WvA_Xc6" width="320" /></a></div><br /><p>If we add this in controller: Then this will become global exception for that controller class</p><p>Can add @ResponseStatus to return desired HTTP Error code</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhAOp2-n3IUzeT43YpbR9avtiAWHhec7cf0HD8Thh39UxYcbitmWrBZZLUZQqAko2c5303SqNV1faOM0rTZk_QDez7w7GKIpq_9bXrBVsHE00huImQ8ZG1beSyo0rhTCqrF9Zb64CvqvK1xQWdr8uqQS3AHtSu9VSWpObgw1UHJjBXI63a99VuMK_1n" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="280" data-original-width="1038" height="86" src="https://blogger.googleusercontent.com/img/a/AVvXsEhAOp2-n3IUzeT43YpbR9avtiAWHhec7cf0HD8Thh39UxYcbitmWrBZZLUZQqAko2c5303SqNV1faOM0rTZk_QDez7w7GKIpq_9bXrBVsHE00huImQ8ZG1beSyo0rhTCqrF9Zb64CvqvK1xQWdr8uqQS3AHtSu9VSWpObgw1UHJjBXI63a99VuMK_1n" width="320" /></a></div><br />Now when Controller gets this exception, it also return "Oops, something went wrong@ along with HTTP Error Code 400 as provided with @ResponseStatus above<p></p><p><br /></p><p>Topic 3:</p><p>Controller can have multiple exception handler to handle different exceptions.</p><p>One is to add all exceptions as below, which is not practically possible in many cases</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhY3Gs14ZIpd9xSHZoXUbm5NcYBuIuuOYuhlXo8v4dtXNVsxfXL13loySQT4EZyRaVHJ2Fz4wR9kg8xOvGKhtg_RCmmaj9KkXYh8e3vRobkLrx-SUCakulYv9_T2NCMd2xWFoJjc4PoRD3nahyUUTemZQGFMm07shJqPlGi4D_qFO5S2aW6tPT8qMoI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="254" data-original-width="1568" height="79" src="https://blogger.googleusercontent.com/img/a/AVvXsEhY3Gs14ZIpd9xSHZoXUbm5NcYBuIuuOYuhlXo8v4dtXNVsxfXL13loySQT4EZyRaVHJ2Fz4wR9kg8xOvGKhtg_RCmmaj9KkXYh8e3vRobkLrx-SUCakulYv9_T2NCMd2xWFoJjc4PoRD3nahyUUTemZQGFMm07shJqPlGi4D_qFO5S2aW6tPT8qMoI=w488-h79" width="488" /></a></div><br /><br /><p></p><p>OR make indepeent handler so that we can customize the error code </p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZepIimD_05oD3VaixfJm57QAK9pRnk-Kng87eY3qrL1lsyeSPClkU37sgWT0JuiejtAlV-KQw7_lE_wkMw4gmP4LjqFbcAdtD3FF_fNht3VmuSmUaP2vtvmSVYIo2nTIkI4BPtqOVYznjok5ajkeBtDJrlkTH_4d7mzOsyp1aVgBFeMMBakZYP23H" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="564" data-original-width="980" height="184" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZepIimD_05oD3VaixfJm57QAK9pRnk-Kng87eY3qrL1lsyeSPClkU37sgWT0JuiejtAlV-KQw7_lE_wkMw4gmP4LjqFbcAdtD3FF_fNht3VmuSmUaP2vtvmSVYIo2nTIkI4BPtqOVYznjok5ajkeBtDJrlkTH_4d7mzOsyp1aVgBFeMMBakZYP23H" width="320" /></a></div><br /><br /></div>and by adding below to cover all other unhandled exceptions.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiStVbLOJzJQhmjqv6lo18A2hGfJIV5oYkN9MwZfBYEnphxd3VvxAe3rei7dzyOYdSbWn0aR-eCGHzk8cFNNHQDIAwxPMzJsQQ7dUKJt5VrKvlzd9kxNwqn36-DpiJ-4JPk9R9iT20K6o5RCdcUaBVpIM-d4bsz85MaO12Xz3gz-PiL1_ZiODhS2aRq" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="288" data-original-width="806" height="114" src="https://blogger.googleusercontent.com/img/a/AVvXsEiStVbLOJzJQhmjqv6lo18A2hGfJIV5oYkN9MwZfBYEnphxd3VvxAe3rei7dzyOYdSbWn0aR-eCGHzk8cFNNHQDIAwxPMzJsQQ7dUKJt5VrKvlzd9kxNwqn36-DpiJ-4JPk9R9iT20K6o5RCdcUaBVpIM-d4bsz85MaO12Xz3gz-PiL1_ZiODhS2aRq" width="320" /></a></div><br /><br />Topic 4)<p></p><p>To embed some content from request recived in response while handling exceptions, we can use HttpServletRequet and Exception e value can be used to log to know about the exception</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh3Ns-noTchbwku21yRke1KqKIy3tis16z_tqCgrlygytALxFRfh3EmPhjRzmNDtqzt45KxQIShej6bOFP7J68RDXiu5ItTDkXHHFaYcNZA2Wspo2vF-9vChRFj-JKlNC8bekZGxasuRWjLJP3WqVoGvivMG-c9ZR1WgpMNmaQDAtJGab9LttFTEuGs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="320" data-original-width="1456" height="100" src="https://blogger.googleusercontent.com/img/a/AVvXsEh3Ns-noTchbwku21yRke1KqKIy3tis16z_tqCgrlygytALxFRfh3EmPhjRzmNDtqzt45KxQIShej6bOFP7J68RDXiu5ItTDkXHHFaYcNZA2Wspo2vF-9vChRFj-JKlNC8bekZGxasuRWjLJP3WqVoGvivMG-c9ZR1WgpMNmaQDAtJGab9LttFTEuGs=w456-h100" width="456" /></a></div><br /><br /><p></p><p><br /></p><p>FAQ :</p><p>Q) <span style="color: rgba(52,53,65,var(--tw-text-opacity)); font-size: 1rem; white-space: pre-wrap;">Can I use ExceptionHandler annotation in any class?</span></p><p><span style="color: rgba(52,53,65,var(--tw-text-opacity)); font-size: 1rem; white-space: pre-wrap;">Ans: </span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; white-space: pre-wrap;">The <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@ExceptionHandler</code> annotation is used in Spring Framework to define a method that handles exceptions thrown by a controller method.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">In order to use the <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@ExceptionHandler</code> annotation, the method that handles the exception should be defined within a class annotated with <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@ControllerAdvice</code> or <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@RestControllerAdvice</code>. These annotations allow the class to handle exceptions across multiple controller classes.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">So, the answer is no, you cannot use the <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@ExceptionHandler</code> annotation in any class. It should only be used within a class annotated with <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@ControllerAdvice</code> or <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">@RestControllerAdvice</code>.</p><div><div class="w-full border-b border-black/10 dark:border-gray-900/50 text-gray-800 dark:text-gray-100 group bg-gray-50 dark:bg-[#444654]" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; border-color: rgba(0, 0, 0, 0.1); border-image: initial; border-style: solid; border-width: 0px 0px 1px; box-sizing: border-box; color: rgba(52,53,65,var(--tw-text-opacity)); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 14px; width: 742px;"><div class="text-base gap-4 md:gap-6 m-auto md:max-w-2xl lg:max-w-2xl xl:max-w-3xl p-4 md:py-6 flex lg:px-0" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; font-size: 1rem; gap: 1rem; line-height: 1.5rem; margin: auto; padding: 1rem;"><div class="relative flex w-[calc(100%-50px)] flex-col gap-1 md:gap-3 lg:w-[calc(100%-115px)]" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; gap: 0.25rem; position: relative; width: calc(100% - 50px);"><div class="flex justify-between" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; justify-content: space-between;"><div class="text-gray-400 flex self-end lg:self-center justify-center mt-2 gap-3 md:gap-4 lg:gap-1 lg:absolute lg:top-0 lg:translate-x-full lg:right-0 lg:mt-0 lg:pl-2 visible" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-self: flex-end; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(172,172,190,var(--tw-text-opacity)); display: flex; gap: 0.75rem; justify-content: center; margin-top: 0.5rem; visibility: visible;"><button class="p-1 rounded-md hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200 disabled:dark:hover:text-gray-400" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-radius: 0.375rem; border-style: solid; border-width: 0px; cursor: pointer; font-family: inherit; font-size: 16px; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0.25rem;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path></svg></button><button class="p-1 rounded-md hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200 disabled:dark:hover:text-gray-400" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-radius: 0.375rem; border-style: solid; border-width: 0px; cursor: pointer; font-family: inherit; font-size: 16px; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0.25rem;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"></path></svg></button></div></div></div></div></div></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-85019839418371890662023-02-21T12:51:00.001-08:002023-02-21T12:51:44.194-08:00webclient mono and block<div><br></div><div><br></div><div>What is the purpose of java webclient using bodytomono along with block</div><div><br></div><div>Ans:</div><div><br></div><div><br></div><div><br></div><div>In Java's Reactive Streams API, WebClient is a non-blocking, reactive HTTP client that allows you to make HTTP requests to a server and receive the response in a reactive manner.</div><div><br></div><div>bodyToMono() is a method in the WebClient.ResponseSpec interface that allows you to extract the response body as a Mono, which is a reactive stream that emits exactly one item or an error signal. You can use this method to obtain the response body as a Mono of a specific type, such as a String or a custom Java object.</div><div><br></div><div>The block() method is a method on the Mono interface that blocks the current thread until the mono completes, and then returns the emitted value or propagates any error. It's useful when you need to obtain the result of a reactive stream in a synchronous, blocking way.</div><div><br></div><div>So, when you use bodyToMono() along with block() in WebClient, you are essentially making a non-blocking HTTP request to a server, and then waiting for the response to be received and the response body to be extracted as a Mono of a specific type. The block() method is used to block the current thread until the response is received, and then returns the extracted response body as the specified type.</div><div><br></div><div>However, it's important to note that using block() in a reactive application can have negative performance implications, as it may cause thread blocking and disrupt the flow of reactive streams. In general, it's best to avoid using block() whenever possible and instead use reactive operators to process the emitted values of reactive streams.</div><div><br></div><div><br></div><div>o in Java Webclient</div><div><br></div><div><br></div><div>Venkata Ratnam</div><div>What is purpose of mono while using java webclient request with an example</div><div><br></div><div><br></div><div>2 / 2</div><div><br></div><div>As an AI language model, I cannot be certain about what the user is trying to ask. However, I will try my best to provide some general information about Mono in the context of Java WebClient request.</div><div><br></div><div>Mono is a reactive programming library that allows you to work with asynchronous streams of data. It is commonly used in Java web applications to handle non-blocking I/O and handle requests efficiently.</div><div><br></div><div>When using Java WebClient to make HTTP requests, you can use Mono to handle the response asynchronously. For example, consider the following code snippet:</div><div><br></div><div>Mono<String> result = webClient.get()</div><div> .uri("https://example.com")</div><div> .retrieve()</div><div> .bodyToMono(String.class);</div><div><br></div><div>result.subscribe(System.out::println);</div><div><br></div><div>In this example, the bodyToMono method returns a Mono that represents the HTTP response body as a String. You can then subscribe to this Mono to get the result of the request asynchronously.</div><div><br></div><div>By using Mono, you can make your Java web application more responsive and handle multiple requests efficiently.</div><div><br></div><div>Or</div><div><br></div><div>Mono<String> result = webClient.get()</div><div> .uri("https://example.com")</div><div> .retrieve()</div><div> .bodyToMono(String.class)</div><div> .block()</div><div><br></div><div>To make block and no subscribe is required</div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-39990856590457098482023-02-21T12:41:00.001-08:002023-02-21T12:46:10.795-08:00Singleton Java<div><span style="letter-spacing: 0.2px;">Java Singleton Approaches</span><br></div><div><br></div><div><br></div><div>Venkata Ratnam</div><div>What is the better approach of using Singleton in Java? Is it to use Bean annotation or user defined function with synchronized .</div><div><br></div><div>Can you explain with an example </div><div><br></div><div><br></div><div>2 / 2</div><div><br></div><div>No preferences.. But I can explain the two approaches with examples.</div><div><br></div><div>Using Bean annotation:</div><div>This approach involves using the Spring Framework's @Bean annotation to define a singleton bean. Here's an example:</div><div><br></div><div>import org.springframework.context.annotation.Bean;</div><div>import org.springframework.context.annotation.Configuration;</div><div><br></div><div>@Configuration</div><div>public class MyConfiguration {</div><div> </div><div> @Bean</div><div> public MySingletonClass mySingletonClass() {</div><div> return new MySingletonClass();</div><div> }</div><div>}</div><div><br></div><div><br></div><div><br></div><div>In this example, the MySingletonClass will be instantiated only once, and Spring will manage its lifecycle.</div><div><br></div><div>Using user-defined function with synchronized:</div><div>Using user-defined function with synchronized:</div><div>This approach involves using a user-defined function to create and manage the singleton instance. Here's an example </div><div><span style="letter-spacing: 0.2px;">.</span><br></div><div><div>public class MySingletonClass {</div><div><br></div><div> private static MySingletonClass instance;</div><div><br></div><div> private MySingletonClass() {</div><div> }</div><div><br></div><div> public static synchronized MySingletonClass getInstance() {</div><div> if (instance == null) {</div><div> instance = new MySingletonClass();</div><div> }</div><div> return instance;</div><div> }</div><div>}</div></div><div><br></div><div>In this example, the getInstance() method creates the singleton instance and ensures that only one instance is created. The synchronized keyword ensures that the method is thread-safe.</div><div><br></div><div>Both approaches have their advantages and disadvantages. The @Bean annotation is more concise and easier to read, but it requires the use of the Spring Framework. The user-defined function approach is more flexible, but it requires more code and is more error-prone.</div><div><br></div><div><br></div><div>________________&&&&&&&&_______________</div><div><br></div><div>What are the bugs in below Singleton java code?</div><div>Can you correct this by fixing bugs? </div><div><br></div><div>public class MySingletonClass {</div><div><br></div><div> private static MySingletonClass instance;</div><div><br></div><div> private MySingletonClass() {</div><div> }</div><div><br></div><div> public static synchronized MySingletonClass getInstance() {</div><div> if (instance == null) {</div><div> instance = new MySingletonClass();</div><div> }</div><div> return instance;</div><div> }</div><div>}</div><div><br></div><div><br></div><div>2 / 2</div><div><br></div><div>The code for the singleton class seems correct in terms of achieving the singleton design pattern, but it has a few bugs that can be improved. Here are the bugs and their solutions:</div><div><br></div><div>Not using double-checked locking: When multiple threads are involved, the current code can lead to race conditions, where two or more threads try to create an instance of the class simultaneously, resulting in multiple instances of the singleton class. To avoid this, we can use double-checked locking.</div><div><br></div><div>Not using volatile keyword: In the current code, the instance variable is not declared volatile, which means that changes made to it by one thread may not be visible to other threads. To ensure that changes to the instance variable are visible to all threads, we can declare it as volatile.</div><div><br></div><div>Here's the corrected code for the MySingletonClass:</div><div><br></div><div>public class MySingletonClass {</div><div> </div><div> private static volatile MySingletonClass instance;</div><div> </div><div> private MySingletonClass() {</div><div> }</div><div> </div><div> public static MySingletonClass getInstance() {</div><div> if (instance == null) {</div><div> synchronized (MySingletonClass.class) {</div><div> if (instance == null) {</div><div> instance = new MySingletonClass();</div><div> }</div><div> }</div><div> }</div><div> return instance;</div><div> }</div><div>}</div><div><br></div><div><br></div><div>And</div><div><br></div><div>above code is a basic implementation of Singleton in Java, but there are some potential bugs or issues that can arise in certain situations. Here are some of them:</div><div><br></div><div>Multi-threading issue: If multiple threads access the getInstance() method at the same time, there is a possibility of creating multiple instances of the class. To avoid this, we can make the method synchronized to ensure only one thread can access it at a time.</div><div><br></div><div>Reflection: A singleton instance can be created using reflection, which can bypass the getInstance() method and create a new instance. To prevent this, we can throw an exception from the constructor if an instance already exists.</div><div><br></div><div>Serialization: If a singleton class is serialized and then deserialized, it creates a new instance of the class. To prevent this, we can implement the readResolve() method and return the existing instance instead of creating a new one.</div><div><br></div><div>Cloning: If a singleton class is cloned, it creates a new instance of the class. To prevent this, we can override the clone() method and throw an exception.</div><div><br></div><div>Garbage collection: If a singleton class is not used for a long time, it may be garbage collected. To prevent this, we can use a static variable to hold the instance, so that it won't be garbage collected.</div><div><br></div><div>Subclassing: A subclass of a singleton class can be created, which will create a new instance of the class. To prevent this, we can make the constructor private and final, so that it can't be subclassed.</div><div><br></div><div>In summary, the basic implementation of the singleton pattern has some potential bugs that need to be addressed to ensure that it functions correctly in all situations.</div><div><br></div><div><br></div><div><br></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-64112521514437351732023-02-20T15:55:00.001-08:002023-02-20T16:09:17.622-08:00Using Template Page for error handling with ThymeLeaf<p> </p><p>1) To use thymeLeaf add dependency in POM</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi3BUkbXu_wfD7BxToel31-VX620WCOZwoAQY4XkepFR4pabbac8bnu-br5u5UJ_BSDdSzsz2BRJ-mxjIhz6_ENtAe1_xlULfT2cBMLkz7iNbDeVteZxRsbQvnT2pQHtV6Sm4RluO1JJdDQdsn63goSgUYsmB_xSCjvVxcRCquNnkt4HlFHLnvT3kn5" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="135" data-original-width="787" height="55" src="https://blogger.googleusercontent.com/img/a/AVvXsEi3BUkbXu_wfD7BxToel31-VX620WCOZwoAQY4XkepFR4pabbac8bnu-br5u5UJ_BSDdSzsz2BRJ-mxjIhz6_ENtAe1_xlULfT2cBMLkz7iNbDeVteZxRsbQvnT2pQHtV6Sm4RluO1JJdDQdsn63goSgUYsmB_xSCjvVxcRCquNnkt4HlFHLnvT3kn5" width="320" /></a></div><br />2) Add a new file in resources/templates (Probably a static html page with error.html)<p></p><p>3) Check if any applicatoin.properties need to be added</p><p><br /></p><p>and</p><p>if we want to response with our own HTTP Error code: @ResponseStatus Annotation can be used</p><p>where when user tries access the end point /people/{id} then along with the function result, it returns HTTP error code as Not found (404)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiIS9mhTYTHfPpm5PKk95_Tw9xkSRSRUtjYTQ3jIvBf5IiTDhIbbN_ep5NupLIRb8KsMM66IOUGiNa0oWkEP9d_nwUZKw3bivTogHPdflmrEgPq8q0Yfq7mSvfoC5JSmD3QP4BHaRKxCr8ymstBgUh8p2mzUYMjo3ITBzd___WtqY9wmRVHzsUJixaE" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="110" data-original-width="560" height="63" src="https://blogger.googleusercontent.com/img/a/AVvXsEiIS9mhTYTHfPpm5PKk95_Tw9xkSRSRUtjYTQ3jIvBf5IiTDhIbbN_ep5NupLIRb8KsMM66IOUGiNa0oWkEP9d_nwUZKw3bivTogHPdflmrEgPq8q0Yfq7mSvfoC5JSmD3QP4BHaRKxCr8ymstBgUh8p2mzUYMjo3ITBzd___WtqY9wmRVHzsUJixaE" width="320" /></a></div><br />To be practical we can do this when any exception is raised in the applicable as below<p></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiPgFbEsNVy1FkkUfA-QXRBAgx-gcNvuxzsohIFtFwCKDcGxZ__5475zrB1DK7AOQZ0SqqloF8VP_zw6cnGnLN1tDrLhyvVxff3iktej3Ey6CR9F2Vd7gyXS_5EyakZA9wTRUyFNHq2OEYx5KloatEFLVYAwRiI5Zf3fh-sX00ixdmLVz3FDP3yFqgk" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="238" data-original-width="1086" height="95" src="https://blogger.googleusercontent.com/img/a/AVvXsEiPgFbEsNVy1FkkUfA-QXRBAgx-gcNvuxzsohIFtFwCKDcGxZ__5475zrB1DK7AOQZ0SqqloF8VP_zw6cnGnLN1tDrLhyvVxff3iktej3Ey6CR9F2Vd7gyXS_5EyakZA9wTRUyFNHq2OEYx5KloatEFLVYAwRiI5Zf3fh-sX00ixdmLVz3FDP3yFqgk=w434-h95" width="434" /></a></div><p><br /></p><p>results 404 with the along with message "Cound not find the person" as message. Exception is there because the site.properties is not having the values which are explained in previous posts.<a href="https://blogger.googleusercontent.com/img/a/AVvXsEiWCJ3QAykcCMKQ5B0Na75fXYD0EcCIbHNFaAotp-EMGz7C-wecwg1URiQc6JnZSWQEjVNERvHuSA3vxbT1bwlBKkgtB8ciScgvQOKdJK1yzsvdx2NbhuGELzBzZY1qiqQutXE8EMITEYKNAgxNySGSYJ12k0p-mYl-jaSbH2tUr9iaIZbMOfAjAbLM" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="812" data-original-width="2698" height="173" src="https://blogger.googleusercontent.com/img/a/AVvXsEiWCJ3QAykcCMKQ5B0Na75fXYD0EcCIbHNFaAotp-EMGz7C-wecwg1URiQc6JnZSWQEjVNERvHuSA3vxbT1bwlBKkgtB8ciScgvQOKdJK1yzsvdx2NbhuGELzBzZY1qiqQutXE8EMITEYKNAgxNySGSYJ12k0p-mYl-jaSbH2tUr9iaIZbMOfAjAbLM=w575-h173" width="575" /></a></p><p><br /><br /></p><p><br /></p>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-70013449802369354792023-02-20T15:51:00.001-08:002023-02-20T15:55:28.155-08:00Exception handling in Spring using ErrorControler interface<p> 1) Using try and catch</p><p><br /></p><p>Checked Exceptions needs to be handled by using try/catch or by using throws.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEitlEgoJGd9y-SqoJmXk9o-a01VbGf7aysURqCnM1CQJICiu_3jus-CmHWScobXpa_p7iImkMxvP0s85vCZpI26kisvTsuodMsyPgFQ9iPE8p9LlJdeMGdgKkyyRBMQGMVVrfryQorf0YpMFdRwB3QFkYo-24S5mZkpzxEgbNO8Ybv2geav69uKwa1w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="251" data-original-width="371" height="216" src="https://blogger.googleusercontent.com/img/a/AVvXsEitlEgoJGd9y-SqoJmXk9o-a01VbGf7aysURqCnM1CQJICiu_3jus-CmHWScobXpa_p7iImkMxvP0s85vCZpI26kisvTsuodMsyPgFQ9iPE8p9LlJdeMGdgKkyyRBMQGMVVrfryQorf0YpMFdRwB3QFkYo-24S5mZkpzxEgbNO8Ybv2geav69uKwa1w" width="320" /></a></div><br /><p>3) Template Pages</p><p>- Error code based HTML Pages</p><p>- Replaces the default whitelable page</p><p>- Can use template enginers like Thymeleaf of Spring</p><p>- pages can be static or dynamic </p><p>- Best way is also is by using Spring Annotations (examples uses Spring 5 SDK)</p><p><br /></p><p>3A) While label page - Below error came when user tried to access unavailable page</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiEs0XZJW9R8eOlPtz69O0kdL7rTvYXnTVgLSEw2sj7Mhf8SU2eSuHnjYDIVoasucdT6pY289kIc2OXBAzKreKCPoptPiILfGwMnDwpX_984AfKL7f6qF4EIBH9_nssOagIQSO8_LcTuYgO9mhrYv0walCncKsOKQEM0NkSDFi0-0A0Uj_K2kunGO-M" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="274" data-original-width="825" height="153" src="https://blogger.googleusercontent.com/img/a/AVvXsEiEs0XZJW9R8eOlPtz69O0kdL7rTvYXnTVgLSEw2sj7Mhf8SU2eSuHnjYDIVoasucdT6pY289kIc2OXBAzKreKCPoptPiILfGwMnDwpX_984AfKL7f6qF4EIBH9_nssOagIQSO8_LcTuYgO9mhrYv0walCncKsOKQEM0NkSDFi0-0A0Uj_K2kunGO-M=w462-h153" width="462" /></a></div><br /><p>DANGERS OF ABOVE page:</p><p>it shows that application dont have /error page. </p><p>As the page is not available it showed .. </p><p>in case of exception at applicatoin, this shows all stack trace and exposes the sensitive info to user like below</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj37lImfkxjBfLLr7zYVpWFTirPwwo7ZFc2M-k4-3YSssKmvUUvD4vsOyOjXo9-dDAibu-t7dCq5rYGeq3YfmkLUmSYJh9ttWaH9RpTtV8p5YivXTJu6CYFJpIitJImgU_4ZXs8HqpDNeyLwLCuPLdAVNNQycQjwUXymvYrAM4sQdZGOlXMMLCkMTHs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="860" data-original-width="1220" height="334" src="https://blogger.googleusercontent.com/img/a/AVvXsEj37lImfkxjBfLLr7zYVpWFTirPwwo7ZFc2M-k4-3YSssKmvUUvD4vsOyOjXo9-dDAibu-t7dCq5rYGeq3YfmkLUmSYJh9ttWaH9RpTtV8p5YivXTJu6CYFJpIitJImgU_4ZXs8HqpDNeyLwLCuPLdAVNNQycQjwUXymvYrAM4sQdZGOlXMMLCkMTHs=w473-h334" width="473" /></a></div><br /><p> i) We can solve this also by using application.properties:by adding </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgBCEFgnAbliKRTm9TJhfWbE7P5Wdb4iN6A39TInk82Ad68lEQMkWu6LGQIb8nJaQa9xouJuw5LQ8YwldZMM2CVQZUlE_bGgBNkzfiUO5LaYprUJL9pdbirZ8V61x5hJD5X3i3UMtux5pTOt7JKpnI1YBnSTb3xYlniD8oaO6OKc8hI_yrJc2nujp8a" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="39" data-original-width="428" height="29" src="https://blogger.googleusercontent.com/img/a/AVvXsEgBCEFgnAbliKRTm9TJhfWbE7P5Wdb4iN6A39TInk82Ad68lEQMkWu6LGQIb8nJaQa9xouJuw5LQ8YwldZMM2CVQZUlE_bGgBNkzfiUO5LaYprUJL9pdbirZ8V61x5hJD5X3i3UMtux5pTOt7JKpnI1YBnSTb3xYlniD8oaO6OKc8hI_yrJc2nujp8a" width="320" /></a></div><br /><p>we get below without stack trace</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiA1x3r7ZRtdiDkxPcKORuaJnYIeTkYvYQOO4Ma024hOlvff0pVrOy60wHUwWO8uPKp1aTdjiUD9dDPYOgvMKwjOJy4DopjiObpDfBpSMiG8TJmFNmwSylngFVkBxW4vHfRj-8seHNqKeJU06h0RCwMptufIbKPjpFwWBNNbnJAuW2tAzts5bizMeSG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="146" data-original-width="459" height="102" src="https://blogger.googleusercontent.com/img/a/AVvXsEiA1x3r7ZRtdiDkxPcKORuaJnYIeTkYvYQOO4Ma024hOlvff0pVrOy60wHUwWO8uPKp1aTdjiUD9dDPYOgvMKwjOJy4DopjiObpDfBpSMiG8TJmFNmwSylngFVkBxW4vHfRj-8seHNqKeJU06h0RCwMptufIbKPjpFwWBNNbnJAuW2tAzts5bizMeSG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">ii) and by adding both as below we wont see the message also</div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBwTOHrj9in4Y_vwdpNcJ01btbzSbiFDpsOwZa6yos0KlKbfeAEGqIarLUTm08empzJNml8UhUhiLvkxTiuGmQoSgy27-uPQM26-rRhEvCorClYzLvc-MAjxrbqt5a_cNMoWy7-TzKI8u1ehQppvfd5lyiNxiUD1kzVn2KlOMvIdUyodjKC6iUwTWy" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="74" data-original-width="389" height="61" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBwTOHrj9in4Y_vwdpNcJ01btbzSbiFDpsOwZa6yos0KlKbfeAEGqIarLUTm08empzJNml8UhUhiLvkxTiuGmQoSgy27-uPQM26-rRhEvCorClYzLvc-MAjxrbqt5a_cNMoWy7-TzKI8u1ehQppvfd5lyiNxiUD1kzVn2KlOMvIdUyodjKC6iUwTWy" width="320" /></a></div><br /><p>as below</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjCEJwvOXFL_IUjFYhmuxjm7I8cXY4tqta1tH00r4WE7yX_ZqUI_9lUixBTIJ-kg8R98k5R_pQ1sitOAPv1g0zGT2XvDkpfsI25AU0lZpgN66jRq98pAJgEkyUbQVLXzycfqiYZk9k4eIANepf8w4_CLQOXeBrfoyt9zygLcvbavA3A7NtzPg65tDPm" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="124" data-original-width="419" height="95" src="https://blogger.googleusercontent.com/img/a/AVvXsEjCEJwvOXFL_IUjFYhmuxjm7I8cXY4tqta1tH00r4WE7yX_ZqUI_9lUixBTIJ-kg8R98k5R_pQ1sitOAPv1g0zGT2XvDkpfsI25AU0lZpgN66jRq98pAJgEkyUbQVLXzycfqiYZk9k4eIANepf8w4_CLQOXeBrfoyt9zygLcvbavA3A7NtzPg65tDPm" width="320" /></a></div><div><br /></div><div><br /></div>iii) We can also re-direct to default page in case of error (routing to default end point) . Below configuration server.error.path allows, when the error scenario occurs the default end point which is configured (here /people) will be called.<div><br /></div><div>But the HTTP Error code is 500 (Internal Server error)<br /><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjT-0KGoXXj24rpwKDBu7kMLg6aBOUz953rwKJs9jn2dcEJ342AnrbDr2oelgTFPPXwHhGcKD9FqIE34WLADUdhwVPwVJAPn38QQynjNGY35d_oh0bJa4rWsc7mVrToov-8HBGVh1iseC19j6OoO8ONch4VE7xhAlwfbiDVhTb3fAgPsBRDBD2FTO6c" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="104" data-original-width="528" height="63" src="https://blogger.googleusercontent.com/img/a/AVvXsEjT-0KGoXXj24rpwKDBu7kMLg6aBOUz953rwKJs9jn2dcEJ342AnrbDr2oelgTFPPXwHhGcKD9FqIE34WLADUdhwVPwVJAPn38QQynjNGY35d_oh0bJa4rWsc7mVrToov-8HBGVh1iseC19j6OoO8ONch4VE7xhAlwfbiDVhTb3fAgPsBRDBD2FTO6c" width="320" /></a></div><div><br /></div>The above is works for REST ful interface (But if accessing web browser, the empty page will come but not the result of default end point). But it wont expose the stack trace and message. Becaue the error page while accessing using web browser is coming from Tomcat and not from applicatoin. (as below)</div><div><br /></div><div>So, for error page tomcat configuratoin can be done.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhhRyaGEiRtkRZ47BLPl2EwemRSizhizx-nbLJUwfgD2ciHq9I9Z5MfzzFTKqUyElJU5xNvYp0Rz_gPMpGjPn48GgPvndtwKaE83B1LWrrahUB2TyMl6OHcKOQiluwMgNQdoI0PHp8WTidhvIhm9NJvj-Fzc409AlB1qJdT-_eAfQEkshuWHDHzaIjM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="804" data-original-width="1233" height="209" src="https://blogger.googleusercontent.com/img/a/AVvXsEhhRyaGEiRtkRZ47BLPl2EwemRSizhizx-nbLJUwfgD2ciHq9I9Z5MfzzFTKqUyElJU5xNvYp0Rz_gPMpGjPn48GgPvndtwKaE83B1LWrrahUB2TyMl6OHcKOQiluwMgNQdoI0PHp8WTidhvIhm9NJvj-Fzc409AlB1qJdT-_eAfQEkshuWHDHzaIjM" width="320" /></a></div><br /><div><p><br /></p><p><br /></p><p>4) To maintain same error information whether it is accessible using REST or Web interface: is </p><p>in Spring is implementing ErrorController interface.</p><p></p><p>which is our own Error Controller</p><p>Map the error page to error page so that all exceptions will point to the page Or error end point.</p><p>Here we can implement and return how we want it </p><p>and</p><p>this is applicable for all error exceptions (Global error handling) . So that sensitive stack trace wont be exposed to the end user</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEidpBLfxA0znj61YywBFZR2qpOsVpblgcPzFEHc__2pf6BJV9rtEiBCwY_5UhgcWTix5OnQqyrhIqpPvOUBNTIbSz-MZ9ui_K7c38ou9dM3LOalzL3fCe4MWoAGRzwkcSFmsXiMwzMJQXc-M9IYawwvJ-Wfsmyn6sRjw-Aopy_IoZm3D6XdCnvdJOlf" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="318" data-original-width="831" height="122" src="https://blogger.googleusercontent.com/img/a/AVvXsEidpBLfxA0znj61YywBFZR2qpOsVpblgcPzFEHc__2pf6BJV9rtEiBCwY_5UhgcWTix5OnQqyrhIqpPvOUBNTIbSz-MZ9ui_K7c38ou9dM3LOalzL3fCe4MWoAGRzwkcSFmsXiMwzMJQXc-M9IYawwvJ-Wfsmyn6sRjw-Aopy_IoZm3D6XdCnvdJOlf" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">using Browser</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjd7a4DPpRts91dgxD3G6Te4lXciJlj7ErNxBqHG7teiwtOARtjOKJq_2a6G6HxYWws223m9ZyQSGl7LpF7RvrnTMSM3lXA7NSjcdsxlHSXMQiOGSSa5ZLK_YRaT58pcZABdIMySQ_dEg6b70FFpSc1hrOkEjsU43o2rypYa13kBbNGKG5MY9HOdB1H" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="214" data-original-width="528" height="130" src="https://blogger.googleusercontent.com/img/a/AVvXsEjd7a4DPpRts91dgxD3G6Te4lXciJlj7ErNxBqHG7teiwtOARtjOKJq_2a6G6HxYWws223m9ZyQSGl7LpF7RvrnTMSM3lXA7NSjcdsxlHSXMQiOGSSa5ZLK_YRaT58pcZABdIMySQ_dEg6b70FFpSc1hrOkEjsU43o2rypYa13kBbNGKG5MY9HOdB1H" width="320" /></a></div><br />Using Postman REST<p></p></div></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhSU3zJEpETGCPJldUDR0UHIEWrQpUNzldGi_lyzHxxqG0YVSy90gLIs5MFdgTkJGXSZGZWNWeHNls8kBEcNUSWevG5B_RjxcClc97CxjUx_5jZHcKqeQvhCblgZnHX3XZzFrYmK6h1roaAeKcGcJHvj6JrGKMQZlNJLrECQ7WLLVtP5IJE5b9XRTx8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="183" data-original-width="1307" height="45" src="https://blogger.googleusercontent.com/img/a/AVvXsEhSU3zJEpETGCPJldUDR0UHIEWrQpUNzldGi_lyzHxxqG0YVSy90gLIs5MFdgTkJGXSZGZWNWeHNls8kBEcNUSWevG5B_RjxcClc97CxjUx_5jZHcKqeQvhCblgZnHX3XZzFrYmK6h1roaAeKcGcJHvj6JrGKMQZlNJLrECQ7WLLVtP5IJE5b9XRTx8" width="320" /></a></div><br /><br /></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-77838472328337235642023-02-20T15:12:00.004-08:002023-02-20T15:12:55.562-08:00Do you know?<p> - adding</p><p>debug=true</p><p>in applicatoin.properties </p><p>not only prints debug level information </p><p>and</p><p>also it prints autocongiruation report. (Which matched and which does not match)</p>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-2817122836488076672023-02-16T15:23:00.000-08:002023-02-16T15:23:16.253-08:00Lombok Sample @SneakyThrows along with Generated Code<p> </p><p><br /></p><p><br /></p><pre style="background-color: white; color: #080808; font-family: 'JetBrains Mono',monospace; font-size: 9.8pt;"><span style="color: #0033b3;">import </span><span style="color: black;">lombok.</span><span style="color: #9e880d;">SneakyThrows</span>;<br /><br /><span style="color: #0033b3;">public class </span><span style="color: black;">FileUtilsSneakyThrows </span>{<br /><br /> <span style="color: #9e880d;">@SneakyThrows<br /></span><span style="color: #9e880d;"> </span><span style="color: #0033b3;">public static </span><span style="color: black;">String </span><span style="color: #00627a;">readFile</span>(<span style="color: black;">File </span>file) {<br /> <span style="color: #0033b3;">byte</span>[] <span style="color: black;">bytes </span>= <span style="color: #0033b3;">new byte</span>[(<span style="color: #0033b3;">int</span>) file.length()];<br /> <span style="color: black;">FileInputStream input </span>= <span style="color: #0033b3;">new </span>FileInputStream(file);<br /> <span style="color: black;">input</span>.read(<span style="color: black;">bytes</span>);<br /> <span style="color: #0033b3;">return new </span>String(<span style="color: black;">bytes</span>);<br /> }<br /><br /> <span style="color: #0033b3;">public static void </span><span style="color: #00627a;">main</span>(<span style="color: black;">String</span>[] args) {<br /> <span style="color: black;">File file </span>= <span style="color: #0033b3;">new </span>File(<span style="color: #067d17;">"test.txt"</span>);<br /> <span style="color: black;">String content </span>= <span style="color: black;">FileUtilsSneakyThrows</span>.<span style="font-style: italic;">readFile</span>(<span style="color: black;">file</span>);<br /> <span style="color: black;">System</span>.<span style="color: #871094; font-style: italic;">out</span>.println(<span style="color: black;">content</span>);<br /> }<br /></pre><p><span style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">}</span></p><p><br /></p><p>Generated:</p><pre style="background-color: white; color: #080808; font-family: 'JetBrains Mono',monospace; font-size: 9.8pt;"><span style="color: #0033b3;">import </span><span style="color: black;">java.io.File</span>;<br /><span style="color: #0033b3;">import </span><span style="color: black;">java.io.FileInputStream</span>;<br /><br /><span style="color: #0033b3;">public class </span><span style="color: black;">FileUtilsSneakyThrows </span>{<br /> <span style="color: #0033b3;">public </span><span style="color: #00627a;">FileUtilsSneakyThrows</span>() {<br /> }<br /><br /> <span style="color: #0033b3;">public static </span><span style="color: black;">String </span><span style="color: #00627a;">readFile</span>(<span style="color: black;">File </span>file) {<br /> <span style="color: #0033b3;">try </span>{<br /> <span style="color: #0033b3;">byte</span>[] <span style="color: black;">bytes </span>= <span style="color: #0033b3;">new byte</span>[(<span style="color: #0033b3;">int</span>)file.length()];<br /> <span style="color: black;">FileInputStream input </span>= <span style="color: #0033b3;">new </span>FileInputStream(file);<br /> <span style="color: black;">input</span>.read(<span style="color: black;">bytes</span>);<br /> <span style="color: #0033b3;">return new </span>String(<span style="color: black;">bytes</span>);<br /> } <span style="color: #0033b3;">catch </span>(<span style="color: black;">Throwable </span>var3) {<br /> <span style="color: #0033b3;">throw </span>var3;<br /> }<br /> }<br /><br /> <span style="color: #0033b3;">public static void </span><span style="color: #00627a;">main</span>(<span style="color: black;">String</span>[] args) {<br /> <span style="color: black;">File file </span>= <span style="color: #0033b3;">new </span>File(<span style="color: #067d17;">"test.txt"</span>);<br /> <span style="color: black;">String content </span>= <span style="font-style: italic;">readFile</span>(<span style="color: black;">file</span>);<br /> <span style="color: black;">System</span>.<span style="color: #871094; font-style: italic;">out</span>.println(<span style="color: black;">content</span>);<br /> }<br /></pre><p><span style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">}</span> </p><blockquote><p> </p></blockquote>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-10711048905998210752023-02-16T15:20:00.004-08:002023-02-16T15:26:02.729-08:00Lombok Sample @Builder along with Generated Code<p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; text-align: justify; white-space: pre-wrap;">@Builder is an annotation provided by Lombok that can help reduce boilerplate code for creating objects with a builder pattern. The builder pattern is a design pattern that separates the construction of an object from its representation. This allows for more readable and maintainable code, as well as providing more flexibility in object creation.</p><p style="text-align: justify;"><span style="background-color: #f7f7f8; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;">With @Builder, Lombok generates code that allows you to create instances of a class using a fluent API. The generated code includes a builder class that has methods for setting the values of the class's fields, and a build() method that creates and returns an instance of the class.</span> </p><p><br /></p><p>Usage: </p><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: black;">Movie </span><span style="color: #871094;">movie </span>= <span style="color: black;">Movie</span>.<span style="font-style: italic;">builder</span>()<br /> .Name(<span style="color: #067d17;">"RRR"</span>)<br /> .Year(<span style="color: #1750eb;">2022</span>)<br /> .build();</pre><p><br /></p><p>Example:</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"><span style="color: #0033b3;">import </span><span style="color: black;">lombok.</span><span style="color: #9e880d;">Builder</span>;</pre></blockquote><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"><br /></pre><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"><span style="color: #9e880d;">@Builder</span></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"><span style="color: #0033b3;">public class </span><span style="color: black;">PersonBuilder </span>{</pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"> <span style="color: black;">String </span><span style="color: #871094;">Name</span>;</pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;"> <span style="color: #0033b3;">int </span><span style="color: #871094;">Age</span>;</pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt; text-align: left;">}</pre></blockquote><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">Generated :</pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /></pre><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><pre style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #8c8c8c; font-style: italic;">//<br /></span><span style="color: #8c8c8c; font-style: italic;">// Source code recreated from a .class file by IntelliJ IDEA<br /></span><span style="color: #8c8c8c; font-style: italic;">// (powered by FernFlower decompiler)<br /></span><span style="color: #8c8c8c; font-style: italic;">//<br /></span><br /><span style="color: #0033b3;">public class </span><span style="color: black;">PersonBuilder </span>{<br /> <span style="color: black;">String </span><span style="color: #871094;">Name</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: #871094;">Age</span>;<br /><br /> <span style="color: #00627a;">PersonBuilder</span>(<span style="color: #0033b3;">final </span><span style="color: black;">String </span>Name, <span style="color: #0033b3;">final int </span>Age) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Name </span>= Name;<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Age </span>= Age;<br /> }<br /><br /> <span style="color: #0033b3;">public static </span><span style="color: black;">PersonBuilder</span>.<span style="color: black;">PersonBuilderBuilder </span><span style="color: #00627a;">builder</span>() {<br /> <span style="color: #0033b3;">return new </span><span style="color: black;">PersonBuilder</span>.PersonBuilderBuilder();<br /> }<br /><br /> <span style="color: #0033b3;">public static class </span><span style="color: black;">PersonBuilderBuilder </span>{<br /> <span style="color: #0033b3;">private </span><span style="color: black;">String </span><span style="color: #871094;">Name</span>;<br /> <span style="color: #0033b3;">private int </span><span style="color: #871094;">Age</span>;<br /><br /> <span style="color: #00627a;">PersonBuilderBuilder</span>() {<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">PersonBuilder</span>.<span style="color: black;">PersonBuilderBuilder </span><span style="color: #00627a;">Name</span>(<span style="color: #0033b3;">final </span><span style="color: black;">String </span>Name) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Name </span>= Name;<br /> <span style="color: #0033b3;">return this</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">PersonBuilder</span>.<span style="color: black;">PersonBuilderBuilder </span><span style="color: #00627a;">Age</span>(<span style="color: #0033b3;">final int </span>Age) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Age </span>= Age;<br /> <span style="color: #0033b3;">return this</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">PersonBuilder </span><span style="color: #00627a;">build</span>() {<br /> <span style="color: #0033b3;">return new </span>PersonBuilder(<span style="color: #0033b3;">this</span>.<span style="color: #871094;">Name</span>, <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Age</span>);<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">String </span><span style="color: #00627a;">toString</span>() {<br /> <span style="color: #0033b3;">return </span><span style="color: #067d17;">"PersonBuilder.PersonBuilderBuilder(Name=" </span>+ <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Name </span>+ <span style="color: #067d17;">", Age=" </span>+ <span style="color: #0033b3;">this</span>.<span style="color: #871094;">Age </span>+ <span style="color: #067d17;">")"</span>;<br /> }<br /> }<br />}</pre></pre>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-19069650220589444842023-02-16T15:11:00.004-08:002023-02-16T15:24:56.866-08:00Lombok Sample @Data along with Generated Code<p> <span style="background-color: #f7f7f8; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;">@Data, on the other hand, generates boilerplate code for a class that includes fields, getters, setters, equals, hashCode, and toString methods.</span></p><p>Original: </p><blockquote><p> <span style="color: #0033b3; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">import </span><span style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">lombok.</span><span style="color: #9e880d; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">Data</span><span style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">;</span></p><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><br /><span style="color: #9e880d;">@Data<br /></span><span style="color: #0033b3;">public class </span><span style="color: black;">Person1 </span>{<br /> <span style="color: black;">String </span><span style="color: #871094;">name</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: #871094;">age</span>;<br />}</pre></blockquote><p><br /></p><p>Generated :</p><p><br /></p><blockquote><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #8c8c8c; font-style: italic;">//<br /></span><span style="color: #8c8c8c; font-style: italic;">// Source code recreated from a .class file by IntelliJ IDEA<br /></span><span style="color: #8c8c8c; font-style: italic;">// (powered by FernFlower decompiler)<br /></span><span style="color: #8c8c8c; font-style: italic;">//<br /></span><span style="color: #0033b3;">public class </span><span style="color: black;">Person1 </span>{<br /> <span style="color: black;">String </span><span style="color: #871094;">name</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: #871094;">age</span>;<br /><br /> <span style="color: #0033b3;">public </span><span style="color: #00627a;">Person1</span>() {<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">String </span><span style="color: #00627a;">getName</span>() {<br /> <span style="color: #0033b3;">return this</span>.<span style="color: #871094;">name</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public int </span><span style="color: #00627a;">getAge</span>() {<br /> <span style="color: #0033b3;">return this</span>.<span style="color: #871094;">age</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public void </span><span style="color: #00627a;">setName</span>(<span style="color: #0033b3;">final </span><span style="color: black;">String </span>name) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">name </span>= name;<br /> }<br /><br /> <span style="color: #0033b3;">public void </span><span style="color: #00627a;">setAge</span>(<span style="color: #0033b3;">final int </span>age) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">age </span>= age;<br /> }<br /><br /> <span style="color: #0033b3;">public boolean </span><span style="color: #00627a;">equals</span>(<span style="color: #0033b3;">final </span><span style="color: black;">Object </span>o) {<br /> <span style="color: #0033b3;">if </span>(o == <span style="color: #0033b3;">this</span>) {<br /> <span style="color: #0033b3;">return true</span>;<br /> } <span style="color: #0033b3;">else if </span>(!(o <span style="color: #0033b3;">instanceof </span><span style="color: black;">Person1</span>)) {<br /> <span style="color: #0033b3;">return false</span>;<br /> } <span style="color: #0033b3;">else </span>{<br /> <span style="color: black;">Person1 other </span>= (<span style="color: black;">Person1</span>)o;<br /> <span style="color: #0033b3;">if </span>(!<span style="color: black;">other</span>.canEqual(<span style="color: #0033b3;">this</span>)) {<br /> <span style="color: #0033b3;">return false</span>;<br /> } <span style="color: #0033b3;">else if </span>(<span style="color: #0033b3;">this</span>.getAge() != <span style="color: black;">other</span>.getAge()) {<br /> <span style="color: #0033b3;">return false</span>;<br /> } <span style="color: #0033b3;">else </span>{<br /> <span style="color: black;">Object this$name </span>= <span style="color: #0033b3;">this</span>.getName();<br /> <span style="color: black;">Object other$name </span>= <span style="color: black;">other</span>.getName();<br /> <span style="color: #0033b3;">if </span>(<span style="color: black;">this$name </span>== <span style="color: #0033b3;">null</span>) {<br /> <span style="color: #0033b3;">if </span>(<span style="color: black;">other$name </span>!= <span style="color: #0033b3;">null</span>) {<br /> <span style="color: #0033b3;">return false</span>;<br /> }<br /> } <span style="color: #0033b3;">else if </span>(!<span style="color: black;">this$name</span>.equals(<span style="color: black;">other$name</span>)) {<br /> <span style="color: #0033b3;">return false</span>;<br /> }<br /><br /> <span style="color: #0033b3;">return true</span>;<br /> }<br /> }<br /> }<br /><br /> <span style="color: #0033b3;">protected boolean </span><span style="color: #00627a;">canEqual</span>(<span style="color: #0033b3;">final </span><span style="color: black;">Object </span>other) {<br /> <span style="color: #0033b3;">return </span>other <span style="color: #0033b3;">instanceof </span><span style="color: black;">Person1</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public int </span><span style="color: #00627a;">hashCode</span>() {<br /> <span style="color: #0033b3;">int </span><span style="color: black;">PRIME </span>= <span style="color: #0033b3;">true</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: black;">result </span>= <span style="color: #1750eb;">1</span>;<br /> <span style="color: #0033b3;">int </span>result = result * <span style="color: #1750eb;">59 </span>+ <span style="color: #0033b3;">this</span>.getAge();<br /> <span style="color: black;">Object $name </span>= <span style="color: #0033b3;">this</span>.getName();<br /> result = result * <span style="color: #1750eb;">59 </span>+ (<span style="color: black;">$name </span>== <span style="color: #0033b3;">null </span>? <span style="color: #1750eb;">43 </span>: <span style="color: black;">$name</span>.hashCode());<br /> <span style="color: #0033b3;">return </span>result;<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">String </span><span style="color: #00627a;">toString</span>() {<br /> <span style="color: #0033b3;">return </span><span style="color: #067d17;">"Person1(name=" </span>+ <span style="color: #0033b3;">this</span>.getName() + <span style="color: #067d17;">", age=" </span>+ <span style="color: #0033b3;">this</span>.getAge() + <span style="color: #067d17;">")"</span>;<br /> }<br /></pre><p><span style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">}</span> </p></blockquote>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-82570195610130254882023-02-16T15:09:00.003-08:002023-02-16T15:24:32.885-08:00Lombok Sample @Value along with Generated Code<p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; white-space: pre-wrap;">@Value and @Data are both annotations provided by Lombok that can help reduce boilerplate code in Java applications.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">@Value is used to create immutable objects with final fields, getter methods, and a constructor that accepts all fields as arguments. This annotation automatically generates the following code for a class:</p><ul style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">A private final field for each non-static field in the class</li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">A public getter method for each field</li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">A constructor that accepts all fields as arguments</li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">An equals method that compares all fields for equality</li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">A hashCode method that uses all fields to generate a hash code</li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; padding-left: 0.375em; position: relative;">A toString method that includes the class name and all field values</li></ul><p><br /></p><p>Original Code: </p><blockquote><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #0033b3;">import </span><span style="color: black;">lombok.</span><span style="color: #9e880d;">Value</span>;<br /><br /><span style="color: #9e880d;">@Value<br /></span><span style="color: #0033b3;">public class </span><span style="color: black;">Person </span>{<br /> <span style="color: black;">String </span><span style="color: #871094;">name</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: #871094;">age</span>;<br />}<br /></pre></blockquote><p>Generated Code:</p><blockquote><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><span style="color: #8c8c8c; font-style: italic;">//<br /></span><span style="color: #8c8c8c; font-style: italic;">// Source code recreated from a .class file by IntelliJ IDEA<br /></span><span style="color: #8c8c8c; font-style: italic;">// (powered by FernFlower decompiler)<br /></span><span style="color: #8c8c8c; font-style: italic;">//<br /></span><span style="color: #8c8c8c; font-style: italic;"><br /></span><span style="color: #0033b3;">public final class </span><span style="color: black;">Person </span>{<br /> <span style="color: #0033b3;">private final </span><span style="color: black;">String </span><span style="color: #871094;">name</span>;<br /> <span style="color: #0033b3;">private final int </span><span style="color: #871094;">age</span>;<br /><br /> <span style="color: #0033b3;">public </span><span style="color: #00627a;">Person</span>(<span style="color: #0033b3;">final </span><span style="color: black;">String </span>name, <span style="color: #0033b3;">final int </span>age) {<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">name </span>= name;<br /> <span style="color: #0033b3;">this</span>.<span style="color: #871094;">age </span>= age;<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">String </span><span style="color: #00627a;">getName</span>() {<br /> <span style="color: #0033b3;">return this</span>.<span style="color: #871094;">name</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public int </span><span style="color: #00627a;">getAge</span>() {<br /> <span style="color: #0033b3;">return this</span>.<span style="color: #871094;">age</span>;<br /> }<br /><br /> <span style="color: #0033b3;">public boolean </span><span style="color: #00627a;">equals</span>(<span style="color: #0033b3;">final </span><span style="color: black;">Object </span>o) {<br /> <span style="color: #0033b3;">if </span>(o == <span style="color: #0033b3;">this</span>) {<br /> <span style="color: #0033b3;">return true</span>;<br /> } <span style="color: #0033b3;">else if </span>(!(o <span style="color: #0033b3;">instanceof </span><span style="color: black;">Person</span>)) {<br /> <span style="color: #0033b3;">return false</span>;<br /> } <span style="color: #0033b3;">else </span>{<br /> <span style="color: black;">Person other </span>= (<span style="color: black;">Person</span>)o;<br /> <span style="color: #0033b3;">if </span>(<span style="color: #0033b3;">this</span>.getAge() != <span style="color: black;">other</span>.getAge()) {<br /> <span style="color: #0033b3;">return false</span>;<br /> } <span style="color: #0033b3;">else </span>{<br /> <span style="color: black;">Object this$name </span>= <span style="color: #0033b3;">this</span>.getName();<br /> <span style="color: black;">Object other$name </span>= <span style="color: black;">other</span>.getName();<br /> <span style="color: #0033b3;">if </span>(<span style="color: black;">this$name </span>== <span style="color: #0033b3;">null</span>) {<br /> <span style="color: #0033b3;">if </span>(<span style="color: black;">other$name </span>!= <span style="color: #0033b3;">null</span>) {<br /> <span style="color: #0033b3;">return false</span>;<br /> }<br /> } <span style="color: #0033b3;">else if </span>(!<span style="color: black;">this$name</span>.equals(<span style="color: black;">other$name</span>)) {<br /> <span style="color: #0033b3;">return false</span>;<br /> }<br /><br /> <span style="color: #0033b3;">return true</span>;<br /> }<br /> }<br /> }<br /><br /> <span style="color: #0033b3;">public int </span><span style="color: #00627a;">hashCode</span>() {<br /> <span style="color: #0033b3;">int </span><span style="color: black;">PRIME </span>= <span style="color: #0033b3;">true</span>;<br /> <span style="color: #0033b3;">int </span><span style="color: black;">result </span>= <span style="color: #1750eb;">1</span>;<br /> <span style="color: #0033b3;">int </span>result = result * <span style="color: #1750eb;">59 </span>+ <span style="color: #0033b3;">this</span>.getAge();<br /> <span style="color: black;">Object $name </span>= <span style="color: #0033b3;">this</span>.getName();<br /> result = result * <span style="color: #1750eb;">59 </span>+ (<span style="color: black;">$name </span>== <span style="color: #0033b3;">null </span>? <span style="color: #1750eb;">43 </span>: <span style="color: black;">$name</span>.hashCode());<br /> <span style="color: #0033b3;">return </span>result;<br /> }<br /><br /> <span style="color: #0033b3;">public </span><span style="color: black;">String </span><span style="color: #00627a;">toString</span>() {<br /> <span style="color: #0033b3;">return </span><span style="color: #067d17;">"Person(name=" </span>+ <span style="color: #0033b3;">this</span>.getName() + <span style="color: #067d17;">", age=" </span>+ <span style="color: #0033b3;">this</span>.getAge() + <span style="color: #067d17;">")"</span>;<br /> }<br /></pre><p><span style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">}</span> </p></blockquote>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-86663145693965358412023-01-24T01:03:00.001-08:002023-01-24T01:03:41.996-08:00maven helping commands mvn dependency:tree<div>mvn help: effective-pom</div><div>mvn help: effective-settings</div><div>mvn clean dependency:build-classpath</div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-78917862248869431022022-12-18T08:39:00.003-08:002022-12-18T08:56:02.841-08:00Object Injections to Springs<p> There are two ways to inject an object to Springs.</p><p>1) Field Injection</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgnerDpR1ZJQfs4SBMghAHbnfhWnvGGVLZuFO2Cp3l5Aa5sLrotcWYPgekJfXu_o4CVyqA2a4HmQajINAcW6WcCVxgUw4XdE8ADuJkgBP0HX9ik_dPTnp1yko480DU4rNqsjB09TC6ySdSWY2YyzXnxT8e3UAwUsSH-ZemWAEg0XDz3gOX7HMxg6baI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="123" data-original-width="849" height="70" src="https://blogger.googleusercontent.com/img/a/AVvXsEgnerDpR1ZJQfs4SBMghAHbnfhWnvGGVLZuFO2Cp3l5Aa5sLrotcWYPgekJfXu_o4CVyqA2a4HmQajINAcW6WcCVxgUw4XdE8ADuJkgBP0HX9ik_dPTnp1yko480DU4rNqsjB09TC6ySdSWY2YyzXnxT8e3UAwUsSH-ZemWAEg0XDz3gOX7HMxg6baI=w542-h70" width="542" /></a></div><br /><p></p><p>2) constructor Injection</p><p></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjOd_r0502FuOa91TlWu2LCOGDkpwMjIYdV9a3pqcIldU5onub2YwAKCDWdfhPXXseXQY-MS2kzQRXSf1XgCLyYT5_rnA-BVCAY4ndmoX8STQ7nIkbPnBcyc7jtEDSQ6sh7kO4_HGQOZhje31_8b9MX6iKLl5kC2HB90j4g09dkvgbEJ_TtQSB3RPZf" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="156" data-original-width="842" height="122" src="https://blogger.googleusercontent.com/img/a/AVvXsEjOd_r0502FuOa91TlWu2LCOGDkpwMjIYdV9a3pqcIldU5onub2YwAKCDWdfhPXXseXQY-MS2kzQRXSf1XgCLyYT5_rnA-BVCAY4ndmoX8STQ7nIkbPnBcyc7jtEDSQ6sh7kO4_HGQOZhje31_8b9MX6iKLl5kC2HB90j4g09dkvgbEJ_TtQSB3RPZf=w565-h122" width="565" /></a></span></div><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /><br /></span><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgQz1WiwSBHks5UKM2AMrYiZReocI20XyA5WBX7WIINDTGoB6Cm4hucncR_w4VwVpjYRGyLAcrU0UeDDHgwHg1xoUQS4AYWapdmv-dA3Z2Pqh0XRsqmjJm8cobtci23xBqG-2ENttVyzHq0q2O8L_URAtgOqJlmIJ2j5OFDE2PlIqXbhJSOe9eWs2IO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="105" data-original-width="1159" height="75" src="https://blogger.googleusercontent.com/img/a/AVvXsEgQz1WiwSBHks5UKM2AMrYiZReocI20XyA5WBX7WIINDTGoB6Cm4hucncR_w4VwVpjYRGyLAcrU0UeDDHgwHg1xoUQS4AYWapdmv-dA3Z2Pqh0XRsqmjJm8cobtci23xBqG-2ENttVyzHq0q2O8L_URAtgOqJlmIJ2j5OFDE2PlIqXbhJSOe9eWs2IO=w826-h75" width="826" /></a></span></div><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /><br /></span><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Prefer to use constructor injection over field injection as it has some advantages.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Below are some disadvantages of using field injection.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">- First, you do not need to use autowired annotation, with constructer injection so you can inject </span><span style="font-size: inherit;">an object while you are writing a simple Java codes without adding any annotation</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">- One of two major advantages of constructor injection is that it <span style="background-color: #fcff01;">allows to be in to be immutable</span>, (Observe that the variable is declared with "final" unlike in field injection)</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">since </span><span style="font-size: inherit;">you can define the property as final and immutable objects helps to create more robust and thread-safe </span><span style="font-size: inherit;">applications.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">- Constructor injection also forces that the object is created with the required dependency as the constructor </span><span style="font-size: inherit;">forces it.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">- And finally, Spring doesn't use a reflection with constructor approach, unlike field injection </span><span style="font-size: inherit;">as reflection makes the application code to run slower since it involves types that </span><span style="background-color: #cec0fc; color: #401b9c; font-size: inherit; text-decoration-line: underline;">are dynamic result at runtime.</span></p></div><p><br /></p><p><br /></p><p><br /></p>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-31585856590926891402022-12-18T06:53:00.006-08:002022-12-20T04:48:42.578-08:00Loading Configuration along with SpringBoot main class<div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">In situation where the service will not be triggered by a clients and need to start doing some action like reading files, reading streams, reading data from Twitter, etc.,</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="transcript--highlight-cue--1bEgq" data-purpose="cue-text" style="background-color: #cec0fc; box-shadow: rgb(206, 192, 252) 0.8rem 0px 0px, rgb(206, 192, 252) -0.8rem 0px 0px; box-sizing: border-box; display: inline; line-height: 2.4rem; margin: 0px; padding: 0.4rem 0px;">when the applications starts we need to find a way to trigger the reading logic.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">To do that, we have different options. </span></p></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjbK7pw3XesY50Ue3d5ejInx5DAHpJkYb2g-rN8Vsu0IL2D0mqs6y7RngRteOu40uBN2Nwk9V9-qboaw8VCgPbKMG47gIh4-hJpSln035u9jFlAqOymIsvD0p2LHfPQEzQr0hgL5FShvMYJyI4m9GI4dQhEHz6bckbtpmwaXOA52lrUcyFxvKtVzL1H" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="102" data-original-width="1162" height="38" src="https://blogger.googleusercontent.com/img/a/AVvXsEjbK7pw3XesY50Ue3d5ejInx5DAHpJkYb2g-rN8Vsu0IL2D0mqs6y7RngRteOu40uBN2Nwk9V9-qboaw8VCgPbKMG47gIh4-hJpSln035u9jFlAqOymIsvD0p2LHfPQEzQr0hgL5FShvMYJyI4m9GI4dQhEHz6bckbtpmwaXOA52lrUcyFxvKtVzL1H=w538-h38" width="538" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEipwWBt_xHda-SX-z_hE_frRbRxS5ema_AJgu-EotmBRSGH_dzoXvHcpjz8_YyL8ITPZB-hzHuQRiadBzplQUD8ktaXdYBgCu9sYPIqlVvYcQNnL0BL37A79d4msXZpuV-K4G2iI-h5v31GHy1qyfl-Tp1YY1Moc50RHMwOaxXvG_jNer30SdGfIgYT" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="111" data-original-width="1123" height="57" src="https://blogger.googleusercontent.com/img/a/AVvXsEipwWBt_xHda-SX-z_hE_frRbRxS5ema_AJgu-EotmBRSGH_dzoXvHcpjz8_YyL8ITPZB-hzHuQRiadBzplQUD8ktaXdYBgCu9sYPIqlVvYcQNnL0BL37A79d4msXZpuV-K4G2iI-h5v31GHy1qyfl-Tp1YY1Moc50RHMwOaxXvG_jNer30SdGfIgYT=w570-h57" width="570" /></a></div><br /><p></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Application YAML file is used to hold the application configuration properties.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Spring boot binds external properties from application.YAML or </span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">application.properties file into a </span><span style="font-size: inherit;">application at runtime.</span></p></div><p><br /></p><p>Multiple ways:</p><p>1) PostConstruct</p><p>2) ServeletContextListener</p><p>3) ApplicationListener</p><p>4) CommandListener</p><p><br /></p><p> 1) <b>Using PostConstruct</b></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">One way is that we can use post construct annotation on methods, let's say, with a method in it.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgQxlJoNts6oDvGqlcNFhaPKjQSupXKbeu0N0IIjcn7oz2XEpEBcrGlBiRwwKCV-d7Rn9ZFEiUVUaZxIzyBLokVl7zKDHIvmpvd97shCudN8scT7Biod9wmnRhBGZJVrAoZeE_G3faDg_QUZM9_mSqM8v4JFNw4FydTK-XuH0WwQPaf5IQYvsSzW9vH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="117" data-original-width="1113" height="49" src="https://blogger.googleusercontent.com/img/a/AVvXsEgQxlJoNts6oDvGqlcNFhaPKjQSupXKbeu0N0IIjcn7oz2XEpEBcrGlBiRwwKCV-d7Rn9ZFEiUVUaZxIzyBLokVl7zKDHIvmpvd97shCudN8scT7Biod9wmnRhBGZJVrAoZeE_G3faDg_QUZM9_mSqM8v4JFNw4FydTK-XuH0WwQPaf5IQYvsSzW9vH=w457-h49" width="457" /></a></div><br /><br /><p></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Now, the code we write here in the init method will be called once after the spring being created.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">And by default, spring beans are created once because they are created a singleton.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">However, we can actually change these behaviors with scope annotation.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiysWaL5P67vS8Qocg98D0zHzhN90Ch8UYKZLLj9gBkRRzl2RAA4cWOE-8b5RnUXZYcQb9CW4VNv-DyhipgMfD6FaVi5E359w8SeDVko9k0uX1qGFgXEnV4cyYAw_Ckw9EA4Epxz1LVncO7bZKby19YIy1TU3wzYf64qam8bpyNye2Q1pZvdFnR0tz8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="195" data-original-width="1069" height="58" src="https://blogger.googleusercontent.com/img/a/AVvXsEiysWaL5P67vS8Qocg98D0zHzhN90Ch8UYKZLLj9gBkRRzl2RAA4cWOE-8b5RnUXZYcQb9CW4VNv-DyhipgMfD6FaVi5E359w8SeDVko9k0uX1qGFgXEnV4cyYAw_Ckw9EA4Epxz1LVncO7bZKby19YIy1TU3wzYf64qam8bpyNye2Q1pZvdFnR0tz8" width="320" /></a></div><br /><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Here we see the supported scope annotations for a bean definition in spring</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">For example, if you set it to TYPE <span style="background-color: #fcff01;"> "request"</span>, it will create a new bean for each request.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZd2azAWfuBh12Pw9RNOpW5OQfrI7PBFOojdye8qF-EftKQFJVZ1Gw0R7Zr5ASDwj-YgS6C2QlpoA951fO9SDRwAi9tdArQ86P-DsUePGB1xl_CfFoJ80CDQgd1Mi74JyJQP01OMWwMp0n6iqCIcIcQNACqR8C9IUuub1t5Upxn5RtvMUE6J_ygB3f" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="247" data-original-width="892" height="151" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZd2azAWfuBh12Pw9RNOpW5OQfrI7PBFOojdye8qF-EftKQFJVZ1Gw0R7Zr5ASDwj-YgS6C2QlpoA951fO9SDRwAi9tdArQ86P-DsUePGB1xl_CfFoJ80CDQgd1Mi74JyJQP01OMWwMp0n6iqCIcIcQNACqR8C9IUuub1t5Upxn5RtvMUE6J_ygB3f=w546-h151" width="546" /></a></div><br /><br /><p></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="background-color: #fcff01; box-sizing: border-box; margin: 0px; padding: 0px;">So how many times the init method will be called FOR ABOVE SCOPE </span><span style="font-size: inherit;"><span style="background-color: #fcff01;">Then? </span>it will be called in each request separately because the method will run after each object creation. </span><span style="font-size: inherit;">That means for each request.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">So actually, this is not a good option for an application general initialization job.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, BlinkMacSystemFont, Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="transcript--highlight-cue--1bEgq" data-purpose="cue-text" style="background-color: #cec0fc; box-shadow: rgb(206, 192, 252) 0.8rem 0px 0px, rgb(206, 192, 252) -0.8rem 0px 0px; box-sizing: border-box; display: inline; line-height: 2.4rem; margin: 0px; padding: 0.4rem 0px;">Although this behavior is only valid, for example, for a controller, where a request will cause to create A NEW BEAN. </span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="transcript--highlight-cue--1bEgq" data-purpose="cue-text" style="background-color: #cec0fc; box-shadow: rgb(206, 192, 252) 0.8rem 0px 0px, rgb(206, 192, 252) -0.8rem 0px 0px; box-sizing: border-box; display: inline; line-height: 2.4rem; margin: 0px; padding: 0.4rem 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="transcript--highlight-cue--1bEgq" data-purpose="cue-text" style="background-color: #cec0fc; box-shadow: rgb(206, 192, 252) 0.8rem 0px 0px, rgb(206, 192, 252) -0.8rem 0px 0px; box-sizing: border-box; display: inline; line-height: 2.4rem; margin: 0px; padding: 0.4rem 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1">2) <span style="background-color: #cec0fc; font-size: inherit;">another option which is </span><span style="background-color: #fcff01; font-size: inherit;">implementing application listener interface and overriding onApplicationE</span><span style="font-size: inherit;"><span style="background-color: #fcff01;">vent method</span>.</span></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">This is an application listener method, so it will only run once for sure.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Therefore, we can use it.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Here, the parameter is ApplicationEvent for these method</span></p></div><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><br /></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiqdk_5REboiugmxGTtGV7bcWHVqAHmmfbfa6T4DM0-k9pGaS1CTR_dTOgizfWWuZP0Wkl23ncYyKYt7p9PT61l6s8wBbpx0iZXHlauzfkRZ2iL_wv1YZLKx8UFCNVqeiCyNL-3oMWUYIcvibIbBx_lTysQjkGmM4OQKHiEPcpEXohQKZTGwSAhKQk_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="194" data-original-width="794" height="150" src="https://blogger.googleusercontent.com/img/a/AVvXsEiqdk_5REboiugmxGTtGV7bcWHVqAHmmfbfa6T4DM0-k9pGaS1CTR_dTOgizfWWuZP0Wkl23ncYyKYt7p9PT61l6s8wBbpx0iZXHlauzfkRZ2iL_wv1YZLKx8UFCNVqeiCyNL-3oMWUYIcvibIbBx_lTysQjkGmM4OQKHiEPcpEXohQKZTGwSAhKQk_=w693-h150" width="693" /></a></div><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"> <br /></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1">3) <span style="background-color: #cec0fc;">implementing </span><span style="background-color: #fcff01;">commandLineRunner </span><span style="background-color: #cec0fc;">and </span><span style="background-color: #fcff01;">overriding the run</span><span style="background-color: #cec0fc;"> method.</span></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">This is also a perfect option for application initialization logic.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">The only difference with the previous way is the parameters.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Here we have a string array as parameter in the previous method</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">The parameter was applicationEvent.</span></p></div><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><br /></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><br /></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiuRcl6RK3hAXZ8kX_NgSTTdeXv0Ga7nbmgK6yT3lYa5lysPbsmADfWMGK77L74F01YVQPZd832CyE33mIX7Dt5nUjPJKw7bfXAhkaBYyEhojD3WHAZl6YnSWdxbnxMTcYnEEos41aWtGOoeLLRTsKarwTVevaWLHikU7TfOsw2cz4FlWc3siUsZNYH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="165" data-original-width="824" height="117" src="https://blogger.googleusercontent.com/img/a/AVvXsEiuRcl6RK3hAXZ8kX_NgSTTdeXv0Ga7nbmgK6yT3lYa5lysPbsmADfWMGK77L74F01YVQPZd832CyE33mIX7Dt5nUjPJKw7bfXAhkaBYyEhojD3WHAZl6YnSWdxbnxMTcYnEEos41aWtGOoeLLRTsKarwTVevaWLHikU7TfOsw2cz4FlWc3siUsZNYH=w583-h117" width="583" /></a></div><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><br /></p></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-71895251665372697172022-12-17T12:55:00.000-08:002022-12-17T12:55:17.441-08:00Log4J addtion to Spring Boot Application<p><span style="color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: inherit;">want to add logging capability to our service.</span></p><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">it's very easy thanks to the Springboot, we got logback and SLF4J dependencies </span><span style="font-size: inherit;">automatically, so we could only add a <span style="background-color: #fcff01;">logback.xml in resources folder</span> to the project to customize logging behavior.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">To add to this file</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Here we defined two appenders</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">- One writes to console and the other one rights to a file, we can define as many appenders as we want, </span><span style="font-size: inherit;">according to our needs.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"> - In the console appender we said, only a pattern for the message.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiF5T5A7IYUvEYyyowu-xxaOClMUfjsyGzaORFSfpgTTStjgTaix8O7OUByycYAkZFqN5Ar6PsQTx9GU7HDqd5GB641d3i8o4GJifFy3pdZ-PVTqzyx5Ank4L_CUH3atLdJRJblsOdbsi4jSaD-LvSyOUgeeOIVEeeABtwKgs-9PFfZ0BAv0n5Juusz" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="151" data-original-width="976" height="50" src="https://blogger.googleusercontent.com/img/a/AVvXsEiF5T5A7IYUvEYyyowu-xxaOClMUfjsyGzaORFSfpgTTStjgTaix8O7OUByycYAkZFqN5Ar6PsQTx9GU7HDqd5GB641d3i8o4GJifFy3pdZ-PVTqzyx5Ank4L_CUH3atLdJRJblsOdbsi4jSaD-LvSyOUgeeOIVEeeABtwKgs-9PFfZ0BAv0n5Juusz" width="320" /></a></div><br /><br /><p></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"> - in the file appender, you also specify a file name for logging a</span><span style="font-size: inherit;">nd again, a pattern of the log Message.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"></p><ul style="text-align: left;"><li><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Where we define the structure of a log message such as showing the class name, thread ID, time and the log level </span><span style="font-size: inherit;">in the message.</span></li><li>And finally, we have a rolling policy here to create a new file and compress and keep the old one after <span style="font-size: inherit;">the file reaches a certain size.</span></li><li>Finally, we say that we can match the appenders to any package.</li></ul></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiu0y3-IBIn57TEmTleAzVkO3T5R5eqmW08NIlLRiEM741NmUpmV-qf0WwA8RMz9EdpiU5KQUQ-johFq1RzKZXxq1Yh5Cc0Pan7iX-49Cj9g0Zt1FnJ0a-zNoTaQ5wl0JknTig57Y8w45J9hTmESiZAtomYAGYb0snvHjs-JpzKCiVHNBgaNjfK_gxY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="352" data-original-width="915" height="123" src="https://blogger.googleusercontent.com/img/a/AVvXsEiu0y3-IBIn57TEmTleAzVkO3T5R5eqmW08NIlLRiEM741NmUpmV-qf0WwA8RMz9EdpiU5KQUQ-johFq1RzKZXxq1Yh5Cc0Pan7iX-49Cj9g0Zt1FnJ0a-zNoTaQ5wl0JknTig57Y8w45J9hTmESiZAtomYAGYb0snvHjs-JpzKCiVHNBgaNjfK_gxY" width="320" /></a></div><br /><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">For example, here we said two appenders, defined here to all classes that starts with <span style="background-color: #fcff01;">com.microservices.demo</span> </span><span style="font-size: inherit;">package.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">That actually means that, our all application classes will be logged by using those two appenders</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhl-DkOTegbi-GAPep8bURQNlj_2IIPcXyZRSH6d9UL0AJ8JgOF8ih-TvYMmlS5_8nz1Pzzw4ewQGyJFL9iKaRt6bERrQlGYmOhleCWoFTiui7uUoMhu4dsi2Y1C9xjLHmBzUor2-F_NnY-_22rt5-WjTovbmq43zH-F5-0IOtIscmS22n46rdFigJJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="85" data-original-width="877" height="31" src="https://blogger.googleusercontent.com/img/a/AVvXsEhl-DkOTegbi-GAPep8bURQNlj_2IIPcXyZRSH6d9UL0AJ8JgOF8ih-TvYMmlS5_8nz1Pzzw4ewQGyJFL9iKaRt6bERrQlGYmOhleCWoFTiui7uUoMhu4dsi2Y1C9xjLHmBzUor2-F_NnY-_22rt5-WjTovbmq43zH-F5-0IOtIscmS22n46rdFigJJ" width="320" /></a></div><br /><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">And here, the root logger will set the log level as a root, which can be overwritten using a specific </span><span style="font-size: inherit;">logger, as we did here.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span style="font-size: inherit;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span style="font-size: inherit;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhQv_z033zUAogja9HKhwtxxGCCLpkoPZ1jj2GK_7ZfVaIaVblOrYqTDYiM2TCSb2FJscnLxgbDPvev1XdiRSik2aJXoCJnrTlbkO3nkb_omk_z5J2LpAqthdcNH2SP5aQuQMH0Yu6GcgbNRUZwa-NsgdtrEKi8I09OFTaespsr4TRglf-nnvpYGwj0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="97" data-original-width="553" height="56" src="https://blogger.googleusercontent.com/img/a/AVvXsEhQv_z033zUAogja9HKhwtxxGCCLpkoPZ1jj2GK_7ZfVaIaVblOrYqTDYiM2TCSb2FJscnLxgbDPvev1XdiRSik2aJXoCJnrTlbkO3nkb_omk_z5J2LpAqthdcNH2SP5aQuQMH0Yu6GcgbNRUZwa-NsgdtrEKi8I09OFTaespsr4TRglf-nnvpYGwj0" width="320" /></a></div><br /><br /><p></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span style="font-size: inherit;"><br /></span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">One more thing about logger is that we can actually define different log levels like trace , </span><span style="font-size: inherit;">Debug, info, warn a</span><span style="font-size: inherit;">nd error for our logger definition.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">And it will work like if you define a lower level it, it will also print the higher levels.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">That means Trace level will print all the log messages defined in the code</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">However, if you set the level as error, all the messages except error will be ignored.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">So this way we can control in the configuration how much work will be printed, for example, in production. </span><span class="" data-purpose="cue-text" style="box-sizing: border-box; font-size: inherit; margin: 0px; padding: 0px;">You don't want to include that much logging, as it can affect the performance of your application </span><span style="color: #401b9c; font-size: inherit; text-decoration-line: underline;">because of higher cost.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Having the log feature, I will now update the initialization codes we created in the spring application</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">class and use the logging framework to log the keywords we defined in the application configuration.</span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"><br /></span></p><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEia3urbqzrWqKF7sUqTAc4rZrU-5S133-edadI3xRY6MhUDkJmR4tsfH4qwdvcYNMrE2wjTBYw4tICf0eoJbgzIPSJGXT817fx1Q9fh0HV7iPYPydPbzueAsKhN48ktL9XnPft6CCwuXt7yONJqoCwuExI2TjhXm4eiOjEt5b74TYustEGAL1hge05c" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="589" data-original-width="1021" height="250" src="https://blogger.googleusercontent.com/img/a/AVvXsEia3urbqzrWqKF7sUqTAc4rZrU-5S133-edadI3xRY6MhUDkJmR4tsfH4qwdvcYNMrE2wjTBYw4tICf0eoJbgzIPSJGXT817fx1Q9fh0HV7iPYPydPbzueAsKhN48ktL9XnPft6CCwuXt7yONJqoCwuExI2TjhXm4eiOjEt5b74TYustEGAL1hge05c=w432-h250" width="432" /></a></div><br /><br /><p></p></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-46572278343069052642022-12-17T12:19:00.000-08:002022-12-17T12:19:26.600-08:00POM File learnings<p> - <scope> provided </scope>. in dependency means this is only for dependency</p><p>Eg:<span style="color: #401b9c; font-family: udemy sans, sf pro text, -apple-system, system-ui, Roboto, segoe ui, Helvetica, Arial, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol;"><span style="background-color: #cec0fc;"><u> </u></span></span><span style="background-color: #cec0fc; color: #401b9c; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; text-decoration-line: underline;"> Lombok is a compile-only tool, so that we used to provide a scope here for this dependency.</span></p><p>- <scope>test </scope> in depdency section is only test.</p><p><br /></p><p>- <span style="background-color: #cec0fc; color: #401b9c; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; text-decoration-line: underline;">spring boot MAVEN Plugin to create a runnable jar automatically for our microservice.</span></p><p>- To read applicatoin.properties from a class </p><p></p><ul style="text-align: left;"><li> We will add @ConfiguratoinProperties annotation on the class by adding prefix with value</li><ul><li>Ex: You have application.yaml in module/resources folder</li><ul><li>There you provided as</li></ul></ul></ul><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span style="font-family: "Helvetica Neue"; font-size: 13px;">Twitter-to-kafka-service:</span><div><p class="p1" style="font-family: "Helvetica Neue"; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: left;"><span class="Apple-tab-span" style="white-space: pre;"> <span style="background-color: #fcff01;"> </span></span><span style="background-color: #fcff01;">twitter-keywords:</span></p><p class="p1" style="font-family: "Helvetica Neue"; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: left;"><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> <span> </span><span> </span><span> </span><span> <span> </span></span><span> </span><span> </span><span> </span></span>- Java</p><p class="p1" style="font-family: "Helvetica Neue"; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: left;"><span class="Apple-tab-span" style="white-space: pre;"><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>-<span> </span>Microservices</p><p class="p1" style="font-family: "Helvetica Neue"; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: left;"><span class="Apple-tab-span" style="white-space: pre;"><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>- Spring</p><p class="p1" style="font-family: "Helvetica Neue"; font-size: 13px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; text-align: left;"><span class="Apple-tab-span" style="white-space: pre;"><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>- Kafka</p><p><span> </span><span> </span><br /><br /></p><ul style="text-align: left;"><li>In the class where we want to read the properties file we define as below in class</li></ul><span> </span><span> </span><span> </span><span> @ConfiguratoinProperties(prefix = "twitter-to-kafka-service")</span></div><div><span> </span><span> </span><span> </span><span> public class TwitterToKafkaServiceConfigData {</span></div><div><span> private List<String> <span style="background-color: #fcff01;">twitterKeywords</span>;<br /></span></div><div><span><span><span> </span><span> </span><span> </span><span> </span><span> </span><span> // Please note that </span><br /></span></span></div><div><span><span><span>/*</span></span></span></div><div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; outline: none; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Then as a private list of string, with name <span style="background-color: #fcff01; color: black; font-family: Times; font-size: medium;">twitterKeywords</span> here.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">The naming is important, and this should match to the definition and the application YAML file</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">Note that for <span style="background-color: #fcff01;">twitter-keywords, we use twitterKeywords with capital, "K" so for replacement of. </span></span><span style="background-color: #fcff01; font-size: inherit;">"-K" we use "Capital K".</span></p></div></div><div><br /></div><div>*/</div><div><span><span> </span><span> </span><span> </span><span> }</span><br /></span></div><div><span> </span><span> </span><span> </span><span> </span><br /><ul style="text-align: left;"><li>To make that class as a Spring Bean, we will add <span style="background-color: #ffa400;">@Configuration </span>Annotation.</li></ul><div> </div><div> @<span style="background-color: #ffa400;">Configuration</span></div><div><div> @ConfiguratoinProperties(prefix = "twitter-to-kafka-service")</div><div> public class TwitterToKafkaServiceConfigData {</div><div> private List<String> <span style="background-color: white;">twitterKeywords</span>;<br /></div><div> // Please note that <br /></div></div><div><br /></div><div><ul style="text-align: left;"><li><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue" role="button" style="box-sizing: border-box; color: #401b9c; cursor: pointer; font-size: inherit; margin: 0px; max-width: 60rem; outline: none; padding: 0px; text-decoration-line: underline;" tabindex="-1"><span class="" data-purpose="cue-text" style="box-sizing: border-box; margin: 0px; padding: 0px;">We will also use<span style="background-color: #04ff00;"> @Data</span> annotation from Lombok here to obtain methods like getter, setter , hashcode </span><span style="color: #1c1d1f; font-size: inherit;">and toString to get rid of some boilerplate JAVA codes.</span></p></div><div class="transcript--cue-container--wu3UY" style="box-sizing: border-box; color: #1c1d1f; font-family: "udemy sans", "sf pro text", -apple-system, "system-ui", Roboto, "segoe ui", Helvetica, Arial, sans-serif, "apple color emoji", "segoe ui emoji", "segoe ui symbol"; font-size: 16px; margin: 0px; padding: 0.4rem 1.6rem;"><p class="transcript--underline-cue--3osdw" data-purpose="transcript-cue-active" role="button" style="box-sizing: border-box; font-size: inherit; margin: 0px; max-width: 60rem; padding: 0px;" tabindex="-1"><span class="transcript--highlight-cue--1bEgq" data-purpose="cue-text" style="background-color: #cec0fc; box-shadow: rgb(206, 192, 252) 0.8rem 0px 0px, rgb(206, 192, 252) -0.8rem 0px 0px; box-sizing: border-box; display: inline; line-height: 2.4rem; margin: 0px; padding: 0.4rem 0px;">So what Lombok does is to create some code like getter setter methods and then update the class with </span><span style="font-size: inherit;">these methods.</span> </p></div><div> </div></li></ul><div> <span style="background-color: #04ff00;">@Data </span></div><div> @Configuration</div><div><div> @ConfiguratoinProperties(prefix = "twitter-to-kafka-service")</div><div> public class TwitterToKafkaServiceConfigData {</div><div><span style="background-color: white;"> private List<String> twitterKeywords;<br /></span></div><div> // Please note that </div></div> </div><p></p></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-79685595750253503672022-12-16T14:53:00.006-08:002022-12-16T14:53:41.816-08:00POM update to run JUNIT Tests when we do "mvn test"<p> Some times:</p><p><br /></p><p>unit tests in test files under src/test wont run when we do. "mvn test" command</p><p><br /></p><p>Some observations to check is:</p><p>- Few plugins considers file name is Test</p><p>- Practise to name function name prefix or suffix by Test</p><p>- Another important thing is maven configuration (For Junit 4) add below info</p><p><br /></p><pre style="background-color: white; color: #080808; font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><<span style="color: #0033b3;">dependencies</span>><br /></pre><pre style="background-color: white; color: #080808; font-family: 'JetBrains Mono',monospace; font-size: 9.8pt;"> <<span style="color: #0033b3;">dependency</span>><br /> <<span style="color: #0033b3;">groupId</span>>org.junit.jupiter</<span style="color: #0033b3;">groupId</span>><br /> <<span style="color: #0033b3;">artifactId</span>>junit-jupiter-api</<span style="color: #0033b3;">artifactId</span>><br /> <<span style="color: #0033b3;">version</span>>5.4.0</<span style="color: #0033b3;">version</span>><br /> <<span style="color: #0033b3;">scope</span>>test</<span style="color: #0033b3;">scope</span>><br /> </<span style="color: #0033b3;">dependency</span>><br /> <<span style="color: #0033b3;">dependency</span>><br /> <<span style="color: #0033b3;">groupId</span>>org.junit.jupiter</<span style="color: #0033b3;">groupId</span>><br /> <<span style="color: #0033b3;">artifactId</span>>junit-jupiter-engine</<span style="color: #0033b3;">artifactId</span>><br /> <<span style="color: #0033b3;">version</span>>5.4.0</<span style="color: #0033b3;">version</span>><br /> <<span style="color: #0033b3;">scope</span>>test</<span style="color: #0033b3;">scope</span>><br /> </<span style="color: #0033b3;">dependency</span>><br /></<span style="color: #0033b3;">dependencies</span>><br /><br /><<span style="color: #0033b3;">build</span>><br /> <<span style="color: #0033b3;">plugins</span>><br /> <<span style="color: #0033b3;">plugin</span>><br /> <<span style="color: #0033b3;">artifactId</span>>maven-surefire-plugin</<span style="color: #0033b3;">artifactId</span>><br /> <<span style="color: #0033b3;">version</span>>2.22.0</<span style="color: #0033b3;">version</span>><br /> </<span style="color: #0033b3;">plugin</span>><br /> <<span style="color: #0033b3;">plugin</span>><br /> <<span style="color: #0033b3;">artifactId</span>>maven-failsafe-plugin</<span style="color: #0033b3;">artifactId</span>><br /> <<span style="color: #0033b3;">version</span>>2.22.0</<span style="color: #0033b3;">version</span>><br /> </<span style="color: #0033b3;">plugin</span>><br /> </<span style="color: #0033b3;">plugins</span>><br /></<span style="color: #0033b3;">build</span>><br /></pre><pre style="background-color: white; color: #080808; font-family: 'JetBrains Mono',monospace; font-size: 9.8pt;"><br /></pre><pre style="background-color: white; color: #080808; font-family: 'JetBrains Mono',monospace; font-size: 9.8pt;">Refer: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven</pre>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-55296204240209361582021-11-16T15:45:00.001-08:002021-11-16T15:45:17.391-08:00Apache vs Tomcat<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiauAt_B8n6zz4k4vfMYSQIIuQpdGHmVi1GDC-iQlvrcyuAMNGyuM0ercnw-EV5xwifNPRN_ciJawHMUCE0NNoDEmVXUaH3D4VsRRMUHuCDrIOYYG1FjkajNrD0nDuw9vd99LK3R47EBNc/s1600/1637106313933438-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiauAt_B8n6zz4k4vfMYSQIIuQpdGHmVi1GDC-iQlvrcyuAMNGyuM0ercnw-EV5xwifNPRN_ciJawHMUCE0NNoDEmVXUaH3D4VsRRMUHuCDrIOYYG1FjkajNrD0nDuw9vd99LK3R47EBNc/s1600/1637106313933438-0.png" width="400">
</a>
</div><div><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvxhLYFJkgz-acb0hm4J7qDx0T8sbBXKKnm9TfazyzZQggUrxDtJ-4tVmJm3da7ZtBG6Cv4RbFikYnSx0KynoQghFoISCSLGMAtFfe4i6FO546yONa4vqqRWkzTwlU5y1TWSE9aLKMGkM/s1600/1637106311167533-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvxhLYFJkgz-acb0hm4J7qDx0T8sbBXKKnm9TfazyzZQggUrxDtJ-4tVmJm3da7ZtBG6Cv4RbFikYnSx0KynoQghFoISCSLGMAtFfe4i6FO546yONa4vqqRWkzTwlU5y1TWSE9aLKMGkM/s1600/1637106311167533-1.png" width="400">
</a>
</div><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh56XGU1N-i-kiy-ASdUqVetI3A2vCsTGQGK3cNccxEgSi7ZsaU1VP50p6zgqbg-MK5y-SzaSbLod7-X9xQ2oIrkTT5KngF85Fgawi_ePrF4ES6jprnyrC_E0iA5g7DxVL2TMK7LyLLk8I/s1600/1637106307943042-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh56XGU1N-i-kiy-ASdUqVetI3A2vCsTGQGK3cNccxEgSi7ZsaU1VP50p6zgqbg-MK5y-SzaSbLod7-X9xQ2oIrkTT5KngF85Fgawi_ePrF4ES6jprnyrC_E0iA5g7DxVL2TMK7LyLLk8I/s1600/1637106307943042-2.png" width="400">
</a>
</div><br></div><div><br></div><div>When we say three tier : </div><div>Apache <--> Tomcat <--> {DB, MessageQues,..}</div><div>ClientFace<-> web logic <-->External</div><div><br></div><div>Courtesy: https://youtu.be/XABDkzxA6hM</div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-83491462837762294272021-11-15T15:43:00.001-08:002021-11-15T15:57:36.675-08:00Java exceptions and Catching Throwable<div>Courtesy: https://www.baeldung.com/java-catch-throwable-bad-practice</div><div><br></div><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg45DbHSN_pmcwoZJ3em8kYAjzmdCKy8sbgnLbl0f4aUlVRY164AwemFB4ybkK4TIu6F83sdSMaCvj5KbFSJQ01HrofPCOI5xTR-1GH19rIMyhY0Xw_nVewR_YfdPxUAQ1CAQGZoOxeck/s1600/1637019827440827-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<span style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg45DbHSN_pmcwoZJ3em8kYAjzmdCKy8sbgnLbl0f4aUlVRY164AwemFB4ybkK4TIu6F83sdSMaCvj5KbFSJQ01HrofPCOI5xTR-1GH19rIMyhY0Xw_nVewR_YfdPxUAQ1CAQGZoOxeck/s1600/1637019827440827-0.png" width="400"></span></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA3htRkFQCEI6opbSIFwoDtAU031PuPWZVgBJ2kuAvAHBcKQy0Kd4ge0pai4bX_MynkDEJneKBnOM0otKczZQAxXTF4e82_NaIs2bLCI-sTLeQCi53W-n6qLhoAOv6s_-qN8pf-lSHbUY/s1600/1637020179723795-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<span style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA3htRkFQCEI6opbSIFwoDtAU031PuPWZVgBJ2kuAvAHBcKQy0Kd4ge0pai4bX_MynkDEJneKBnOM0otKczZQAxXTF4e82_NaIs2bLCI-sTLeQCi53W-n6qLhoAOv6s_-qN8pf-lSHbUY/s1600/1637020179723795-0.png" width="400"></span></a></div><div class="separator" style="clear: both; text-align: center;">- create exception by extending RuntimeException is unchecked </div><div class="separator" style="clear: both; text-align: center;">- create exception by extending Exception is checked.</div><br></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-67123378220083787912021-11-04T15:47:00.003-07:002021-11-04T15:52:33.938-07:00Transient and Serialization<p> Learning Notes:</p><p>- Any variable/member is marked as "transient", then the content of this variable will not be serialized. It sets default values while serialization. </p><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">public</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-class" style="box-sizing: border-box; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">Student</span> <span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">implements</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">Serializable</span> </span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">{
</span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">private</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">static</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">final</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">long</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> studentUID = -</span><span class="hljs-number" style="box-sizing: border-box; color: #4e9359; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">2936687026040726549L</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">;
</span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">private</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> String studentName;
</span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">private</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">transient</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> String subject;
</span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">private</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">transient</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">int</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> marks;
</span><span class="hljs-comment" style="box-sizing: border-box; color: #888888; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">// getters and setters</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">}</span> </p><p>and creates a Student object with ("VRN", "Java", 85)</p><p>When we serialize this object using ObjectoutputStream and deserialize then the content of 'subject' variable will be null and 'marks' will be zero.</p><p><br /></p><p>Note: Please note that when a variable is declared with final + transient: Behaviour will be the same. Means, while serialization value wont be written , while desrialization because there is no value the final value will be taken as default. </p><p>private final String subject = "C++";</p><p>while seirialization the file will be written with NULL, but when we deserialize 'C++' will come as this is default value ( because of final )</p><p>--</p><p><br /></p><p>So, while writing custom "serialization", we can declare that variable as a transient and implement customized writeObject and readObject functions. Use this functions while serializing/deserializing.</p><p><br /></p><p><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">public</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-class" style="box-sizing: border-box; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">Student</span> <span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">implements</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">Serializable</span> </span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">{</span></p><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">private transient Address address;</span></p><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">..</span></p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> </span><span class="hljs-function" style="box-sizing: border-box; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">private</span> <span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">void</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">writeObject</span><span class="hljs-params" style="box-sizing: border-box;">(ObjectOutputStream oos)</span>
<span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">throws</span> IOException </span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">{
oos.defaultWriteObject();
oos.writeObject(address.getHouseNumber());
}
</span><span class="hljs-function" style="box-sizing: border-box; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">private</span> <span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">void</span> <span class="hljs-title" style="box-sizing: border-box; color: #267438; font-weight: bold;">readObject</span><span class="hljs-params" style="box-sizing: border-box;">(ObjectInputStream ois)</span>
<span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-weight: 600;">throws</span> ClassNotFoundException, IOException </span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">{
ois.defaultReadObject();
Integer houseNumber = (Integer) ois.readObject();
Address a = </span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">new</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> Address();
a.setHouseNumber(houseNumber);
</span><span class="hljs-keyword" style="box-sizing: border-box; color: #63b175; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 600; white-space: pre-wrap;">this</span><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">.setAddress(a);
</span><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"> }</span></p><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">}</span></p><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;"><br /></span></p><p><span style="background-color: #fafafa; font-family: "Source Code Pro", Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; white-space: pre-wrap;">courtesy: baeldung knowledge.</span></p>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-17107814913883385152021-11-03T17:22:00.000-07:002021-11-04T04:10:28.819-07:00Converting Mutable class to Immutable class in java<p> - Make class as final to ensure this class wont get extended</p><p>- Initialize all fields in Constructor</p><p>- Remove/Dont-Add Setters</p><p>- Make all mutable members as final , so that all these members gets initialised only once.</p><p>- Make all fields Private so that they are not accessible through object</p><p>- Special attention needs to be given for Mutable members of the class. Incase to return the value of mutable, then do deepcopy/clone and send it rather than the reference.</p><p><br></p><p>Found one good example: </p><p>courtesy:https://howtodoinjava.com/java/basics/how-to-make-a-java-class-immutable/</p><p><br></p><p>https://www.informit.com/articles/article.aspx?p=20530</p><p><br></p><div class="line number8 index7 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">final</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">class</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">ImmutableClass</code></div><div class="line number9 index8 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">{</code></div><div class="line number10 index9 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number11 index10 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number12 index11 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* Integer class is immutable as it does not provide any setter to change its content</code></div><div class="line number13 index12 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number14 index13 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">private</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">final</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Integer immutableField1;</code></div><div class="line number15 index14 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number16 index15 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number17 index16 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* String class is immutable as it also does not provide setter to change its content</code></div><div class="line number18 index17 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number19 index18 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">private</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">final</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">String immutableField2;</code></div><div class="line number20 index19 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number21 index20 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number22 index21 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* Date class is mutable as it provide setters to change various date/time parts</code></div><div class="line number23 index22 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number24 index23 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">private</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">final</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Date mutableField;</code></div><div class="line number25 index24 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number26 index25 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java comments" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(66, 139, 221) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">//Default private constructor will ensure no unplanned construction of class</code></div><div class="line number27 index26 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">private</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">ImmutableClass(Integer fld1, String fld2, Date date)</code></div><div class="line number28 index27 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">{</code></div><div class="line number29 index28 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">this</code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">.immutableField1 = fld1;</code></div><div class="line number30 index29 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">this</code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">.immutableField2 = fld2;</code></div><div class="line number31 index30 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">this</code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">.mutableField = </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">new</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Date(date.getTime());</code></div><div class="line number32 index31 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number33 index32 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number34 index33 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java comments" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(66, 139, 221) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">//Factory method to store object creation logic in single place</code></div><div class="line number35 index34 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">static</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">ImmutableClass createNewInstance(Integer fld1, String fld2, Date date)</code></div><div class="line number36 index35 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">{</code></div><div class="line number37 index36 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">return</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">new</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">ImmutableClass(fld1, fld2, date);</code></div><div class="line number38 index37 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number39 index38 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number40 index39 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java comments" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(66, 139, 221) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">//Provide no setter methods</code></div><div class="line number41 index40 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number42 index41 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number43 index42 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* Integer class is immutable so we can return the instance variable as it is</code></div><div class="line number44 index43 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number45 index44 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Integer getImmutableField1() {</code></div><div class="line number46 index45 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">return</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">immutableField1;</code></div><div class="line number47 index46 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number48 index47 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number49 index48 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number50 index49 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* String class is also immutable so we can return the instance variable as it is</code></div><div class="line number51 index50 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number52 index51 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">String getImmutableField2() {</code></div><div class="line number53 index52 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">return</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">immutableField2;</code></div><div class="line number54 index53 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number55 index54 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number56 index55 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">/**</code></div><div class="line number57 index56 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* Date class is mutable so we need a little care here.</code></div><div class="line number58 index57 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* We should not return the reference of original instance variable.</code></div><div class="line number59 index58 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* Instead a new Date object, with content copied to it, should be returned.</code></div><div class="line number60 index59 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java preprocessor" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(138, 166, 193) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">* */</code></div><div class="line number61 index60 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Date getMutableField() {</code></div><div class="line number62 index61 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">return</code> <code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">new</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">Date(mutableField.getTime());</code></div><div class="line number63 index62 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number64 index63 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"> </div><div class="line number65 index64 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java color1" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(248, 187, 0) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">@Override</code></div><div class="line number66 index65 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">public</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">String toString() {</code></div><div class="line number67 index66 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java keyword" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(180, 61, 61) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">return</code> <code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">immutableField1 +</code><code class="java string" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(29, 193, 22) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">" - "</code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">+ immutableField2 +</code><code class="java string" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(29, 193, 22) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">" - "</code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">+ mutableField;</code></div><div class="line number68 index67 alt1" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java spaces" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #ba0000; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;"> </code><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div><div class="line number69 index68 alt2" style="background: 0px 0px rgb(46, 52, 64) !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: #444444; direction: ltr !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace; font-size: 14.45px; height: auto !important; inset: auto !important; line-height: 1.5 !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;"><code class="java plain" style="background: 0px 0px !important; border-radius: 0px !important; border: 0px !important; box-shadow: none !important; box-sizing: content-box !important; color: rgb(209, 237, 255) !important; direction: ltr !important; display: inline !important; float: none !important; font-family: Monaco, consolas, "bitstream vera sans mono", "courier new", Courier, monospace !important; font-size: 1em !important; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; height: auto !important; inset: auto !important; line-height: 1.1em !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important; word-break: break-word;">}</code></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-73348610671149888762021-11-01T13:50:00.001-07:002021-11-01T13:50:03.637-07:00Spring- Spring boot vs framework<div>- Spring security and Crypyo</div><div>- OWASP</div><div>- Cloud Patterns</div><div>- Lazy loading</div><div>- Design Patterns, Architectural Patterns</div><div>- Solid and Dry Principles</div><div>- XML Based bean configuration</div><div><br></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0tag:blogger.com,1999:blog-1609758593184916591.post-38733756021751890032021-11-01T13:08:00.001-07:002021-11-01T14:11:44.691-07:00Check your skills java- Tenets of OOPS<div>- Java Modifiers and Scope<br><div>- Mutable vs Immutable. ( Standard examples)</div><div>- Abstract class vs Interface</div><div>- Changing a Mutable class to Immutable</div><div>- Lazy Initialization ( extends LazyInitializer class and override initialize. Get the object with base class and get() to get that object)</div><div>- Ways to create threads (Extend thread, Implement callable, Implement runnable). Which is better and why? Purpose of Volatile ?</div><div>- Hashcode() lazy initialization?</div><div>- Inversion of Control</div><div>- Dependency Injection</div><div>- SOAP vs REST</div><div>- MVC Patterns</div><div>- Java 9 features</div><div>- Stream and Filters</div><div>- Any thoughts about Reactive Manifesto</div><div>- Non-Blocking vs Asynchronous blocking</div><div>- CQRS Pattern in Microseconds</div><div>- Domain Driven Design with an example.</div><div>- Garbage collection (Minor and Major)</div><div>- Kurbernetes? database pooling…?</div><div>- Kafka</div><div>- Spring Boot vs Spring framework</div><div>- Cloud Design Patterns (Asynchronous Request and Reply, CQRS, Event sourcing, Retry, Circuit Breaker, Sidecar</div><div><br></div><div>Ref: https://levelup.gitconnected.com/cloud-design-patterns-explained-simply-113c788b33ff</div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div></div>Venkathttp://www.blogger.com/profile/08629527159667049209noreply@blogger.com0