tag:blogger.com,1999:blog-58437228513371604332024-03-13T06:51:25.833-07:00Manula's Thoughts Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.comBlogger40125tag:blogger.com,1999:blog-5843722851337160433.post-59787658008361159092023-12-13T01:46:00.000-08:002023-12-13T01:46:31.152-08:00API as a business strategy with Xapi<div class="OutlineElement Ltr SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW249026347 BCX0" paraeid="{11ce60dd-f347-4d95-b25b-47dc4187ddc4}{168}" paraid="738692707" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW249026347 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">Understanding the API value chain</span><span class="EOP SCXW249026347 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW249026347 BCX0" paraeid="{11ce60dd-f347-4d95-b25b-47dc4187ddc4}{174}" paraid="580343374" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW249026347 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">An API value chain is </span><span class="TextRun SCXW249026347 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">a series of transformation processes that create value in the API economy</span><span class="TextRun SCXW249026347 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"><span class="NormalTextRun SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">. APIs enable digital value chains. </span><span class="NormalTextRun SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">That's</span><span class="NormalTextRun SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"> because APIs are a critical part of the digital transformation strategy of any business. They help you transform data, enable </span><span class="NormalTextRun SpellingErrorV2Themed SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-image: var(--urlSpellingErrorV2, url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNXB4IiBoZWlnaHQ9IjRweCIgdmlld0JveD0iMCAwIDUgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTYuMiAoODE2NzIpIC0gaHR0cHM6Ly9za2V0Y2guY29tIC0tPgogICAgPHRpdGxlPnNwZWxsaW5nX3NxdWlnZ2xlPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IkZsYWdzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAxMC4wMDAwMDAsIC0yOTYuMDAwMDAwKSIgaWQ9InNwZWxsaW5nX3NxdWlnZ2xlIj4KICAgICAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAxMC4wMDAwMDAsIDI5Ni4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLDMgQzEuMjUsMyAxLjI1LDEgMi41LDEgQzMuNzUsMSAzLjc1LDMgNSwzIiBpZD0iUGF0aCIgc3Ryb2tlPSIjRUIwMDAwIiBzdHJva2Utd2lkdGg9IjEiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUiIHg9IjAiIHk9IjAiIHdpZHRoPSI1IiBoZWlnaHQ9IjQiPjwvcmVjdD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+')); background-position: left bottom; background-repeat: repeat-x; border-bottom: 1px solid transparent; margin: 0px; padding: 0px; user-select: text;">multicloud</span><span class="NormalTextRun SCXW249026347 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"> strategy, and accelerate time-to-market.</span></span><span class="EOP SCXW249026347 BCX0" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{188}" paraid="1318273749" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">How much is the API economy worth?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134245418":true,"134245529":true,"201341983":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{194}" paraid="282414876" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">API Management Market Valued at </span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">$5.1 Billion by 2023</span><span class="LineBreakBlob BlobObject DragDrop SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: WordVisiCarriageReturn_MSFontService, Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"><span class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;"> </span><br class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;" /></span><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span class="LineBreakBlob BlobObject DragDrop SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: WordVisiCarriageReturn_MSFontService, Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"><span class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;"> </span><br class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;" /></span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">According to </span><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">MarketsandMarkets</span><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">, the API management market is projected to be worth $5.1 billion by 2023, at a CAGR of 32.9%. They also break down API management growth by region</span></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{208}" paraid="1414954309" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">What is API business model?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{214}" paraid="1988158319" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">An API as a Product is </span><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">a type of Software as a Service that monetizes specialty functionality that can be used by other companies for just a licensing or consumption based fee</span><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">. A lot of technology companies often start with an Internal API, then launch a Public API, and finally a Partner API.</span></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"201341983":1,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":0,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{224}" paraid="510433027" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">How does an API make money?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{230}" paraid="477225119" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">You can </span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">build an API and then sell it</span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">. For example, the first 1000 requests made each month might be free. However, for each additional request after that, you can charge something like $0.001. Therefore, using APIs allows you to save time, money, and resources while also allowing you to monetize your work!</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{240}" paraid="1506929732" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span aria-hidden="true" class="PageBreakBlob BlobObject DragDrop SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #666666; display: block; font-family: "Segoe UI", Arial, Verdana, sans-serif; height: 0px; margin: 0px; overflow: hidden; padding: 0px; position: relative; text-align: center; user-select: text; visibility: visible;"><span aria-hidden="true" class="PageBreakBorderSpan SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; border-top-color: var(--pageEndMarkerColor); border-top-style: solid; border-top-width: 2px; height: 0px; margin: 0px; overflow: hidden; padding: 0px; position: absolute; text-wrap: nowrap !important; top: 8px; user-select: text;"></span><span aria-hidden="true" class="PageBreakTextSpan SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: window; height: 0px; margin: 0px; overflow: hidden; padding: 0px 3px; position: relative; text-wrap: nowrap !important; user-select: text;"></span></span><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US">What are the examples of API economy?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{38f1268e-9078-4688-b241-ddc0909949a1}{251}" paraid="1633010692" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; display: inline-block; margin: 0px; padding: 0px; user-select: text;"><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span class="WACImageContainer NoPadding DragDrop BlobObject SCXW16131808 BCX0" role="presentation" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; cursor: move; display: inline-block; height: 241px; left: 0px; margin: 0px; padding: 0px; position: relative; top: 2px; transform: rotate(0deg); user-select: text; width: 462px;"><img class="WACImage SCXW16131808 BCX0" src="data:image/png;base64,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mEod4QTJOm3aNARgWbEKZT7kkEPIUau3bKmjQDjGOrl9/PHHsHYIYFscMqTjAQccUCfN7yo3bJuaBhZ31qxZmzZtOvjgg6+44op333133LhxDz/88LHHHguhCJN8zDHHYEfYiu8920nAU4cahxp0f48Hv1uPDPO74LIFaFShUKiyspJkobOOYbYEfU7qj5sdO3bcuHHjI488AnMAO4uWA7N16KGHjhkz5vbbb+/Vq5eTrvZHxn/9618//vgjknXo0OGGG27Yb7/90PYoQWOhIb7jjjvu0ksvzc3NhemBVUp9uoEYPHgwyvb5558PHToUjRzNe/78+VddddULL7yAojqJbOosMkyLgV8qw7Renn322auvvhqB/Px8yC0EYDAGDRrUuXNndPp+vx9XB+awRkceeWS7du3sjbbJ66+/Ti8phYyELIQe+/TTT48//nha20DoeqzX+MEyjRo1CpkHg0FyxV577bULLrig3sRIRnYLrhuk6YwZM2AIYRoN+yvAcOm+//57ev0aDhAxSP/KK69cfPHF9tYNgnaBAlMBsEhOAHaxZMmSOXPmTJ8+vaKiol+/fv3796dvcjA7DzgxaBWoZZx/koKoC1QQ6gUxaNJDhgx57733UEdurWFVk90splVBzQagLQEswnFHA8uwSXX9GQYtpE6TQI/097///emnn6Y7XKAPzznnnHPPPdf92AMgg4IABNupp56KHJD4jjvuuPfeeylBvSxfvrxbt24URrOkQB3cnG+55RaIUgRgQz/++GOYdXv9FqxateqBBx6ANaQ7fdq2bQuze+edd1IOLsktX7LNMC0AFoRM6wVd/8knnzxr1iyE27dvD01INiAzMxOSyU4iwKobb7zRfahgW2zatOmggw6CfUI4Ozu7urr6mGOO+fzzz2ltKuSOOwu/B0wpfC/ouuOOOw4qDjFYRCR2sWjRIsjU1KzockaMa5L/8Y9/PPPMMxs3brTXO9tSGLjacujQoZ999hnypPiGlHBrq78dtjafMPZwJZ0F5g+AisDpRT3ilKLWUkE9Ep06dWJByDQZajZ2m3IaFRoPrfL7/ehGMKdFppUDG0p33KCRUPcCi3PRRRf98MMPy5Ytw2L//v3/8pe/nH/++ZSsDitWrIBWRGKYqgMPPHDs2LG5ubkVFRV5eXlOii1piCB0+eWXX0aOHPnjjz8ifPHFF//r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" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; border: none; height: 241px; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text; vertical-align: baseline; width: 462px;" unselectable="on" /><span class="WACImageBorder SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; display: block; height: 241px; left: 0px; margin: 0px; padding: 0px; position: absolute; text-wrap: nowrap !important; top: 0px; transform: rotate(0deg); user-select: text; width: 462px;"></span></span></span><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{1}" paraid="684831075" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun EmptyTextRun SCXW16131808 BCX0" data-contrast="auto" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-ligatures: none !important; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"></span><span class="LineBreakBlob BlobObject DragDrop SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: WordVisiCarriageReturn_MSFontService, Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"><span class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;"> </span><br class="SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-wrap: nowrap !important; user-select: text;" /></span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">Uber is the best real-life example of how a business is growing via the API economy. The business is built on APIs only. Google API is used for map-related services, Slack APIs are used for business-customer communication. Most of the app's components are outsourced from the API economy.</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{7}" paraid="655123619" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">What is an API ecosystem?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{13}" paraid="2057788789" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">An API (Application Programming Interface) Ecosystem exists </span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">when an organization provides an API that can be easily used by an autonomous entity (group, agency or business) in a manner that adds value for the API provider, the API consumer or both</span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">.</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{23}" paraid="953978005" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">What is an example of an API ecosystem?</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{29}" paraid="921341048" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">As the API economies have evolved, API ecosystems have emerged. The best example to understand the API ecosystem's current state is </span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">food delivery from a small restaurant using a food delivery aggregator to deliver food across the city</span><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">.</span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><div class="OutlineElement Ltr SCXW247798148 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW247798148 BCX0" paraeid="{de56f58e-faff-4f02-837f-328c48df40f2}{39}" paraid="506292825" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW247798148 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">What is the main future of API?</span><span class="EOP SCXW247798148 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{39}" paraid="506292825" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW247798148 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW247798148 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">Gartner have predicted that</span><span class="NormalTextRun SCXW247798148 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"> </span></span><span class="TextRun SCXW247798148 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: bold; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">by 2022 the most frequent vector for enterprise web applications breaches will be API security issues</span><span class="TextRun SCXW247798148 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">. As the complexity and extent of the API ecosystem grows, and with it the attack surface, API security must become more nuanced.</span><span class="EOP SCXW247798148 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span><span style="background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><div class="OutlineElement Ltr SCXW139966173 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><div class="OutlineElement Ltr SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p aria-level="1" class="Paragraph SCXW114889287 BCX0" paraeid="{de56f58e-faff-4f02-837f-328c48df40f2}{55}" paraid="644973578" role="heading" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #2f5496; font-kerning: none; margin: 16px 0px 0px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; font-variant-ligatures: none !important; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">Why Xapi?</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"201341983":0,"335551550":1,"335551620":1,"335559685":0,"335559737":0,"335559738":240,"335559739":0,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; font-family: "Calibri Light", "Calibri Light_EmbeddedFont", "Calibri Light_MSFontService", sans-serif; font-size: 16pt; line-height: 28.0583px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW114889287 BCX0" lang="EN-US" paraeid="{fd7a7764-e501-44b5-84f4-83d5ecdd0e5c}{218}" paraid="1238328337" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;" xml:lang="EN-US"><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">Xapi is a fut</span><span class="NormalTextRun SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">ur</span><span class="NormalTextRun SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">e-proof API design management solution to securely execute a streamlined API requirement management strategy with well-structured, visual API review processes and synergy-drive team collaboration.</span><span class="NormalTextRun SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"> Xapi supports,</span></span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="ListContainerWrapper SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; position: relative; text-align: left; user-select: text;"><ul style="text-align: left;"><li><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;" xml:lang="EN">API Requirements Management</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;"> </span></li><li><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;" xml:lang="EN">API Designing and Dev</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;"> </span></li><li><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;" xml:lang="EN">API Review</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;"> </span></li><li><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;" xml:lang="EN">API Governance</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text; white-space-collapse: preserve;"> </span></li><li><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">API Community Support</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></li></ul></div><div class="OutlineElement Ltr SCXW114889287 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; clear: both; cursor: text; direction: ltr; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW114889287 BCX0" lang="EN-US" paraeid="{594a6f68-52ad-4e76-974e-9ea73b518994}{86}" paraid="277831401" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;" xml:lang="EN-US"><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN">Please visit </span><a class="Hyperlink SCXW114889287 BCX0" href="https://xapihub.io/" rel="noreferrer noopener" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; text-decoration-line: none; user-select: text;" target="_blank"><span class="TextRun Underlined SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #0563c1; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; text-decoration-line: underline; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW114889287 BCX0" data-ccp-charstyle="Hyperlink" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;">https://xapihub.io/</span></span></a><span class="TextRun SCXW114889287 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 24px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"> and explore your API as a business strategy with Xapi.</span><span class="EOP SCXW114889287 BCX0" data-ccp-props="{"201341983":1,"335551550":1,"335551620":1,"335559739":160,"335559740":360}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 24px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div></div></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{59}" paraid="965645865" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN"><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{63}" paraid="1241497030" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #202124; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div><div class="OutlineElement Ltr SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: white; clear: both; cursor: text; direction: ltr; font-family: "Segoe UI", "Segoe UI Web", Arial, Verdana, sans-serif; font-size: 12px; margin: 0px; overflow: visible; padding: 0px; position: relative; user-select: text;"><p class="Paragraph SCXW16131808 BCX0" paraeid="{d49f76bf-2a87-4ce8-ad4e-fc552b1368be}{67}" paraid="1936836054" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; background-color: transparent; color: windowtext; font-kerning: none; margin: 0px 0px 10.6667px; overflow-wrap: break-word; padding: 0px; user-select: text; vertical-align: baseline; white-space-collapse: preserve;"><span class="TextRun SCXW16131808 BCX0" data-contrast="none" lang="EN-US" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #444444; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;" xml:lang="EN-US"><span class="NormalTextRun SCXW16131808 BCX0" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; margin: 0px; padding: 0px; user-select: text;"></span></span><span class="EOP SCXW16131808 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}" style="-webkit-tap-highlight-color: transparent; -webkit-user-drag: none; color: #444444; font-family: Calibri, Calibri_EmbeddedFont, Calibri_MSFontService, sans-serif; font-size: 11pt; line-height: 19.425px; margin: 0px; padding: 0px; user-select: text;"> </span></p></div>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-16396571420389221312021-03-16T04:12:00.003-07:002021-03-16T04:12:26.450-07:00Handle client side routes with IIS on Page refresh React App<p> When you deploy React app on IIS, you might get 404 error when refreshing the web pages.</p><p></p><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/AVvXsEh9ACS_GdVbnT1lth0xUVioK-9tZ-09YZw3XroKlfbCltelSDcanPM6yVp1M710RSTAv7I9J6fwUiuJAHvyiNcMoaYxgpdHhPiHDyCcG8aVYEgL0DRe9BYr_jCHlvYsOkc_P3Vb4WTWAEM6/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="564" data-original-width="1660" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ACS_GdVbnT1lth0xUVioK-9tZ-09YZw3XroKlfbCltelSDcanPM6yVp1M710RSTAv7I9J6fwUiuJAHvyiNcMoaYxgpdHhPiHDyCcG8aVYEgL0DRe9BYr_jCHlvYsOkc_P3Vb4WTWAEM6/" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">To overcome this problem first you need to install the "URL Rewriter" module on the IIS server. Then create a web.config file for your App or create a new one with code as shown below.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">
<!--HTML generated using hilite.me--><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: #557799;"><?xml version="1.0" encoding="UTF-8"?></span>
<span style="color: #007700;"><configuration></span>
<span style="color: #007700;"><system.webServer></span>
<span style="color: #007700;"><rewrite></span>
<span style="color: #007700;"><rules></span>
<span style="color: #007700;"><rule</span> <span style="color: #0000cc;">name=</span><span style="background-color: #fff0f0;">"ReactRouter Routes"</span> <span style="color: #0000cc;">stopProcessing=</span><span style="background-color: #fff0f0;">"true"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><match</span> <span style="color: #0000cc;">url=</span><span style="background-color: #fff0f0;">".*"</span> <span style="color: #007700;">/></span>
<span style="color: #007700;"><conditions</span> <span style="color: #0000cc;">logicalGrouping=</span><span style="background-color: #fff0f0;">"MatchAll"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><add</span> <span style="color: #0000cc;">input=</span><span style="background-color: #fff0f0;">"{REQUEST_FILENAME}"</span> <span style="color: #0000cc;">matchType=</span><span style="background-color: #fff0f0;">"IsFile"</span> <span style="color: #0000cc;">negate=</span><span style="background-color: #fff0f0;">"true"</span> <span style="color: #007700;">/></span>
<span style="color: #007700;"></conditions></span>
<span style="color: #007700;"><action</span> <span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"Rewrite"</span> <span style="color: #0000cc;">url=</span><span style="background-color: #fff0f0;">"index.html"</span> <span style="color: #007700;">/></span>
<span style="color: #007700;"></rule></span>
<span style="color: #007700;"></rules></span>
<span style="color: #007700;"></rewrite></span>
<span style="color: #007700;"></system.webServer></span>
<span style="color: #007700;"></configuration></span>
</pre></div>
</div></div><br />This should work well for your App when the user tries to access a Client side route and refresh the page or when trying to access the route later.<br /><p></p><p><br /><br /></p>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com2tag:blogger.com,1999:blog-5843722851337160433.post-37255592071169983802021-02-15T01:39:00.001-08:002021-02-15T01:39:27.185-08:00Deployment of React Application in IIS (Internet Information Service)<p>Most of you aware of the IIS but might not know whether we can deploy React application in it. Simply the answer is "YES". We can host React application on IIS. This is how we can proceed on it.</p><p></p><ul style="text-align: left;"><li>Use "npm run build" command and build your React application.</li><li>Open IIS manager and create new web site. If you don't know how to do it, please refer [1] the article. It has all the steps what you need to know.</li><li>Grant full control to the "<b>USER</b>" and "<b style="background-color: white; color: #333333; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; text-align: justify;">IIS_IUSRS</b>" profiles for the build folder. It's also mentioned in [1]. </li></ul><div>Now you are done with it. Now you can browse your React application.</div><div><br /></div><div>[1] <a href="https://manulachathurika.blogspot.com/2021/02/deployment-of-cnet-api-in-iis-internet.html">https://manulachathurika.blogspot.com/2021/02/deployment-of-cnet-api-in-iis-internet.html</a></div><p></p>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-53739670355129116452021-02-10T23:45:00.001-08:002021-02-10T23:45:36.395-08:00How to configure Squid proxy and block web sites<p>Squid proxy is a very simple proxy server which we can use to block certain web sites on your server. To setup the Squid proxy please follow this link [1]. </p><p>Once you setup the Squid proxy, here is the way to block certain web sites from your server.</p><p>Go to the C:\squid\etc\squid.conf and add following lines.</p><p><!--HTML generated using hilite.me--></p><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: #888888;"># And finally deny all other access to this proxy</span>
acl myaccess dstdomain .google.com
http_access allow myaccess
acl toblock dstdomain <span style="background-color: #fff0f0;">"c:/squid/bad-sites.txt"</span>
http_access deny toblock
</pre></div>
<p></p><p>Make sure to remove the previous "<b>http_access allow all</b>" line which you have already added when setting up the Squid proxy [1].</p><p>After that create the file called "bad-sites.txt" in "c:/squid" directory and add web sites what you want to block. Make sure to have an empty line at the end of the content. Otherwise the last web site won't be blocked.</p><p><!--HTML generated using hilite.me--></p><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;">.yahoo.com
.facebook.com
.msn.com
.twitter.com
</pre><pre style="line-height: 125%; margin: 0px;"><br /></pre></div>
<p></p><p>Once it's done, restart the squid service from the Services window. Now your server is ready to block the mentioned sites which are in the file.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUpAiria_9x_mKzjPPQU1mJ7RdYnVuhPkLfu8ad6_dEIEg0gvGBCCExlsQ-M73ky-jhrw-4YLm2-xUW_0LbQkblsqxSzGgFf5Mw-k-r-9BjKkC6SRbEKs2AIrs64XqHjCCQG4rUmR7qw5/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="854" data-original-width="1760" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAUpAiria_9x_mKzjPPQU1mJ7RdYnVuhPkLfu8ad6_dEIEg0gvGBCCExlsQ-M73ky-jhrw-4YLm2-xUW_0LbQkblsqxSzGgFf5Mw-k-r-9BjKkC6SRbEKs2AIrs64XqHjCCQG4rUmR7qw5/w566-h235/image.png" width="566" /></a></div><br />[1] <a href="https://techencyclopedia.wordpress.com/2018/04/07/how-to-install-and-configure-squid-proxy-on-windows/">https://techencyclopedia.wordpress.com/2018/04/07/how-to-install-and-configure-squid-proxy-on-windows/</a><p></p>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-44243060062426157002021-02-10T02:25:00.003-08:002021-02-10T02:25:52.426-08:00Deployment of C#.NET API in IIS (Internet Information Service)<p>Most of you aware of the IIS and C#.NET APIs. In this blog post I'm going to teach you how to deploy C#.NET API in IIS. Because most of the times developers are facing issues when making their API deployments in IIS server.</p><p>Frist of all you need to have an <b>admin </b>rights of the server or the local PC which you are going to deploy your application. IIS is coming under the Windows operating system. You need to enable it using control panel. To enable it, click on the Control Panel, Program and Features and click on Turn Windows features on or off. In that dialog box enable <b>Internet Information Services</b> and <b>Internet Information Services Hostable Web Core</b>. Not only that, you have to enable few other services inside the Internet Information Services. Please refer the below screen captures to identify what need to be enabled.</p><p><u>For Web Management Tools</u></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3hwIfEdGm9RN9Gyv0ZowevZHdf9mDDiNpNViHFnjO9U_EOz00awqCD6BjgQ89gcmPr7eJSchTJ0ixEfyAwYCmEuY4ggVvJ0-gGsQZN2LuAE5mAR_dd-nGdmKyeAHsvT0GakuPhjHdkGi/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="226" data-original-width="428" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3hwIfEdGm9RN9Gyv0ZowevZHdf9mDDiNpNViHFnjO9U_EOz00awqCD6BjgQ89gcmPr7eJSchTJ0ixEfyAwYCmEuY4ggVvJ0-gGsQZN2LuAE5mAR_dd-nGdmKyeAHsvT0GakuPhjHdkGi/" width="320" /></a></div><div><br /></div><u>For Application Development Features</u><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSGhRZOW6n4OxVjcm33438sWK472rjBRPMZSFL_lOXXX584_Xyyt2qvzJDDWiPZbg6IUi5pLZDzyKXWTQuk360PdfdfQzq-qtFutkdJnHVr_A3Xlo-xKj9LQz2YLnChU8vuYn8RSu-RUvr/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="452" data-original-width="431" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSGhRZOW6n4OxVjcm33438sWK472rjBRPMZSFL_lOXXX584_Xyyt2qvzJDDWiPZbg6IUi5pLZDzyKXWTQuk360PdfdfQzq-qtFutkdJnHVr_A3Xlo-xKj9LQz2YLnChU8vuYn8RSu-RUvr/" width="229" /></a></div><div><br /></div><u>For Common HTTP Features and Health and Diagnostics</u></div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBehg0GyR9TAAY6NPTir6rKbA3sXbPn420ZaSgJ6FCiBd609y6uK6ymCPyu028Rl0qbOkwHkAoml5GOXszPyghFt0ir4yQnGvJ-M4RBEsV_7wtw8_FBciEgcfoJF3277FlQR4MGOCJ6Sfu/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="589" data-original-width="445" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBehg0GyR9TAAY6NPTir6rKbA3sXbPn420ZaSgJ6FCiBd609y6uK6ymCPyu028Rl0qbOkwHkAoml5GOXszPyghFt0ir4yQnGvJ-M4RBEsV_7wtw8_FBciEgcfoJF3277FlQR4MGOCJ6Sfu/" width="181" /></a></div><div><br /></div><u>For Performance Features and Security</u></div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiObcgjm22G7bwUdRC7eupvXsu9OfeZfJUYUIY_UZhlGbq21jgTEOzI_GgfWYEnJvz67myuhPmt7XNO6Lr_HC1n8bH2GNOjiHc6DaCdhtcfIJWDt928VAHdOwk5OJ3tN7MUWTHVfaesuj2D/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="561" data-original-width="536" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiObcgjm22G7bwUdRC7eupvXsu9OfeZfJUYUIY_UZhlGbq21jgTEOzI_GgfWYEnJvz67myuhPmt7XNO6Lr_HC1n8bH2GNOjiHc6DaCdhtcfIJWDt928VAHdOwk5OJ3tN7MUWTHVfaesuj2D/" width="229" /></a></div><br />Once you enable above features click on ok and it'll take few minutes to enable those features.</div><div><br /></div><div>Now your IIS is ready to deploy the application. Before that you need to make a release build of your application and publish it to a publish folder using Visual Studio.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaN9MJUeZUifIV9Zjd8seXfZ5rW_YB9HN5R5LA2AlID18IimiQbn0W0mzqqvASJ7Us1myPugcA48TzKfnOVhB1ovhcy-MIbvAyV7nACFoJgJMRxcqiukRAGAKHXRDH_3QKG5nfMb3GCaL/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="755" data-original-width="1456" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaN9MJUeZUifIV9Zjd8seXfZ5rW_YB9HN5R5LA2AlID18IimiQbn0W0mzqqvASJ7Us1myPugcA48TzKfnOVhB1ovhcy-MIbvAyV7nACFoJgJMRxcqiukRAGAKHXRDH_3QKG5nfMb3GCaL/w564-h305/image.png" width="564" /></a></div><br />After you publish your application, go to the Internet Information Service (IIS) Manager from the start menu. Then you'll get the IIS Manager window.<br /><p></p><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0hdJAkgdWlsf6YUwrf0qALzSr0YFUcrDJ2_csb2c7FF2m1hyxidQefvYazf6DawTTZ1slpfweP9YubuF9pMSmK90a0KlO6pTMxAUKQsM0i1iOb7qSm2f8xgAuBW6D1QmJcqTyOoFl44wo/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1038" data-original-width="1920" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0hdJAkgdWlsf6YUwrf0qALzSr0YFUcrDJ2_csb2c7FF2m1hyxidQefvYazf6DawTTZ1slpfweP9YubuF9pMSmK90a0KlO6pTMxAUKQsM0i1iOb7qSm2f8xgAuBW6D1QmJcqTyOoFl44wo/w550-h306/image.png" width="550" /></a></div><br />Once you have this window right click on Sites and click on Add Website. In that dialog box provide the Site name and the Physical path of the published directory. Update the port number and click on ok.</div></div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhslGzrBJWGJvUgK4SPF1nZg4n6do39yVSY7JZnOavnP_KN3nyB5Whn1vu9a4eWKu2eUBhyMVNkY2wdPW4Q-J1hysBfS3S5fDtiQOoHLpQLMIi1MjVjwtRDqGSyxigByoIBrE8AaxLrZRG6/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="982" data-original-width="865" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhslGzrBJWGJvUgK4SPF1nZg4n6do39yVSY7JZnOavnP_KN3nyB5Whn1vu9a4eWKu2eUBhyMVNkY2wdPW4Q-J1hysBfS3S5fDtiQOoHLpQLMIi1MjVjwtRDqGSyxigByoIBrE8AaxLrZRG6/w354-h340/image.png" width="354" /></a></div><br />Once you have done with this step your API application will start. But when you try to browse it, most of the time you might get an error page like this.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX4OVYryh5JZuZJHJ-ndVofhEi01x2ssJG4DSBpPCi7icVtOJdOfkzkkWCr0N5F6jXklN4mjPgkzObrTME5wlK5RECSAw7nlgfsxaOKxwaqbJOaivgG_4Lx3oi3FLeYeSumVavXe8sooYl/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="743" data-original-width="1021" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX4OVYryh5JZuZJHJ-ndVofhEi01x2ssJG4DSBpPCi7icVtOJdOfkzkkWCr0N5F6jXklN4mjPgkzObrTME5wlK5RECSAw7nlgfsxaOKxwaqbJOaivgG_4Lx3oi3FLeYeSumVavXe8sooYl/w472-h286/image.png" width="472" /></a></div><br />This is because we need to install few dependencies for the IIS. What we need to do is, download the following software and install them. You can find the solution for this error from the below stack overflow question as well [1].</div><div><br /></div><div>Download and install URL Rewrite Module 2.1 from <a href="https://www.iis.net/downloads/microsoft/url-rewrite">https://www.iis.net/downloads/microsoft/url-rewrite</a></div><div><br /></div><div>Download and install ASP.NET Core 5.0 Runtime (v5.0.3) - Windows Hosting Bundle from <a href="https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-5.0.3-windows-hosting-bundle-installer">https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-5.0.3-windows-hosting-bundle-installer</a></div><div><br /></div><div>For more clarification, you'll need to install below two software. Version might be different.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjipxdRBwG81AeDoj8ZPOyI06WUU1f-9_fVLEg7Lpdci2Ss8XfpmrS1t-ET-PJdWZaOI8q9osXPbkkgNBfrc0XDCzgLVngodjMi6jpvDb6BfuJmeEmuKrB2NtNrPlAvvMPr_ywD2Ffh4828/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="77" data-original-width="299" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjipxdRBwG81AeDoj8ZPOyI06WUU1f-9_fVLEg7Lpdci2Ss8XfpmrS1t-ET-PJdWZaOI8q9osXPbkkgNBfrc0XDCzgLVngodjMi6jpvDb6BfuJmeEmuKrB2NtNrPlAvvMPr_ywD2Ffh4828/" width="320" /></a></div><br />After you done with the above installations, you'll need to enable following user permissions for your published folder. Click on your Web Site, go to <b>Edit Permissions</b> and go to the <b>Security </b>tab. From that tab you'll need to add two uses and give full control to them. Those two users are,</div><div><br /></div><div><b>Users</b></div><div><b>IIS_IUSRS</b></div><div><b><br /></b></div><div>To add those two uses you can use your <b>hostname\above_mentioned_user_names</b> and click on check names. Then it'll automatically come into the <b>Groups or user names </b>section.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT5yIMON57na2wvQ3-upFb4CiuGlJtuNhI4adjX0B-zO4k9yVMr706v_XGs6HXX4DiJYSlFh5o3FWxCsjRhO4UcP7q05sRBPp-z52eYhbxPbv67NuUoADelkGdcuhaomzrJbN2u48l3GFf/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="600" data-original-width="517" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT5yIMON57na2wvQ3-upFb4CiuGlJtuNhI4adjX0B-zO4k9yVMr706v_XGs6HXX4DiJYSlFh5o3FWxCsjRhO4UcP7q05sRBPp-z52eYhbxPbv67NuUoADelkGdcuhaomzrJbN2u48l3GFf/w286-h291/image.png" width="286" /></a></div><br /><br /></div><div><br /></div><div>Now you are good to go with the API. Restart the IIS and click on browsing the API. Then you'll be able to see the swagger-ui for that deployed API.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijM_EfWZeg3IMBq08ULCODGb8SIj9_-Y4UsvFOfR46GSVO6sPsGuQzgShBkpneLUhrVvDo4uGHHiZKKPZ8dtEyOw1Xy-UybOozCwLNoFf6JqoKtmDTK1vDEpmaXLWbTE_3BRkMl7HIeIhJ/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="628" data-original-width="1130" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijM_EfWZeg3IMBq08ULCODGb8SIj9_-Y4UsvFOfR46GSVO6sPsGuQzgShBkpneLUhrVvDo4uGHHiZKKPZ8dtEyOw1Xy-UybOozCwLNoFf6JqoKtmDTK1vDEpmaXLWbTE_3BRkMl7HIeIhJ/w502-h274/image.png" width="502" /></a></div><br /><br /></div><div><br /></div><div>[1] <a href="https://stackoverflow.com/questions/16836473/asp-net-http-error-500-19-internal-server-error-0x8007000d">https://stackoverflow.com/questions/16836473/asp-net-http-error-500-19-internal-server-error-0x8007000d</a> </div>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-580965806272893102019-11-25T00:45:00.001-08:002019-11-25T00:45:12.742-08:00How to create Linux docker container for python web scrapesIf you are trying to create a Linux docker container for python web scrapes, it may be a tedious task. Because you need to setup selenium, python, chrome driver, google chrome browser inside the container. In thins blog post I'm going to show how to create a Linux docker container with all the necessary software for the web scraping.<br />
<br />
First you need to pull the selenium/standalone-chrome image to you docker local<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">docker pull selenium/standalone-chrome
</pre>
</div>
<br />
After the download finished, run the docker image<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">docker run -d --name scrape -p 4444:4444 selenium/standalone-chrome
</pre>
</div>
<br />
Then you can login to the docker container<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">docker <span style="color: #007020;">exec</span> -it scrape /bin/bash
</pre>
</div>
<br />
Once you login to the docker container, you need to install python. By default it contains python 2.7+. But it's better to install latest python version inside the container.<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">sudo su
apt update
apt install software-properties-common
apt install python3.7
apt-get install python-pip python-dev build-essential
pip install selenium --cert <span style="background-color: #fff0f0;">"cert file"</span>
</pre>
</div>
<br />
After installing python and other necessary software, you can copy the python web scrape file to the container and run.<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">docker cp getContent.py scrape:/home/seluser
</pre>
</div>
<br />
If you want to save the created container to the local machine and load it again you can use following commands.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">docker commit scrape webscrape_container:1.0
docker save webscrape_container > webscrape_container.tar
docker load < webscrape_container.tar
</pre>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com2tag:blogger.com,1999:blog-5843722851337160433.post-35237980115166922172019-09-27T00:53:00.003-07:002019-09-27T00:53:51.233-07:00Sprint Rest Template Error HandlingIn this short tutorial, I'll discuss how to implement and inject the ResponseErrorHandler interface in a RestTemplate instance – to gracefully handle HTTP errors returned by remote APIs.<br />
<h3>
Implementing a ResponseErrorHandler</h3>
<div>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.IOException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.http.HttpStatus</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.http.ResponseEntity</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.http.client.ClientHttpResponse</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.bind.annotation.ControllerAdvice</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.bind.annotation.ExceptionHandler</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.client.ResponseErrorHandler</span><span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@ControllerAdvice</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">RequestExceptionHandler</span> <span style="color: #008800; font-weight: bold;">implements</span> ResponseErrorHandler <span style="color: #333333;">{</span>
<span style="color: #555555; font-weight: bold;">@ExceptionHandler</span>
<span style="color: #008800; font-weight: bold;">public</span> ResponseEntity<span style="color: #333333;"><</span>RequestErrorResponse<span style="color: #333333;">></span> <span style="color: #0066bb; font-weight: bold;">handleException</span><span style="color: #333333;">(</span>ResponseErrorException exc<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
RequestErrorResponse error <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> RequestErrorResponse<span style="color: #333333;">(</span>HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">INTERNAL_SERVER_ERROR</span><span style="color: #333333;">.</span><span style="color: #0000cc;">value</span><span style="color: #333333;">(),</span> exc<span style="color: #333333;">.</span><span style="color: #0000cc;">getMessage</span><span style="color: #333333;">(),</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">currentTimeMillis</span><span style="color: #333333;">());</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> ResponseEntity<span style="color: #333333;"><>(</span>error<span style="color: #333333;">,</span> HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">INTERNAL_SERVER_ERROR</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@ExceptionHandler</span>
<span style="color: #008800; font-weight: bold;">public</span> ResponseEntity<span style="color: #333333;"><</span>RequestErrorResponse<span style="color: #333333;">></span> <span style="color: #0066bb; font-weight: bold;">handleException</span><span style="color: #333333;">(</span>Exception exc<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
RequestErrorResponse error <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> RequestErrorResponse<span style="color: #333333;">(</span>HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">BAD_REQUEST</span><span style="color: #333333;">.</span><span style="color: #0000cc;">value</span><span style="color: #333333;">(),</span> exc<span style="color: #333333;">.</span><span style="color: #0000cc;">getMessage</span><span style="color: #333333;">(),</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">currentTimeMillis</span><span style="color: #333333;">());</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> ResponseEntity<span style="color: #333333;"><>(</span>error<span style="color: #333333;">,</span> HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">BAD_REQUEST</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">boolean</span> <span style="color: #0066bb; font-weight: bold;">hasError</span><span style="color: #333333;">(</span>ClientHttpResponse response<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> IOException <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">false</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">handleError</span><span style="color: #333333;">(</span>ClientHttpResponse response<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> IOException <span style="color: #333333;">{</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<h3>
Implementing ResponseErrorException</h3>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">ResponseErrorException</span> <span style="color: #008800; font-weight: bold;">extends</span> RuntimeException <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">final</span> <span style="color: #333399; font-weight: bold;">long</span> serialVersionUID <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">5263513410276994541L</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">(</span>String arg0<span style="color: #333333;">,</span> Throwable arg1<span style="color: #333333;">,</span> <span style="color: #333399; font-weight: bold;">boolean</span> arg2<span style="color: #333333;">,</span> <span style="color: #333399; font-weight: bold;">boolean</span> arg3<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">(</span>arg0<span style="color: #333333;">,</span> arg1<span style="color: #333333;">,</span> arg2<span style="color: #333333;">,</span> arg3<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">(</span>String arg0<span style="color: #333333;">,</span> Throwable arg1<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">(</span>arg0<span style="color: #333333;">,</span> arg1<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">(</span>String arg0<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">(</span>arg0<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">(</span>Throwable arg0<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">(</span>arg0<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<h3>
Implementing RequestErrorResponse</h3>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">RequestErrorResponse</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #333399; font-weight: bold;">int</span> status<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> String message<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #333399; font-weight: bold;">long</span> timeStamp<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">RequestErrorResponse</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">RequestErrorResponse</span><span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span> status<span style="color: #333333;">,</span> String message<span style="color: #333333;">,</span> <span style="color: #333399; font-weight: bold;">long</span> timeStamp<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">status</span> <span style="color: #333333;">=</span> status<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">message</span> <span style="color: #333333;">=</span> message<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">timeStamp</span> <span style="color: #333333;">=</span> timeStamp<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">int</span> <span style="color: #0066bb; font-weight: bold;">getStatus</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> status<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">setStatus</span><span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span> status<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">status</span> <span style="color: #333333;">=</span> status<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> String <span style="color: #0066bb; font-weight: bold;">getMessage</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> message<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">setMessage</span><span style="color: #333333;">(</span>String message<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">message</span> <span style="color: #333333;">=</span> message<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">long</span> <span style="color: #0066bb; font-weight: bold;">getTimeStamp</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> timeStamp<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">setTimeStamp</span><span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">long</span> timeStamp<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">timeStamp</span> <span style="color: #333333;">=</span> timeStamp<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<br />
Next, we build the RestTemplate instance using the RestTemplateBuilder to introduce our RequestExceptionHandler. This is our service class.<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #555555; font-weight: bold;">@Service</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">DBSyncClientAPIServiceImpl</span> <span style="color: #008800; font-weight: bold;">implements</span> DBSyncClientAPIService <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">final</span> Logger logger <span style="color: #333333;">=</span> LoggerFactory<span style="color: #333333;">.</span><span style="color: #0000cc;">getLogger</span><span style="color: #333333;">(</span>DBSyncClientAPIServiceImpl<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">private</span> RestTemplate restTemplate<span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@Autowired</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">DBSyncClientAPIServiceImpl</span><span style="color: #333333;">(</span>RestTemplateBuilder restTemplateBuilder<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
restTemplate <span style="color: #333333;">=</span> restTemplateBuilder<span style="color: #333333;">.</span><span style="color: #0000cc;">errorHandler</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">new</span> RequestExceptionHandler<span style="color: #333333;">()).</span><span style="color: #0000cc;">build</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<h3>
Testing Implementation</h3>
<div>
Then using the rest template entity, we can call the remote web service as follows and handle the exceptions thrown by the remote web service.</div>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">ResponseEntity<span style="color: #333333;"><?></span> response <span style="color: #333333;">=</span> restTemplate<span style="color: #333333;">.</span><span style="color: #0000cc;">exchange</span><span style="color: #333333;">(</span>endpointURL<span style="color: #333333;">,</span> HttpMethod<span style="color: #333333;">.</span><span style="color: #0000cc;">GET</span><span style="color: #333333;">,</span> request<span style="color: #333333;">,</span> Object<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>response<span style="color: #333333;">.</span><span style="color: #0000cc;">getStatusCode</span><span style="color: #333333;">()</span> <span style="color: #333333;">==</span> HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">OK</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #333333;">(</span>List<span style="color: #333333;"><</span>Map<span style="color: #333333;"><</span>String<span style="color: #333333;">,</span> Object<span style="color: #333333;">>>)</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getBody</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #333333;">{</span>
logger<span style="color: #333333;">.</span><span style="color: #0000cc;">error</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">">>>>> Error response in getTableData method : "</span> <span style="color: #333333;">+</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getBody</span><span style="color: #333333;">());</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">ResponseErrorException</span><span style="color: #333333;">(</span>
<span style="background-color: #fff0f0;">"Error in response : "</span> <span style="color: #333333;">+</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getStatusCode</span><span style="color: #333333;">()</span> <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">" : "</span> <span style="color: #333333;">+</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getBody</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span>
</pre>
</div>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com2tag:blogger.com,1999:blog-5843722851337160433.post-17420843222187437372019-09-24T02:08:00.002-07:002019-09-24T02:08:22.325-07:00How to call HTTPs endpoints using RestTemplateIf you want to call HTTPs endpoints using RestTemplate you can use following code segment to achieve it.<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">HttpsURLConnection<span style="color: #333333;">.</span><span style="color: #0000cc;">setDefaultHostnameVerifier</span><span style="color: #333333;">((</span>hostname<span style="color: #333333;">,</span> session<span style="color: #333333;">)</span> <span style="color: #333333;">-></span> <span style="color: #008800; font-weight: bold;">true</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">final</span> String url <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"https://localhost/api/customer"</span><span style="color: #333333;">;</span>
HttpHeaders headers <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> HttpHeaders<span style="color: #333333;">();</span>
headers<span style="color: #333333;">.</span><span style="color: #0000cc;">setAccept</span><span style="color: #333333;">(</span>Collections<span style="color: #333333;">.</span><span style="color: #0000cc;">singletonList</span><span style="color: #333333;">(</span>MediaType<span style="color: #333333;">.</span><span style="color: #0000cc;">APPLICATION_JSON</span><span style="color: #333333;">));</span>
headers<span style="color: #333333;">.</span><span style="color: #0000cc;">setContentType</span><span style="color: #333333;">(</span>MediaType<span style="color: #333333;">.</span><span style="color: #0000cc;">APPLICATION_JSON</span><span style="color: #333333;">);</span>
headers<span style="color: #333333;">.</span><span style="color: #0000cc;">setBasicAuth</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"admin"</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"password"</span><span style="color: #333333;">);</span>
HttpEntity request <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> HttpEntity<span style="color: #333333;">(</span>headers<span style="color: #333333;">);</span>
RestTemplate restTemplate <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> RestTemplate<span style="color: #333333;">();</span>
ResponseEntity<span style="color: #333333;"><</span>TableDDL<span style="color: #333333;">></span> response <span style="color: #333333;">=</span> restTemplate<span style="color: #333333;">.</span><span style="color: #0000cc;">exchange</span><span style="color: #333333;">(</span>url<span style="color: #333333;">,</span> HttpMethod<span style="color: #333333;">.</span><span style="color: #0000cc;">GET</span><span style="color: #333333;">,</span> request<span style="color: #333333;">,</span> TableDDL<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">,</span> <span style="color: #0000dd; font-weight: bold;">1</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">if</span><span style="color: #333333;">(</span>response<span style="color: #333333;">.</span><span style="color: #0000cc;">getStatusCode</span><span style="color: #333333;">()</span> <span style="color: #333333;">==</span> HttpStatus<span style="color: #333333;">.</span><span style="color: #0000cc;">OK</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getBody</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<br />
But when you do this you'll get an error message like below.<br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">{
<span style="color: #007700;">"status"</span>: <span style="color: #0000dd; font-weight: bold;">400</span>,
<span style="color: #007700;">"message"</span>: <span style="background-color: #fff0f0;">"I/O error on GET request for \"https://localhost/api/customer\": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"</span>,
<span style="color: #007700;">"timeStamp"</span>: <span style="color: #0000dd; font-weight: bold;">1569311501650</span>
}
</pre>
</div>
<br />
In order to overcome this issue, you'll need to add your generated <b>crt </b>file details to <b>cacerts </b>file, located in your JRE directory.<br />
<br />
If you have already generate a jks file, you can ignore below step.<br />
<br />
To generate a jks file, you can use following command.<br />
<br />
<div style="background: #000000; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #cccccc;">keytool</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">genkey</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">alias</span> <span style="color: #cccccc;">selfsigned_localhost_sslserver</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keyalg</span> <span style="color: #cccccc;">RSA</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keysize</span> <span style="color: #cd00cd;">2048</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">validity</span> <span style="color: #cd00cd;">700</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keypass</span> <span style="color: #cccccc;">changeit</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">storepass</span> <span style="color: #cccccc;">changeit</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keystore</span> <span style="color: #cccccc;">ssl</span><span style="color: #3399cc;">-</span><span style="color: #cccccc;">server</span><span style="color: #3399cc;">.</span><span style="color: #cccccc;">jks</span>
</pre>
</div>
<br />
After that you have to generate a <b>crt </b>file from the above generated <b>jks </b>file. Use following command to generate the <b>crt </b>file.<br />
<br />
<div style="background: #000000; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #cccccc;">keytool</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">export</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keystore</span> <span style="color: #cccccc;">ssl</span><span style="color: #3399cc;">-</span><span style="color: #cccccc;">server</span><span style="color: #3399cc;">.</span><span style="color: #cccccc;">jks</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">alias</span> <span style="color: #cccccc;">selfsigned_localhost_sslserver</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">file</span> <span style="color: #cccccc;">mysecurity</span><span style="color: #3399cc;">.</span><span style="color: #cccccc;">crt</span>
</pre>
</div>
<br />
Now you can import this generated crt file to cacerts file which is located in your JRE directory.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #000000; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #cccccc;">keytool</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">importcert</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">file</span> <span style="color: #cccccc;">mysecurity</span><span style="color: #3399cc;">.</span><span style="color: #cccccc;">crt</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">alias</span> <span style="color: #cccccc;">selfsigned_localhost_sslserver</span> <span style="color: #3399cc;">-</span><span style="color: #cccccc;">keystore</span> <span style="color: #cd0000;">"C:\Program Files\Java\jre1.8.0_181\lib\security\cacerts"</span>
</pre>
</div>
<br />
That’s all, restart your application and it should work fine. If it still doesn’t work and get an SSL handshake exception. It probably means you are using different domain then registered in the certificate.Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-83580164893565320922019-09-24T00:26:00.004-07:002019-09-24T00:27:23.888-07:00Enable HTTPs in Spring BootTo enable HTTPs in Spring Boot project first you need to generate key file using java keytool.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #000000; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #cccccc;">keytool</span> <span style="color: #cccccc;">-genkey</span> <span style="color: #cccccc;">-alias</span> <span style="color: #cccccc;">selfsigned_localhost_sslserver</span> <span style="color: #cccccc;">-keyalg</span> <span style="color: #cccccc;">RSA</span> <span style="color: #cccccc;">-keysize</span> <span style="color: #cccccc;">2048</span> <span style="color: #cccccc;">-validity</span> <span style="color: #cccccc;">700</span> <span style="color: #cccccc;">-keypass</span> <span style="color: #cccccc;">changeit</span> <span style="color: #cccccc;">-storepass</span> <span style="color: #cccccc;">changeit</span> <span style="color: #cccccc;">-keystore</span> <span style="color: #cccccc;">ssl-server.jks</span>
</pre>
</div>
<br />
Then add the following properties to the application.properties file<br />
<br />
<div style="background: #000000; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #cccccc;">server.port=8443</span>
<span style="color: #cccccc;">server.ssl.key-alias=selfsigned_localhost_sslserver</span>
<span style="color: #cccccc;">server.ssl.key-password=changeit</span>
<span style="color: #cccccc;">server.ssl.key-store=classpath</span><span style="border: 1px solid #ff0000; color: #cccccc;">:</span><span style="color: #cccccc;">ssl-server.jks</span>
<span style="color: #cccccc;">server.ssl.key-store-provider=SUN</span>
<span style="color: #cccccc;">server.ssl.key-store-type=JKS</span>
</pre>
</div>
<br />
That's it. After that you can create a RESTful web service and use it as HTTPs.Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-83255661724955385662019-09-16T00:10:00.002-07:002019-09-16T00:16:35.202-07:00Host Flask App in IIS & ApacheFollowing are the steps we need to follow to host Flask app in IIS & Apache. This is very tedious task. You'll get tons of errors when doing this. That's why I listed down the steps which I followed to host Flask App in IIS & Apache.<br />
<ul>
<li>Install WAMP server</li>
<li>Install Visual studio build tools and then install Visual C++ 14</li>
<li>Install python (I used 3.6.7)</li>
</ul>
<b><u>Using pip you have to install following</u></b><br />
<ul>
<li>Flask</li>
<li>connexion</li>
<li>injector==0.12.0</li>
<li>Flask-Injector</li>
<li>fastavro</li>
<li>pandas</li>
<li>flask-cors</li>
<li>connexion[swagger-ui]</li>
<li>fastavro</li>
</ul>
Install mod_wsgi for windows <a href="https://pypi.org/project/mod_wsgi/">https://pypi.org/project/mod_wsgi/</a><br />
<br />
You can download the source from mod_wsgi source<br />
<ul>
<li><a href="https://github.com/GrahamDumpleton/mod_wsgi">https://github.com/GrahamDumpleton/mod_wsgi</a></li>
<li><a href="http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/">http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/</a></li>
</ul>
Following links teach how to deploy the application on WAMP<br />
<a href="https://watchs360.wordpress.com/deploy-python-flask-wampserver/">https://watchs360.wordpress.com/deploy-python-flask-wampserver/</a><br />
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-34596833172080057712019-09-15T23:56:00.004-07:002019-09-15T23:59:16.346-07:00Getting Auto Generated Key Value to Program<span style="font-family: Times, Times New Roman, serif;">Assume that you are using auto generated column value in your database table. For the insertion query, if you want to get the what is the next auto generated column value, you can use following code segment to do it.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">We can use, KeyHolder keyHolder = new GeneratedKeyHolder(); for that operation.</span><br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17</pre>
</td><td><pre style="line-height: 125%; margin: 0;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">addSyncDetails</span><span style="color: #333333;">(</span>SyncDetails request<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">final</span> String sql <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"INSERT INTO details (table_name, execution_id, is_sync) values (?, ?, ?)"</span><span style="color: #333333;">;</span>
KeyHolder keyHolder <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> GeneratedKeyHolder<span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">jdbcTemplate</span><span style="color: #333333;">.</span><span style="color: #0000cc;">update</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">new</span> PreparedStatementCreator<span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> PreparedStatement <span style="color: #0066bb; font-weight: bold;">createPreparedStatement</span><span style="color: #333333;">(</span>Connection connection<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> SQLException <span style="color: #333333;">{</span>
PreparedStatement preparedStatement <span style="color: #333333;">=</span> connection<span style="color: #333333;">.</span><span style="color: #0000cc;">prepareStatement</span><span style="color: #333333;">(</span>sql<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> String<span style="color: #333333;">[]</span> <span style="color: #333333;">{</span> <span style="background-color: #fff0f0;">"id"</span> <span style="color: #333333;">});</span>
preparedStatement<span style="color: #333333;">.</span><span style="color: #0000cc;">setString</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">1</span><span style="color: #333333;">,</span> request<span style="color: #333333;">.</span><span style="color: #0000cc;">getTableName</span><span style="color: #333333;">());</span>
preparedStatement<span style="color: #333333;">.</span><span style="color: #0000cc;">setString</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">2</span><span style="color: #333333;">,</span> request<span style="color: #333333;">.</span><span style="color: #0000cc;">getExecutionId</span><span style="color: #333333;">());</span>
preparedStatement<span style="color: #333333;">.</span><span style="color: #0000cc;">setString</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">3</span><span style="color: #333333;">,</span> request<span style="color: #333333;">.</span><span style="color: #0000cc;">getIsSync</span><span style="color: #333333;">());</span>
<span style="color: #008800; font-weight: bold;">return</span> preparedStatement<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">},</span> keyHolder<span style="color: #333333;">);</span>
request<span style="color: #333333;">.</span><span style="color: #0000cc;">setRequestId</span><span style="color: #333333;">(</span>keyHolder<span style="color: #333333;">.</span><span style="color: #0000cc;">getKey</span><span style="color: #333333;">().</span><span style="color: #0000cc;">intValue</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-83762275519543708382019-09-10T23:23:00.002-07:002019-09-11T02:03:17.446-07:00Spring Security With Basic Authentication In Spring Boot<h2>
<ul></ul>
<b><span style="font-family: "times" , "times new roman" , serif;">What Is Basic Authentication ?</span></b></h2>
<span style="font-weight: normal;">Basic authentication is a standard HTTP header with the user and password encoded in base64 : Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==.The userName and password is encoded in the format username:password. This is one of the simplest technique to protect the REST resources because it does not require cookies. session identifiers or any login pages.</span><br />
<div>
<span style="font-family: "times" , "times new roman" , serif;"><br /></span></div>
<div>
<span style="font-family: "times" , "times new roman" , serif;">In case of basic authentication, the username and password is only encoded with Base64, but not encrypted or hashed in any way. Hence, it can be compromised by any man in the middle. Hence, it is always recommended to authenticate rest API calls by this header over a ssl connection.</span></div>
<ul><b><span style="font-family: "times" , "times new roman" , serif;">
<li><b>Maven Dependency</b></li>
</span></b></ul>
<span style="font-family: "times" , "times new roman" , serif;">To secure RESTful APIs, we must include spring security related jar files in project run time. Simplest way to add all required jars is add spring-boot-starter-security dependency.</span><br />
<div>
<br /></div>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;">1
2
3
4</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #007700;"><dependency></span>
<span style="color: #007700;"><groupId></span>org.springframework.boot<span style="color: #007700;"></groupId></span>
<span style="color: #007700;"><artifactId></span>spring-boot-starter-security<span style="color: #007700;"></artifactId></span>
<span style="color: #007700;"></dependency></span>
</pre>
</td></tr>
</tbody></table>
</div>
<div>
<ul>
<li><b>Configure Application</b></li>
</ul>
<div>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.boot.SpringApplication</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.boot.autoconfigure.SpringBootApplication</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.boot.web.servlet.support.SpringBootServletInitializer</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.swagger2.annotations.EnableSwagger2</span><span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@SpringBootApplication</span><span style="color: #333333;">(</span>scanBasePackages <span style="color: #333333;">=</span> <span style="color: #333333;">{</span> <span style="background-color: #fff0f0;">"com.manula"</span> <span style="color: #333333;">})</span>
<span style="color: #555555; font-weight: bold;">@EnableSwagger2</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Application</span> <span style="color: #008800; font-weight: bold;">extends</span> SpringBootServletInitializer <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">main</span><span style="color: #333333;">(</span>String<span style="color: #333333;">[]</span> args<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
SpringApplication<span style="color: #333333;">.</span><span style="color: #0000cc;">run</span><span style="color: #333333;">(</span>Application<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">,</span> args<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
</div>
<ul>
<li><b>Configure WebSecurityConfigurerAdapter</b></li>
</ul>
<span style="font-family: "times" , "times new roman" , serif;">To enable authentication and authorization support in spring boot RESTful APIs, we can configure a utility class WebSecurityConfigurerAdapter. It helps in requiring the user to be authenticated prior to accessing any configured URL (or all urls) within our application.</span></div>
<div>
<br /></div>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.beans.factory.annotation.Autowired</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.context.annotation.Bean</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.context.annotation.Configuration</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.config.annotation.web.builders.HttpSecurity</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.config.annotation.web.configuration.EnableWebSecurity</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder</span><span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@Configuration</span>
<span style="color: #555555; font-weight: bold;">@EnableWebSecurity</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">SecurityConfig</span> <span style="color: #008800; font-weight: bold;">extends</span> WebSecurityConfigurerAdapter <span style="color: #333333;">{</span>
<span style="color: #555555; font-weight: bold;">@Autowired</span>
<span style="color: #008800; font-weight: bold;">private</span> AuthenticationEntryPoint authEntryPoint<span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">protected</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">configure</span><span style="color: #333333;">(</span>HttpSecurity http<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> Exception <span style="color: #333333;">{</span>
http<span style="color: #333333;">.</span><span style="color: #0000cc;">csrf</span><span style="color: #333333;">().</span><span style="color: #0000cc;">disable</span><span style="color: #333333;">().</span><span style="color: #0000cc;">authorizeRequests</span><span style="color: #333333;">().</span><span style="color: #0000cc;">anyRequest</span><span style="color: #333333;">().</span><span style="color: #0000cc;">authenticated</span><span style="color: #333333;">().</span><span style="color: #0000cc;">and</span><span style="color: #333333;">().</span><span style="color: #0000cc;">httpBasic</span><span style="color: #333333;">()</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">authenticationEntryPoint</span><span style="color: #333333;">(</span>authEntryPoint<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@Autowired</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">configureGlobal</span><span style="color: #333333;">(</span>AuthenticationManagerBuilder auth<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> Exception <span style="color: #333333;">{</span>
auth<span style="color: #333333;">.</span><span style="color: #0000cc;">inMemoryAuthentication</span><span style="color: #333333;">().</span><span style="color: #0000cc;">withUser</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"admin"</span><span style="color: #333333;">)</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">password</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"$2a$04$AjFEmZeX7mN8zSn57PUEZeJgBeoKMvwteZMBiP57Jb4AGFsUORmLC"</span><span style="color: #333333;">).</span><span style="color: #0000cc;">roles</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"USER"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@Bean</span>
<span style="color: #008800; font-weight: bold;">public</span> BCryptPasswordEncoder <span style="color: #0066bb; font-weight: bold;">encoder</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">BCryptPasswordEncoder</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
<ul>
<li><b>Configure WebApplicationInitializer</b></li>
</ul>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.ServletContext</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.ServletException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.ServletRegistration</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.WebApplicationInitializer</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.context.support.AnnotationConfigWebApplicationContext</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">ApplicationInitializer</span> <span style="color: #008800; font-weight: bold;">implements</span> WebApplicationInitializer <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">onStartup</span><span style="color: #333333;">(</span>ServletContext container<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> ServletException <span style="color: #333333;">{</span>
AnnotationConfigWebApplicationContext ctx <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> AnnotationConfigWebApplicationContext<span style="color: #333333;">();</span>
ctx<span style="color: #333333;">.</span><span style="color: #0000cc;">setServletContext</span><span style="color: #333333;">(</span>container<span style="color: #333333;">);</span>
ServletRegistration<span style="color: #333333;">.</span><span style="color: #0000cc;">Dynamic</span> servlet <span style="color: #333333;">=</span> container<span style="color: #333333;">.</span><span style="color: #0000cc;">addServlet</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"dispatcher"</span><span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> DispatcherServlet<span style="color: #333333;">(</span>ctx<span style="color: #333333;">));</span>
servlet<span style="color: #333333;">.</span><span style="color: #0000cc;">setLoadOnStartup</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">1</span><span style="color: #333333;">);</span>
servlet<span style="color: #333333;">.</span><span style="color: #0000cc;">addMapping</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"/"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
<ul>
<li><b>Configure BasicAuthenticationEntryPoint</b></li>
</ul>
<span style="color: #212529; font-family: "times" , "times new roman" , serif;"><span style="background-color: white;">Now let us define our authentication entry point.This class will be responsible to send response when the credentials are no longer authorized. If the authentication event was successful, or authentication was not attempted because the HTTP header did not contain a supported authentication request, the filter chain will continue as normal. The only time the filter chain will be interrupted is if authentication fails and the AuthenticationEntryPoint is called.</span></span><br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.IOException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.PrintWriter</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.ServletException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.http.HttpServletRequest</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.servlet.http.HttpServletResponse</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.core.AuthenticationException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.stereotype.Component</span><span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@Component</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">AuthenticationEntryPoint</span> <span style="color: #008800; font-weight: bold;">extends</span> BasicAuthenticationEntryPoint <span style="color: #333333;">{</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">commence</span><span style="color: #333333;">(</span>HttpServletRequest request<span style="color: #333333;">,</span> HttpServletResponse response<span style="color: #333333;">,</span> AuthenticationException authEx<span style="color: #333333;">)</span>
<span style="color: #008800; font-weight: bold;">throws</span> IOException<span style="color: #333333;">,</span> ServletException <span style="color: #333333;">{</span>
response<span style="color: #333333;">.</span><span style="color: #0000cc;">addHeader</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"WWW-Authenticate"</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"Basic realm="</span> <span style="color: #333333;">+</span> getRealmName<span style="color: #333333;">());</span>
response<span style="color: #333333;">.</span><span style="color: #0000cc;">setStatus</span><span style="color: #333333;">(</span>HttpServletResponse<span style="color: #333333;">.</span><span style="color: #0000cc;">SC_UNAUTHORIZED</span><span style="color: #333333;">);</span>
PrintWriter writer <span style="color: #333333;">=</span> response<span style="color: #333333;">.</span><span style="color: #0000cc;">getWriter</span><span style="color: #333333;">();</span>
writer<span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"HTTP Status 401 - "</span> <span style="color: #333333;">+</span> authEx<span style="color: #333333;">.</span><span style="color: #0000cc;">getMessage</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">afterPropertiesSet</span><span style="color: #333333;">()</span> <span style="color: #008800; font-weight: bold;">throws</span> Exception <span style="color: #333333;">{</span>
setRealmName<span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"DeveloperStack"</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">super</span><span style="color: #333333;">.</span><span style="color: #0000cc;">afterPropertiesSet</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
<ul>
<li><b>Configure SwaggerConfig</b></li>
</ul>
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.context.annotation.Bean</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">org.springframework.context.annotation.Configuration</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.google.common.base.Predicate</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.google.common.base.Predicates</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.builders.ApiInfoBuilder</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.builders.PathSelectors</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.builders.RequestHandlerSelectors</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.service.ApiInfo</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.spi.DocumentationType</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.spring.web.plugins.Docket</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">springfox.documentation.swagger2.annotations.EnableSwagger2</span><span style="color: #333333;">;</span>
<span style="color: #555555; font-weight: bold;">@Configuration</span>
<span style="color: #555555; font-weight: bold;">@EnableSwagger2</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">SwaggerConfig</span> <span style="color: #333333;">{</span>
<span style="color: #555555; font-weight: bold;">@Bean</span>
<span style="color: #008800; font-weight: bold;">public</span> Docket <span style="color: #0066bb; font-weight: bold;">produceApi</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">Docket</span><span style="color: #333333;">(</span>DocumentationType<span style="color: #333333;">.</span><span style="color: #0000cc;">SWAGGER_2</span><span style="color: #333333;">).</span><span style="color: #0000cc;">apiInfo</span><span style="color: #333333;">(</span>apiInfo<span style="color: #333333;">()).</span><span style="color: #0000cc;">select</span><span style="color: #333333;">()</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">apis</span><span style="color: #333333;">(</span>RequestHandlerSelectors<span style="color: #333333;">.</span><span style="color: #0000cc;">basePackage</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"com.manula"</span><span style="color: #333333;">)).</span><span style="color: #0000cc;">paths</span><span style="color: #333333;">(</span>paths<span style="color: #333333;">()).</span><span style="color: #0000cc;">build</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">private</span> ApiInfo <span style="color: #0066bb; font-weight: bold;">apiInfo</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">ApiInfoBuilder</span><span style="color: #333333;">().</span><span style="color: #0000cc;">title</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"RESTful APIs"</span><span style="color: #333333;">)</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">description</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"This page lists all the RESTful APIs."</span><span style="color: #333333;">).</span><span style="color: #0000cc;">version</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"1.0.0"</span><span style="color: #333333;">)</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">build</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">private</span> Predicate<span style="color: #333333;"><</span>String<span style="color: #333333;">></span> <span style="color: #0066bb; font-weight: bold;">paths</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> Predicates<span style="color: #333333;">.</span><span style="color: #0000cc;">and</span><span style="color: #333333;">(</span>PathSelectors<span style="color: #333333;">.</span><span style="color: #0000cc;">regex</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"/api.*"</span><span style="color: #333333;">),</span> Predicates<span style="color: #333333;">.</span><span style="color: #0000cc;">not</span><span style="color: #333333;">(</span>PathSelectors<span style="color: #333333;">.</span><span style="color: #0000cc;">regex</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"/error.*"</span><span style="color: #333333;">)));</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-12966565837076931212019-08-29T21:46:00.000-07:002019-08-29T21:46:34.656-07:00Common Git commandsFollowing are the common commands in GIT<br />
<br />
<ul>
<li>git status </li>
<li>git diff</li>
<li>git add <fileName1> <fileName2></li>
<li>git add .</li>
<li>git commit <filename1> <filename2> -m "commit message"</li>
<li>git commit –a</li>
<li>git push -u origin <branchName></li>
<li>git push</li>
<li>git branch</li>
<li>git branch <branchName></li>
<li>git branch –D <branchName></li>
<li>git pull</li>
<li>git checkout <branchName></li>
<li>git checkout -b <branchName> origin/<branchName></li>
<li>git merge <branch1> <branch2></li>
</ul>
<br />
<div>
<br /></div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-7246096826168466472019-08-29T21:42:00.000-07:002019-08-29T21:42:10.091-07:00Maven Cheat Sheet<h2>
<b>Getting started with Maven</b></h2>
<h3>
Create Java project</h3>
mvn archetype:generate -DgroupId=org.yourcompany.project -DartifactId=application<br />
<br />
<h3>
Create web project</h3>
mvn archetype:generate -DgroupId=org.yourcompany.project -DartifactId=application<br />
-DarchetypeArtifactId=maven-archetype-webapp<br />
<br />
<h3>
Create archetype from existing project</h3>
mvn archetype:create-from-project<br />
<br />
<h3>
Main phases</h3>
<b>clean </b>— delete target directory<br />
<b>validate </b>— validate, if the project is correct compile — compile source code, classes stored in target/classes<br />
<b>test </b>— run tests<br />
<b>package </b>— take the compiled code and package it in its distributable format, e.g. JAR, WAR<br />
<b>verify </b>— run any checks to verify the package is valid and meets quality criteria<br />
<b>install </b>— install the package into the local repository<br />
<b>deploy </b>— copies the final package to the remote repository<br />
<br />
<h3>
Useful command line options</h3>
<b>-DskipTests=true</b> compiles the tests, but skips running them<br />
<b>-Dmaven.test.skip=true</b> skips compiling the tests and does not run them<br />
<b>-T</b> - number of threads:<br />
<b> -T</b> 4 is a decent default<br />
<b> -T 2C</b> - 2 threads per CPU<br />
<b>-rf</b>, --resume-from resume build from the specified project<br />
<b>-pl</b>, --projects makes Maven build only specified modules and not the whole project<br />
<b>-am</b>, --also-make makes Maven figure out what modules out target depends on and build them too<br />
<b>-o</b>, --offline work offline<br />
<b>-X</b>, --debug enable debug output<br />
<b>-P</b>, --activate-profiles comma-delimited list of profiles to activate<br />
<b>-U</b>, --update-snapshots forces a check for updated dependencies on remote repositories<br />
<b>-ff</b>, --fail-fast stop at first failure<br />
<br />
<h3>
Upload third party library to maven repo</h3>
<div>
mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=1.0 -Dpackaging=jar</div>
<h3>
<br /></h3>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-39672159931024430962019-07-19T02:04:00.002-07:002019-07-19T02:05:22.136-07:00Generate Public/Private Key PairIf you want to generate public/private key pair you can use following program to do it.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.File</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.FileOutputStream</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.IOException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.KeyPair</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.KeyPairGenerator</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.NoSuchAlgorithmException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.NoSuchProviderException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.PrivateKey</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.security.PublicKey</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">GenerateKeys</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">private</span> KeyPairGenerator keyGen<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> KeyPair pair<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> PrivateKey privateKey<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> PublicKey publicKey<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">GenerateKeys</span><span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span> keylength<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> NoSuchAlgorithmException<span style="color: #333333;">,</span> NoSuchProviderException <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">keyGen</span> <span style="color: #333333;">=</span> KeyPairGenerator<span style="color: #333333;">.</span><span style="color: #0000cc;">getInstance</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"RSA"</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">keyGen</span><span style="color: #333333;">.</span><span style="color: #0000cc;">initialize</span><span style="color: #333333;">(</span>keylength<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">createKeys</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">pair</span> <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">keyGen</span><span style="color: #333333;">.</span><span style="color: #0000cc;">generateKeyPair</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">privateKey</span> <span style="color: #333333;">=</span> pair<span style="color: #333333;">.</span><span style="color: #0000cc;">getPrivate</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">publicKey</span> <span style="color: #333333;">=</span> pair<span style="color: #333333;">.</span><span style="color: #0000cc;">getPublic</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> PrivateKey <span style="color: #0066bb; font-weight: bold;">getPrivateKey</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">privateKey</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> PublicKey <span style="color: #0066bb; font-weight: bold;">getPublicKey</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">this</span><span style="color: #333333;">.</span><span style="color: #0000cc;">publicKey</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">writeToFile</span><span style="color: #333333;">(</span>String path<span style="color: #333333;">,</span> <span style="color: #333399; font-weight: bold;">byte</span><span style="color: #333333;">[]</span> key<span style="color: #333333;">)</span> <span style="color: #008800; font-weight: bold;">throws</span> IOException <span style="color: #333333;">{</span>
File f <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span>path<span style="color: #333333;">);</span>
f<span style="color: #333333;">.</span><span style="color: #0000cc;">getParentFile</span><span style="color: #333333;">().</span><span style="color: #0000cc;">mkdirs</span><span style="color: #333333;">();</span>
FileOutputStream fos <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> FileOutputStream<span style="color: #333333;">(</span>f<span style="color: #333333;">);</span>
fos<span style="color: #333333;">.</span><span style="color: #0000cc;">write</span><span style="color: #333333;">(</span>key<span style="color: #333333;">);</span>
fos<span style="color: #333333;">.</span><span style="color: #0000cc;">flush</span><span style="color: #333333;">();</span>
fos<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">main</span><span style="color: #333333;">(</span>String<span style="color: #333333;">[]</span> args<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
GenerateKeys gk<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
gk <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> GenerateKeys<span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">1024</span><span style="color: #333333;">);</span>
gk<span style="color: #333333;">.</span><span style="color: #0000cc;">createKeys</span><span style="color: #333333;">();</span>
gk<span style="color: #333333;">.</span><span style="color: #0000cc;">writeToFile</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"C:\\Users\\manula\\Projects\\GeneratePublicPrivateKeys\\publicKey"</span><span style="color: #333333;">,</span> gk<span style="color: #333333;">.</span><span style="color: #0000cc;">getPublicKey</span><span style="color: #333333;">().</span><span style="color: #0000cc;">getEncoded</span><span style="color: #333333;">());</span>
gk<span style="color: #333333;">.</span><span style="color: #0000cc;">writeToFile</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"C:\\Users\\manula\\Projects\\GeneratePublicPrivateKeys\\privateKey"</span><span style="color: #333333;">,</span> gk<span style="color: #333333;">.</span><span style="color: #0000cc;">getPrivateKey</span><span style="color: #333333;">().</span><span style="color: #0000cc;">getEncoded</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>NoSuchAlgorithmException <span style="color: #333333;">|</span> NoSuchProviderException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">err</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span>e<span style="color: #333333;">.</span><span style="color: #0000cc;">getMessage</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>IOException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">err</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span>e<span style="color: #333333;">.</span><span style="color: #0000cc;">getMessage</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-8504963521216034172019-07-18T22:21:00.001-07:002019-07-18T22:21:31.487-07:00Create OpenStack Instance Using OpenStack CLI In DevStackIn this blog post I'll teach you how to create OpenStack instance using CLI tool.<br />
<br />
First redirect to devstack installation directory and source the openrc file. In my case it's located in /opt/stack/devstack<br />
<br />
$ cd /opt/stack/devstack<br />
$ source openrc<br />
<br />
<h4>
Create a security group enabling ICMP</h4>
<br />
$ openstack security group rule create --proto icmp default<br />
<br />
<h4>
Enable port 22 in the security group. We need this to ssh to the instance</h4>
<br />
$ openstack security group rule create --proto tcp --dst-port 22 default<br />
<br />
<h4>
Check the available flavors</h4>
<br />
$ openstack flavor list<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM3gnfZF6KBuyHw93hFJhU2YeFbNfq9lsdFtwFTUm3t131nvaWhNoLDh92xv0ljFomzv7qGqXSnpE4oaFpcB5G4Z8kLvIvlKM5ss_Lh-keCjQJJ0Z32NycgEfXtRd-SqVmk_nmTJfHFewm/s1600/Screenshot+from+2019-07-19+10-42-27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="241" data-original-width="467" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM3gnfZF6KBuyHw93hFJhU2YeFbNfq9lsdFtwFTUm3t131nvaWhNoLDh92xv0ljFomzv7qGqXSnpE4oaFpcB5G4Z8kLvIvlKM5ss_Lh-keCjQJJ0Z32NycgEfXtRd-SqVmk_nmTJfHFewm/s320/Screenshot+from+2019-07-19+10-42-27.png" width="320" /></a></div>
<br />
<h4>
Check the network list</h4>
<br />
$ openstack network list<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfoALJkGGQE65lzQqdmoniqloo7OuQsh4d_pknyyOajksJMeuu2KBqJtfO-Lc0KOF0OVGaRO0aw1su1Tt6B1sj36qB0cCD8eVgZmSBxQh-MiVt71RFhN4H9DQMJH7FNEoeXdo5019ziUPh/s1600/Screenshot+from+2019-07-19+10-44-00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="893" height="35" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfoALJkGGQE65lzQqdmoniqloo7OuQsh4d_pknyyOajksJMeuu2KBqJtfO-Lc0KOF0OVGaRO0aw1su1Tt6B1sj36qB0cCD8eVgZmSBxQh-MiVt71RFhN4H9DQMJH7FNEoeXdo5019ziUPh/s320/Screenshot+from+2019-07-19+10-44-00.png" width="320" /></a></div>
<br />
<h4>
Check the image list</h4>
<br />
$ openstack image list<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6lWULt7iD8SioAbnfpWHQ0PZsqvhNK3ByysaKbQnX0aPI5K62c1jm4udfVjEgrudHPMWCjbIwMCQb9-felchuKhv5cMuaaVCo9gTah-1NaIBf6_rf4Z2JiZ9DS_3KfyLnzYgCwP-s1gr/s1600/Screenshot+from+2019-07-19+10-45-06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="103" data-original-width="543" height="60" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6lWULt7iD8SioAbnfpWHQ0PZsqvhNK3ByysaKbQnX0aPI5K62c1jm4udfVjEgrudHPMWCjbIwMCQb9-felchuKhv5cMuaaVCo9gTah-1NaIBf6_rf4Z2JiZ9DS_3KfyLnzYgCwP-s1gr/s320/Screenshot+from+2019-07-19+10-45-06.png" width="320" /></a></div>
<br />
<h4>
Create the instance</h4>
<br />
$ openstack server create --flavor m1.tiny --image $(openstack image list | grep cirros | cut -f3 -d '|') --nic net-id=$(openstack network list | grep private | cut -f2 -d '|' | tr -d ' ') --security-group default vm<br />
<br />
Above command will create the cirros instance in OpenStack<br />
<br />
<h4>
View server list</h4>
<br />
$ openstack server list<br />
<br />
<h4>
Open the console of the VM</h4>
<br />
$ openstack console url show vm<br />
<br />
<h4>
Create floating IP</h4>
<br />
$ openstack floating ip create public<br />
<br />
<h4>
Add created floating IP to the instance</h4>
<br />
$ openstack server add floating ip vm 172.24.4.8 <br />
<br />
Now check the server list again. It'll list down the associated floating IP to the server<br />
<br />
Now you will able to ping to the server and make the sshManula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-24778806079739076402019-07-18T21:55:00.001-07:002019-07-18T23:20:41.002-07:00Install DevStack (stable/stein) in Ubuntu 16.04In this blog post I'll teach you how to install DevStack on Ubuntu 16.04. The base Operating System in now installed so we should add OpenStack. This we will do using the scripts from the DevStack repository.<br />
<br />
<h3>
Install Python Systemd Support</h3>
<h3>
</h3>
$ sudo apt-get install -y python-systemd<br />
<br />
<h3>
Create User Account</h3>
<h3>
</h3>
The services that the DevStack install uses will need their own account. This account must have access to root privileges with sudo. In the following code you will see that we create the user stack with a default bash shell and a home directory located at /opt/stack. The -m option ensure the home directory is created.<br />
<br />
$ sudo useradd -s /bin/bash -d /opt/stack -m stack<br />
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack<br />
<br />
<h3>
Install GIT</h3>
<br />
$ sudo apt-get install git<br />
<br />
<h3>
Clone the DevStack GIT Repo</h3>
<br />
The git client will be installed in 16.04 server by default so we should not need to add it. If we switch to the stack user account we can clone the latest DevStack repo. We then change to the downloaded code by moving into the devstack directory which will be in the home directory of the stack user.<br />
<br />
$ sudo su -l stack <br />
$ git clone https://git.openstack.org/openstack-dev/devstack<br />
$ cd /opt/stack/devstack<br />
$ git checkout stable/stein<br />
<br />
<h3>
DevStack Configuration File</h3>
<br />
We can create an answer file with the minimum configuration included. This will install the services onto the single host but we set the password to be used. You should create a local.conf file in the root of the devstack directory. You, of course, can use a different password if you prefer and make sure that you use your IP ADDRESS:<br />
<br />
[[local|localrc]] ADMIN_PASSWORD=Password1 DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD <br />
<br />
HOST_IP=10.0.2.4 <br />
<br />
<h3>
Editing the /etc/hosts File</h3>
<br />
We also want to make sure that we reference the actual host IP in the /etc/hosts file. You will see in the video that I add an entry to the file that reads like this. Making sure you use your IP Address and hostname<br />
<br />
10.0.2.4 devstack<br />
<br />
<h3>
Starting the Install</h3>
<br />
From the root of the devstack directory we can initiate the install by running the stack.sh script. This will take 20-40 minutes depending on the speed of your system and network<br />
<br />
$ ./stack.sh<br />
<br />
But when you run ./stack.sh after some time it'll stop the installation mentioning about permission issue in /opt/stack/.cache folder. Once you get it, please run following commands to resolve that issue.<br />
<br />
$ chown -R stack:stack /opt/stack/.cache<br />
$ sudo rm -rf /etc/apache2/sites-available/*<br />
$ sudo rm -rf /etc/apache2/sites-enabled/*<br />
$ ./unstack.sh <br />
$ virtualenv /opt/stack/requirements/.venv/<br />
$ ./stack.sh<br />
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-73597161582140900332016-04-08T03:46:00.001-07:002019-07-19T02:06:27.185-07:00Convert Images to PDFThis is a simple program which converts images to PDF.
<!-- HTML generated using hilite.me --><br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">package</span> imageconversion<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.FileOutputStream</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.Document</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.pdf.PdfWriter</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.Image</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.awt.Graphics2D</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.awt.image.BufferedImage</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.ByteArrayOutputStream</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.File</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.FileNotFoundException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.IOException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.io.InputStream</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.util.Properties</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.imageio.ImageIO</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.Rectangle</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.PageSize</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">com.itextpdf.text.Element</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">ImageToPDF</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">main</span><span style="color: #333333;">(</span>String args<span style="color: #333333;">[])</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
ImageToPDF imgToPDF <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> ImageToPDF<span style="color: #333333;">();</span>
<span style="color: #888888;">//convertJPGTOPDFinSpecificFolder(imgToPDF.getRootFolderPathFromConfig());</span>
convertJPGToPDFInAllTheSubFolders<span style="color: #333333;">(</span>imgToPDF<span style="color: #333333;">.</span><span style="color: #0000cc;">getRootFolderPathFromConfig</span><span style="color: #333333;">());</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"----------------------------------------------------------------------------------------"</span><span style="color: #333333;">);</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"All the JPG images are in '"</span> <span style="color: #333333;">+</span> imgToPDF<span style="color: #333333;">.</span><span style="color: #0000cc;">getRootFolderPathFromConfig</span><span style="color: #333333;">()</span>
<span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' folder and it's sub folders, have been converted to PDF successfully"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>Exception e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// Reading the root folder path from the configuration file</span>
<span style="color: #008800; font-weight: bold;">private</span> String <span style="color: #0066bb; font-weight: bold;">getRootFolderPathFromConfig</span><span style="color: #333333;">()</span> <span style="color: #008800; font-weight: bold;">throws</span> IOException <span style="color: #333333;">{</span>
InputStream inputStream<span style="color: #333333;">;</span>
Properties prop <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> Properties<span style="color: #333333;">();</span>
String propFileName <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"config.properties"</span><span style="color: #333333;">;</span>
inputStream <span style="color: #333333;">=</span> getClass<span style="color: #333333;">().</span><span style="color: #0000cc;">getClassLoader</span><span style="color: #333333;">().</span><span style="color: #0000cc;">getResourceAsStream</span><span style="color: #333333;">(</span>propFileName<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>inputStream <span style="color: #333333;">!=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
prop<span style="color: #333333;">.</span><span style="color: #0000cc;">load</span><span style="color: #333333;">(</span>inputStream<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">FileNotFoundException</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Property file '"</span> <span style="color: #333333;">+</span> propFileName <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' not found in the classpath"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
String rootPath <span style="color: #333333;">=</span> prop<span style="color: #333333;">.</span><span style="color: #0000cc;">getProperty</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"rootPath"</span><span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">return</span> rootPath<span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// This converts JPG images to PDF in root folder specified in configuration file</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">convertJPGTOPDFinSpecificFolder</span><span style="color: #333333;">(</span>String folderPath<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
File folder <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span>folderPath<span style="color: #333333;">);</span>
File<span style="color: #333333;">[]</span> listOfFiles <span style="color: #333333;">=</span> folder<span style="color: #333333;">.</span><span style="color: #0000cc;">listFiles</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>listOfFiles<span style="color: #333333;">.</span><span style="color: #0000cc;">length</span> <span style="color: #333333;">==</span> <span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"No Image files in the "</span> <span style="color: #333333;">+</span> folderPath <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">" directory"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">for</span> <span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span> i <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">;</span> i <span style="color: #333333;"><</span> listOfFiles<span style="color: #333333;">.</span><span style="color: #0000cc;">length</span><span style="color: #333333;">;</span> i<span style="color: #333333;">++)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>listOfFiles<span style="color: #333333;">[</span>i<span style="color: #333333;">].</span><span style="color: #0000cc;">isFile</span><span style="color: #333333;">())</span> <span style="color: #333333;">{</span>
String fileName <span style="color: #333333;">=</span> listOfFiles<span style="color: #333333;">[</span>i<span style="color: #333333;">].</span><span style="color: #0000cc;">getName</span><span style="color: #333333;">();</span>
String absoluteFilePath <span style="color: #333333;">=</span> listOfFiles<span style="color: #333333;">[</span>i<span style="color: #333333;">].</span><span style="color: #0000cc;">getAbsolutePath</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>getFileExtension<span style="color: #333333;">(</span>fileName<span style="color: #333333;">).</span><span style="color: #0000cc;">equalsIgnoreCase</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"JPG"</span><span style="color: #333333;">)</span> <span style="color: #333333;">||</span> getFileExtension<span style="color: #333333;">(</span>fileName<span style="color: #333333;">).</span><span style="color: #0000cc;">equalsIgnoreCase</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"JPEG"</span><span style="color: #333333;">))</span> <span style="color: #333333;">{</span>
convertJPGToPDF<span style="color: #333333;">(</span>fileName<span style="color: #333333;">,</span> absoluteFilePath<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// This is for travel through all the sub folders from the root folder specified in the configuration file</span>
<span style="color: #888888;">// and convert JPG images to PDF</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">convertJPGToPDFInAllTheSubFolders</span><span style="color: #333333;">(</span>String folderPath<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
File root <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span> folderPath <span style="color: #333333;">);</span>
File<span style="color: #333333;">[]</span> listOfFiles <span style="color: #333333;">=</span> root<span style="color: #333333;">.</span><span style="color: #0000cc;">listFiles</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>listOfFiles <span style="color: #333333;">==</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"No files in the directory : "</span> <span style="color: #333333;">+</span> folderPath<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">return</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">for</span> <span style="color: #333333;">(</span>File file <span style="color: #333333;">:</span> listOfFiles<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">isDirectory</span><span style="color: #333333;">())</span> <span style="color: #333333;">{</span>
convertJPGToPDFInAllTheSubFolders<span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">getAbsolutePath</span><span style="color: #333333;">());</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">isFile</span><span style="color: #333333;">())</span> <span style="color: #333333;">{</span>
String fileName <span style="color: #333333;">=</span> file<span style="color: #333333;">.</span><span style="color: #0000cc;">getName</span><span style="color: #333333;">();</span>
String absoluteFilePath <span style="color: #333333;">=</span> file<span style="color: #333333;">.</span><span style="color: #0000cc;">getAbsolutePath</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>getFileExtension<span style="color: #333333;">(</span>fileName<span style="color: #333333;">).</span><span style="color: #0000cc;">equalsIgnoreCase</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"JPG"</span><span style="color: #333333;">)</span> <span style="color: #333333;">||</span>
getFileExtension<span style="color: #333333;">(</span>fileName<span style="color: #333333;">).</span><span style="color: #0000cc;">equalsIgnoreCase</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"JPEG"</span><span style="color: #333333;">))</span> <span style="color: #333333;">{</span>
convertJPGToPDF<span style="color: #333333;">(</span>fileName<span style="color: #333333;">,</span> absoluteFilePath<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// Method which convert JPG to PDF</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">convertJPGToPDF</span><span style="color: #333333;">(</span>String fileName<span style="color: #333333;">,</span> String absoluteFilePath<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
String currentFolder <span style="color: #333333;">=</span> absoluteFilePath<span style="color: #333333;">.</span><span style="color: #0000cc;">substring</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">,</span> absoluteFilePath<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span>fileName<span style="color: #333333;">));</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"----------------------------------------------------------------------------------------"</span><span style="color: #333333;">);</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Starting to convert the image '"</span> <span style="color: #333333;">+</span> fileName <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' to PDF in '"</span> <span style="color: #333333;">+</span> currentFolder <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"'"</span><span style="color: #333333;">);</span>
String inputImageFileName <span style="color: #333333;">=</span> absoluteFilePath<span style="color: #333333;">;</span>
String outputPDFFileName <span style="color: #333333;">=</span> absoluteFilePath<span style="color: #333333;">.</span><span style="color: #0000cc;">substring</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">,</span> absoluteFilePath<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span><span style="color: #0044dd;">'.'</span><span style="color: #333333;">))</span> <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">".pdf"</span><span style="color: #333333;">;</span>
<span style="color: #888888;">// Deleting the PDF iff it exists</span>
deleteExsistingPDF<span style="color: #333333;">(</span>outputPDFFileName<span style="color: #333333;">);</span>
<span style="color: #888888;">// create document object</span>
Document doc <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> Document<span style="color: #333333;">();</span>
<span style="color: #888888;">// create pdf writer object to write the document to the output file</span>
PdfWriter<span style="color: #333333;">.</span><span style="color: #0000cc;">getInstance</span><span style="color: #333333;">(</span>doc<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> FileOutputStream<span style="color: #333333;">(</span>outputPDFFileName<span style="color: #333333;">));</span>
<span style="color: #888888;">// get a4 paper size</span>
Rectangle r <span style="color: #333333;">=</span> PageSize<span style="color: #333333;">.</span><span style="color: #0000cc;">A4</span><span style="color: #333333;">;</span>
<span style="color: #888888;">// read the image</span>
BufferedImage orImg <span style="color: #333333;">=</span> ImageIO<span style="color: #333333;">.</span><span style="color: #0000cc;">read</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span>inputImageFileName<span style="color: #333333;">));</span>
<span style="color: #888888;">// initialize image width and height</span>
<span style="color: #333399; font-weight: bold;">int</span> width <span style="color: #333333;">=</span> orImg<span style="color: #333333;">.</span><span style="color: #0000cc;">getWidth</span><span style="color: #333333;">();</span>
<span style="color: #333399; font-weight: bold;">int</span> height <span style="color: #333333;">=</span> orImg<span style="color: #333333;">.</span><span style="color: #0000cc;">getHeight</span><span style="color: #333333;">();</span>
<span style="color: #888888;">// resize the image that is bigger than A4 size</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>width <span style="color: #333333;">></span> r<span style="color: #333333;">.</span><span style="color: #0000cc;">getWidth</span><span style="color: #333333;">())</span>
width <span style="color: #333333;">=</span> <span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span><span style="color: #333333;">)</span> r<span style="color: #333333;">.</span><span style="color: #0000cc;">getWidth</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>height <span style="color: #333333;">></span> r<span style="color: #333333;">.</span><span style="color: #0000cc;">getHeight</span><span style="color: #333333;">())</span>
height <span style="color: #333333;">=</span> <span style="color: #333333;">(</span><span style="color: #333399; font-weight: bold;">int</span><span style="color: #333333;">)</span> r<span style="color: #333333;">.</span><span style="color: #0000cc;">getHeight</span><span style="color: #333333;">();</span>
<span style="color: #888888;">// create a blank buffered image</span>
BufferedImage bi <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> BufferedImage<span style="color: #333333;">(</span>width<span style="color: #333333;">,</span> height<span style="color: #333333;">,</span> BufferedImage<span style="color: #333333;">.</span><span style="color: #0000cc;">TYPE_INT_RGB</span><span style="color: #333333;">);</span>
<span style="color: #888888;">// create graphic2d object from the buffered image</span>
Graphics2D g2d <span style="color: #333333;">=</span> bi<span style="color: #333333;">.</span><span style="color: #0000cc;">createGraphics</span><span style="color: #333333;">();</span>
<span style="color: #888888;">// draw the original image on the buffered image</span>
<span style="color: #888888;">// so the image is resized to fit the A4 paper size if it is bigger</span>
<span style="color: #888888;">// than A4 size</span>
g2d<span style="color: #333333;">.</span><span style="color: #0000cc;">drawImage</span><span style="color: #333333;">(</span>orImg<span style="color: #333333;">,</span> <span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">,</span> <span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">,</span> width<span style="color: #333333;">,</span> height<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">);</span>
<span style="color: #888888;">// store the image data in memory</span>
ByteArrayOutputStream bas <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> ByteArrayOutputStream<span style="color: #333333;">();</span>
ImageIO<span style="color: #333333;">.</span><span style="color: #0000cc;">write</span><span style="color: #333333;">(</span>bi<span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"png"</span><span style="color: #333333;">,</span> bas<span style="color: #333333;">);</span>
<span style="color: #888888;">// create image from the image data stored in memory</span>
Image img <span style="color: #333333;">=</span> Image<span style="color: #333333;">.</span><span style="color: #0000cc;">getInstance</span><span style="color: #333333;">(</span>bas<span style="color: #333333;">.</span><span style="color: #0000cc;">toByteArray</span><span style="color: #333333;">());</span>
<span style="color: #888888;">// centrally align the image on the pdf page</span>
img<span style="color: #333333;">.</span><span style="color: #0000cc;">setAlignment</span><span style="color: #333333;">(</span>Element<span style="color: #333333;">.</span><span style="color: #0000cc;">ALIGN_CENTER</span><span style="color: #333333;">);</span>
<span style="color: #888888;">// open document</span>
doc<span style="color: #333333;">.</span><span style="color: #0000cc;">open</span><span style="color: #333333;">();</span>
<span style="color: #888888;">// add image to the document</span>
doc<span style="color: #333333;">.</span><span style="color: #0000cc;">add</span><span style="color: #333333;">(</span>img<span style="color: #333333;">);</span>
<span style="color: #888888;">// close the document</span>
doc<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
File outputFile <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span>outputPDFFileName<span style="color: #333333;">);</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"'"</span> <span style="color: #333333;">+</span> fileName <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' was successfully converted to '"</span> <span style="color: #333333;">+</span> outputFile<span style="color: #333333;">.</span><span style="color: #0000cc;">getName</span><span style="color: #333333;">()</span> <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' in '"</span> <span style="color: #333333;">+</span> currentFolder <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"'"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>Exception e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// This is to get the file extension</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> String <span style="color: #0066bb; font-weight: bold;">getFileExtension</span><span style="color: #333333;">(</span>String fileName<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"."</span><span style="color: #333333;">)</span> <span style="color: #333333;">!=</span> <span style="color: #333333;">-</span><span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #333333;">&&</span> fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"."</span><span style="color: #333333;">)</span> <span style="color: #333333;">!=</span> <span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">substring</span><span style="color: #333333;">(</span>fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"."</span><span style="color: #333333;">)</span> <span style="color: #333333;">+</span> <span style="color: #0000dd; font-weight: bold;">1</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">return</span> <span style="background-color: #fff0f0;">""</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// This is to delete the existing PDF file</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">deleteExsistingPDF</span><span style="color: #333333;">(</span>String fileName<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
File file <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> File<span style="color: #333333;">(</span>fileName<span style="color: #333333;">);</span>
String currentFolder <span style="color: #333333;">=</span> fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">substring</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">0</span><span style="color: #333333;">,</span> fileName<span style="color: #333333;">.</span><span style="color: #0000cc;">lastIndexOf</span><span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">getName</span><span style="color: #333333;">()));</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">exists</span><span style="color: #333333;">())</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>file<span style="color: #333333;">.</span><span style="color: #0000cc;">delete</span><span style="color: #333333;">())</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Existing '"</span> <span style="color: #333333;">+</span> file<span style="color: #333333;">.</span><span style="color: #0000cc;">getName</span><span style="color: #333333;">()</span> <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"' was deleted in '"</span> <span style="color: #333333;">+</span> currentFolder <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"'"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">else</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Delete operation failed. Please check '"</span> <span style="color: #333333;">+</span> file <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"'"</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #888888;">// This is basic method to convert JPG to PDF. Usage as below</span>
<span style="color: #888888;">// String input = "C:\\Users\\sgat001\\Desktop\\Images\\Test1.jpg";</span>
<span style="color: #888888;">// String output = "C:\\Users\\sgat001\\Desktop\\Images\\Test1.pdf";</span>
<span style="color: #888888;">// imageTopdf(input, output);</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">imageTopdf</span><span style="color: #333333;">(</span>String input<span style="color: #333333;">,</span> String output<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
Document document <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> Document<span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
FileOutputStream fos <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> FileOutputStream<span style="color: #333333;">(</span>output<span style="color: #333333;">);</span>
PdfWriter writer <span style="color: #333333;">=</span> PdfWriter<span style="color: #333333;">.</span><span style="color: #0000cc;">getInstance</span><span style="color: #333333;">(</span>document<span style="color: #333333;">,</span> fos<span style="color: #333333;">);</span>
writer<span style="color: #333333;">.</span><span style="color: #0000cc;">open</span><span style="color: #333333;">();</span>
document<span style="color: #333333;">.</span><span style="color: #0000cc;">open</span><span style="color: #333333;">();</span>
document<span style="color: #333333;">.</span><span style="color: #0000cc;">add</span><span style="color: #333333;">(</span>Image<span style="color: #333333;">.</span><span style="color: #0000cc;">getInstance</span><span style="color: #333333;">(</span>input<span style="color: #333333;">));</span>
document<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
writer<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>Exception e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
<br /></div>
<br />
Configuration property file as follows
<!-- HTML generated using hilite.me --><br />
<br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #0000cc;">rootPath</span> <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">C:\\Users\\sgat001\\Desktop\\Images\\</span>
</pre>
</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-62617807618763436492015-01-13T22:48:00.001-08:002015-01-13T22:50:02.340-08:00How to work with Apache Stratos 4.1.0 with KubernetesBelow are the simple steps, how to configure Kubernetes cluster and work it with Apache Stratos.<br />
<br />
Setup Kubernetes host cluster by cloning and setting up the virtual machines <br />
<ul>
<li><a href="https://github.com/nirmal070125/vagrant-kubernetes-setup">https://github.com/nirmal070125/vagrant-kubernetes-setup</a></li>
</ul>
<ol><ul>
</ul>
</ol>
Login to Kubernetes master and pull the following Docker image<br />
<ul>
<li>cd [vagrant-kubernetes-setup-folder]</li>
<li>vagrant ssh master</li>
<li>sudo systemctl restart controller-manager</li>
<li>docker pull stratos/php:4.1.0-alpha</li>
</ul>
<br />
Verify Kubernetes cluster status, once the following command is run there should be at least one minion listed<br />
<ul>
<li>cd [vagrant-kubernetes-setup-folder]</li>
<li>vagrant ssh master</li>
<li>kubecfg list minions</li>
</ul>
<br />
Start Stratos instance and tail the log<br />
<ul>
<li>cd [stratos-home-folder]</li>
<li>sh bin/stratos.sh start</li>
<li>tail -f repository/logs/wso2carbon.log</li>
</ul>
<br />
Set Message Broker and Complex Event Processor IP addresses to Stratos host IP address in the Kubernetes custer<br />
<ul>
<li>cd [stratos-samples-folder]</li>
<li>vim single-cartridge/kubernetes/artifacts/kubernetes-cluster.json</li>
</ul>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"> <span style="background-color: #fff0f0;">"property"</span><span style="background-color: #ffaaaa; color: red;">:</span>[
{
<span style="color: #007700;">"name"</span>:<span style="background-color: #fff0f0;">"payload_parameter.MB_IP"</span>,
<span style="color: #007700;">"value"</span>:<span style="background-color: #fff0f0;">"192.168.59.3"</span>
},
{
<span style="color: #007700;">"name"</span>:<span style="background-color: #fff0f0;">"payload_parameter.CEP_IP"</span>,
<span style="color: #007700;">"value"</span>:<span style="background-color: #fff0f0;">"192.168.59.3"</span>
}
]
</pre>
</div>
<br />
<br />
Once the server is started run one of the Kubernetes samples available in the Stratos samples checked out above<br />
<ul>
<li>cd [stratos-samples-folder]</li>
<li>cd single-cartridge/kubernetes</li>
<li>./deploy.sh</li>
</ul>
<br />
Monitor Stratos log and wait until the application activated log is printed<br />
<ul>
<li>INFO {org.apache.stratos.autoscaler.applications.topic.ApplicationsEventPublisher} - Publishing Application Active event for [application]: single-cartridge-app [instance]:single-cartridge-app-1</li>
</ul>
<br />
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-65737940173039497832014-07-24T22:48:00.002-07:002014-07-24T22:48:38.537-07:00How to subscribe and access published API in WSO2 API CloudIn this video I'm going to show how to subscribe and access published API in<a href="http://wso2.com/cloud/api-cloud/"> WSO2 API Cloud</a>. You can view the first step of this video series from <a href="http://manulachathurika.blogspot.com/2014/07/how-to-create-simple-api-using-wso2-api.html">here</a>.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/b3Q0k8DrdjY?feature=player_embedded' frameborder='0'></iframe></div>
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-42199810707856833342014-07-24T22:46:00.000-07:002014-07-24T22:49:16.931-07:00How to create simple API using WSO2 API Cloud and publish itIn this video I'm going to show how to create simple API uisng <a href="http://wso2.com/cloud/api-cloud/">WSO2 API Cloud</a> and publish it. This is the first step of this video series. You can view the second part of the video "How to subscribe and access published API in WSO2 API Cloud" from <a href="http://manulachathurika.blogspot.com/2014/07/how-to-subscribe-and-access-published.html">here</a>.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/0OmA9jQREf0?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-45472283618117534632014-07-18T02:24:00.001-07:002014-07-18T02:24:11.813-07:00SaaS App Development with Windows Cartridge in Apache Stratos<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #434343; display: block; font-family: 'Noto Sans', Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 7px 0px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Software as a Service (SaaS) is a software delivery method that provides access to software and its functionalities as a service, and it has become a common delivery model for many business applications. Apache Stratos is a polyglot PaaS framework, which helps to run Tomcat, PHP and MySQL apps as a service on all major cloud infrastructures. It brings self-service management, elastic scaling, multi-tenant deployment, and usage monitoring as well. Apache Stratos has the capability to develop and deploy SaaS applications in different environments, such as Linux and Windows.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #434343; display: block; font-family: 'Noto Sans', Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 7px 0px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
In this <a href="http://wso2.com/library/webinars/2014/07/saas-app-development-with-windows-cartridge/">webinar</a>, Reka Thirunavukkarasu, senior software engineer and Manula Thanthriwatte, software engineer at WSO2 will demonstrate the functionality of SaaS app development in the Windows environment and demonstrate how you can develop a windows cartridge with .NET and deploy the application using Apache Stratos.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #434343; display: block; font-family: 'Noto Sans', Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 7px 0px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Topics to be covered include</div>
<ul style="-webkit-text-stroke-width: 0px; background-color: white; color: #434343; font-family: 'Noto Sans', Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0px; orphans: auto; padding: 0px 0px 0px 20px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<li style="margin: 0px; padding: 0px;">Introduction to Apache Stratos as PaaS framework</li>
<li style="margin: 0px; padding: 0px;">Pluggable architecture of different environments to stratos</li>
<li style="margin: 0px; padding: 0px;">Capabilities of Apache Stratos to provide self service management for your windows environment</li>
<li style="margin: 0px; padding: 0px;">SaaS app development using .NET in a distributed environment</li>
</ul>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #434343; display: block; font-family: 'Noto Sans', Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 7px 0px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
If you are a windows app developer and seeking ways to provide monitoring, elastic scaling, and security in the cloud for your app, this webinar is for you.</div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com1tag:blogger.com,1999:blog-5843722851337160433.post-80654991352211351422014-06-20T02:58:00.001-07:002014-06-20T02:58:39.878-07:00WSO2 Private PaaS Demo SetupIn this video I'm going to show how to configure and run the WSO2 Private PaaS in EC2 environment. You can download WSO2 Private PaaS from <a href="http://wso2.com/cloud/private-paas/">here</a> and find the WSO2 Private PaaS documentation from <a href="https://docs.wso2.org/display/PP400/WSO2+Private+PaaS+Documentation">here</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/nYAfAbwW6Wc?feature=player_embedded' frameborder='0'></iframe></div>
<br />Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0tag:blogger.com,1999:blog-5843722851337160433.post-51486741662947550422014-04-16T23:50:00.001-07:002015-04-27T00:13:37.422-07:00How to write subscriber and publisher to JBOSS MQ topic<div style="text-align: justify;">
This Post explains Topics in JBOSS MQ with
Subscribing and Publishing. For this we will write two java clients.</div>
<div style="text-align: justify;">
<br /></div>
<ul>
<li style="text-align: justify;">TopicSubscriber.java to Subcribe for messages</li>
<li style="text-align: justify;">TopicPublisher.java to to Publish the messages</li>
</ul>
<div>
<div style="text-align: justify;">
First you have to download <b>JBOSS Application Server</b> from <a href="http://www.jboss.org/jbossas/downloads/">here</a>. In this sample I'm using <b>jboss-4.2.2.GA. </b>Before starting the JBOSS application server you have to create a topic in JBOSS server. To do that, you have to create myTopoc-service.xml (you can used what every name you want) under the <JBOSS_SERVER>/server/default/deploy and enter following xml into it.</div>
</div>
<div>
<br /></div>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;">1
2
3</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #007700;"><mbean</span> <span style="color: #0000cc;">code=</span><span style="background-color: #fff0f0;">"org.jboss.mq.server.jmx.Topic"</span> <span style="color: #0000cc;">name=</span><span style="background-color: #fff0f0;">"jboss.mq.destination:service=Queue,name=topicA"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><depends</span> <span style="color: #0000cc;">optional-attribute-name=</span><span style="background-color: #fff0f0;">"DestinationManager"</span><span style="color: #007700;">></span>jboss.mq:service=DestinationManager<span style="color: #007700;"></depends></span>
<span style="color: #007700;"></mbean></span>
</pre>
</td></tr>
</tbody></table>
</div>
<div>
<br />
After that you can start the JBOSS application server. From the console log you can verify the topicA was created.<br />
<br />
Now you can create the sample project on IDE that you preferred. Also make sure to add client and lib directory jars in the JBOSS application server to the project. Now you can create TopicSubscriber.java and TopicPublisher.java sample programs as follows.<br />
<br />
<b>TopicSubscriber.java</b> sample program<br />
<br />
<div style="background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">package</span> simple<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.util.Properties</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.jms.*</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.naming.InitialContext</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.naming.NamingException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">TopicSubscriber</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">private</span> String topicName <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"topic/topicA"</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #333399; font-weight: bold;">boolean</span> messageReceived <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">false</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> javax<span style="color: #333333;">.</span><span style="color: #0000cc;">naming</span><span style="color: #333333;">.</span><span style="color: #0000cc;">Context</span> mContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> TopicConnectionFactory mTopicConnectionFactory <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> TopicConnection topicConnection <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">main</span><span style="color: #333333;">(</span>String<span style="color: #333333;">[]</span> args<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
TopicSubscriber subscriber <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> TopicSubscriber<span style="color: #333333;">();</span>
subscriber<span style="color: #333333;">.</span><span style="color: #0000cc;">subscribeWithTopicLookup</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">subscribeWithTopicLookup</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
Properties properties <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> Properties<span style="color: #333333;">();</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span>Context<span style="color: #333333;">.</span><span style="color: #0000cc;">INITIAL_CONTEXT_FACTORY</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"org.jnp.interfaces.NamingContextFactory"</span><span style="color: #333333;">);</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span>Context<span style="color: #333333;">.</span><span style="color: #0000cc;">PROVIDER_URL</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"jnp://localhost:1099"</span><span style="color: #333333;">);</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"topic."</span> <span style="color: #333333;">+</span> topicName<span style="color: #333333;">,</span> topicName<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
mContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> InitialContext<span style="color: #333333;">(</span>properties<span style="color: #333333;">);</span>
mTopicConnectionFactory <span style="color: #333333;">=</span> <span style="color: #333333;">(</span>TopicConnectionFactory<span style="color: #333333;">)</span>mContext<span style="color: #333333;">.</span><span style="color: #0000cc;">lookup</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"ConnectionFactory"</span><span style="color: #333333;">);</span>
topicConnection <span style="color: #333333;">=</span> mTopicConnectionFactory<span style="color: #333333;">.</span><span style="color: #0000cc;">createTopicConnection</span><span style="color: #333333;">();</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Create Topic Connection for Topic "</span> <span style="color: #333333;">+</span> topicName<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">while</span> <span style="color: #333333;">(!</span>messageReceived<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
TopicSession topicSession <span style="color: #333333;">=</span> topicConnection
<span style="color: #333333;">.</span><span style="color: #0000cc;">createTopicSession</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">false</span><span style="color: #333333;">,</span> Session<span style="color: #333333;">.</span><span style="color: #0000cc;">AUTO_ACKNOWLEDGE</span><span style="color: #333333;">);</span>
Topic topic <span style="color: #333333;">=</span> <span style="color: #333333;">(</span>Topic<span style="color: #333333;">)</span> mContext<span style="color: #333333;">.</span><span style="color: #0000cc;">lookup</span><span style="color: #333333;">(</span>topicName<span style="color: #333333;">);</span>
<span style="color: #888888;">// start the connection</span>
topicConnection<span style="color: #333333;">.</span><span style="color: #0000cc;">start</span><span style="color: #333333;">();</span>
<span style="color: #888888;">// create a topic subscriber</span>
javax<span style="color: #333333;">.</span><span style="color: #0000cc;">jms</span><span style="color: #333333;">.</span><span style="color: #0000cc;">TopicSubscriber</span> topicSubscriber <span style="color: #333333;">=</span> topicSession<span style="color: #333333;">.</span><span style="color: #0000cc;">createSubscriber</span><span style="color: #333333;">(</span>topic<span style="color: #333333;">);</span>
TestMessageListener messageListener <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> TestMessageListener<span style="color: #333333;">();</span>
topicSubscriber<span style="color: #333333;">.</span><span style="color: #0000cc;">setMessageListener</span><span style="color: #333333;">(</span>messageListener<span style="color: #333333;">);</span>
Thread<span style="color: #333333;">.</span><span style="color: #0000cc;">sleep</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">5000</span><span style="color: #333333;">);</span>
topicSubscriber<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
topicSession<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>JMSException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>NamingException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>InterruptedException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>NamingException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">RuntimeException</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Error in initial context lookup"</span><span style="color: #333333;">,</span> e<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>JMSException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">RuntimeException</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Error in JMS operations"</span><span style="color: #333333;">,</span> e<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">finally</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: #333333;">(</span>topicConnection <span style="color: #333333;">!=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
topicConnection<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>JMSException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">RuntimeException</span><span style="color: #333333;">(</span>
<span style="background-color: #fff0f0;">"Error in closing topic connection"</span><span style="color: #333333;">,</span> e<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">TestMessageListener</span> <span style="color: #008800; font-weight: bold;">implements</span> MessageListener <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">onMessage</span><span style="color: #333333;">(</span>Message message<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Got the Message : "</span>
<span style="color: #333333;">+</span> <span style="color: #333333;">((</span>TextMessage<span style="color: #333333;">)</span> message<span style="color: #333333;">).</span><span style="color: #0000cc;">getText</span><span style="color: #333333;">());</span>
messageReceived <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">true</span><span style="color: #333333;">;</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>JMSException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
</pre>
</td></tr>
</tbody></table>
</div>
<br />
<b>TopicPublisher.java</b> sample program<br />
<br />
<div style="background: #ffffff; border-width: .1em .1em .1em .8em; border: solid gray; overflow: auto; padding: .2em .6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">package</span> simple<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.jms.*</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.naming.InitialContext</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">javax.naming.NamingException</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">java.util.Properties</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">TopicPublisher</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">private</span> String topicName <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"topic/topicA"</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> javax<span style="color: #333333;">.</span><span style="color: #0000cc;">naming</span><span style="color: #333333;">.</span><span style="color: #0000cc;">Context</span> mContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #008800; font-weight: bold;">static</span> TopicConnectionFactory mTopicConnectionFactory <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">main</span><span style="color: #333333;">(</span>String<span style="color: #333333;">[]</span> args<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
TopicPublisher publisher <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> TopicPublisher<span style="color: #333333;">();</span>
publisher<span style="color: #333333;">.</span><span style="color: #0000cc;">publishWithTopicLookup</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">publishWithTopicLookup</span><span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
Properties properties <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> Properties<span style="color: #333333;">();</span>
TopicConnection topicConnection <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">null</span><span style="color: #333333;">;</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span>Context<span style="color: #333333;">.</span><span style="color: #0000cc;">INITIAL_CONTEXT_FACTORY</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"org.jnp.interfaces.NamingContextFactory"</span><span style="color: #333333;">);</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span>Context<span style="color: #333333;">.</span><span style="color: #0000cc;">PROVIDER_URL</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"jnp://localhost:1099"</span><span style="color: #333333;">);</span>
properties<span style="color: #333333;">.</span><span style="color: #0000cc;">put</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"topic."</span> <span style="color: #333333;">+</span> topicName<span style="color: #333333;">,</span> topicName<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
mContext <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> InitialContext<span style="color: #333333;">(</span>properties<span style="color: #333333;">);</span>
mTopicConnectionFactory <span style="color: #333333;">=</span> <span style="color: #333333;">(</span>TopicConnectionFactory<span style="color: #333333;">)</span>mContext<span style="color: #333333;">.</span><span style="color: #0000cc;">lookup</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"ConnectionFactory"</span><span style="color: #333333;">);</span>
topicConnection <span style="color: #333333;">=</span> mTopicConnectionFactory<span style="color: #333333;">.</span><span style="color: #0000cc;">createTopicConnection</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
TopicSession topicSession <span style="color: #333333;">=</span> topicConnection<span style="color: #333333;">.</span><span style="color: #0000cc;">createTopicSession</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">false</span><span style="color: #333333;">,</span> Session<span style="color: #333333;">.</span><span style="color: #0000cc;">AUTO_ACKNOWLEDGE</span><span style="color: #333333;">);</span>
<span style="color: #888888;">// create or use the topic</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Use the Topic "</span> <span style="color: #333333;">+</span> topicName<span style="color: #333333;">);</span>
Topic topic <span style="color: #333333;">=</span> <span style="color: #333333;">(</span>Topic<span style="color: #333333;">)</span> mContext<span style="color: #333333;">.</span><span style="color: #0000cc;">lookup</span><span style="color: #333333;">(</span>topicName<span style="color: #333333;">);</span>
javax<span style="color: #333333;">.</span><span style="color: #0000cc;">jms</span><span style="color: #333333;">.</span><span style="color: #0000cc;">TopicPublisher</span> topicPublisher <span style="color: #333333;">=</span> topicSession<span style="color: #333333;">.</span><span style="color: #0000cc;">createPublisher</span><span style="color: #333333;">(</span>topic<span style="color: #333333;">);</span>
String msg <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"Hi, I am Test Message"</span><span style="color: #333333;">;</span>
TextMessage textMessage <span style="color: #333333;">=</span> topicSession<span style="color: #333333;">.</span><span style="color: #0000cc;">createTextMessage</span><span style="color: #333333;">(</span>msg<span style="color: #333333;">);</span>
topicPublisher<span style="color: #333333;">.</span><span style="color: #0000cc;">publish</span><span style="color: #333333;">(</span>textMessage<span style="color: #333333;">);</span>
System<span style="color: #333333;">.</span><span style="color: #0000cc;">out</span><span style="color: #333333;">.</span><span style="color: #0000cc;">println</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Publishing message "</span> <span style="color: #333333;">+</span> textMessage<span style="color: #333333;">);</span>
topicPublisher<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
topicSession<span style="color: #333333;">.</span><span style="color: #0000cc;">close</span><span style="color: #333333;">();</span>
Thread<span style="color: #333333;">.</span><span style="color: #0000cc;">sleep</span><span style="color: #333333;">(</span><span style="color: #0000dd; font-weight: bold;">20</span><span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>InterruptedException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
e<span style="color: #333333;">.</span><span style="color: #0000cc;">printStackTrace</span><span style="color: #333333;">();</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>JMSException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">RuntimeException</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Error in JMS operations"</span><span style="color: #333333;">,</span> e<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span> <span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>NamingException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">RuntimeException</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Error in initial context lookup"</span><span style="color: #333333;">,</span> e<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">}u</span>
</pre>
</td></tr>
</tbody></table>
</div>
<br />
<div style="text-align: left;">
You have to used PROVIDER_URL as "java.naming.provider.url" and INITIAL_CONTEXT_FACTORY as "java.naming.factory.initial".</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
First you have to run <b>TopicSubscriber </b>and then run the <b>TopicPublisher. </b>Here are the output of them.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>TopicSubscriber;</b></div>
Create Topic Connection for Topic topic/topicA<br />
Got the Message : Hi, I am Test Message<br />
<br />
<b>TopicPublisher;</b><br />
Use the Topic topic/topicA<br />
Publishing message SpyTextMessage {<br />
Header {<br />
jmsDestination : TOPIC.topicA<br />
jmsDeliveryMode : 2<br />
jmsExpiration : 0<br />
jmsPriority : 4<br />
jmsMessageID : ID:2-13977171929621<br />
jmsTimeStamp : 1397717192962<br />
jmsCorrelationID: null<br />
jmsReplyTo : null<br />
jmsType : null<br />
jmsRedelivered : false<br />
jmsProperties : {}<br />
jmsPropReadWrite: true<br />
msgReadOnly : false<br />
producerClientId: ID:2<br />
}<br />
Body {<br />
text :Hi, I am Test Message<br />
}<br />
<br />
}<br />
<br />
<br />
<a href="http://www.javacodegeeks.com/" imageanchor="1"><img alt="Java Code Geeks" src="http://cdn.javacodegeeks.com/wp-content/uploads/2012/12/JavaCodeGeek_Badge.png" title="Java Code Geeks" /></a>
</div>Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com1tag:blogger.com,1999:blog-5843722851337160433.post-89716604560934642602014-04-09T00:53:00.001-07:002014-04-09T00:53:48.637-07:00How to run Apache Stratos and subscribe to cartridges and how autoscaling is happen In this video I'm going to show,<br />
<br />
<br />
<ul>
<li>How do I run Stratos on my laptop</li>
<li>PaaS story video on how to get it done</li>
<li>How to deploy apps - PHP and Tomcat </li>
<li>JMeter to load up and instances popping up </li>
</ul>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/KY4CC9JWNRw?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
Manula Thantriwattehttp://www.blogger.com/profile/06841517145371623783noreply@blogger.com0