{"id":1456,"date":"2016-09-24T09:53:25","date_gmt":"2016-09-24T09:53:25","guid":{"rendered":"http:\/\/enprowess.com\/?p=1456"},"modified":"2017-06-14T05:44:12","modified_gmt":"2017-06-14T05:44:12","slug":"osgi-based-liferay-postloginaction","status":"publish","type":"post","link":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/","title":{"rendered":"Liferay7\/DXP &#8211; OSGI module for PostLoginAction"},"content":{"rendered":"<p>Before we get in to how OSGi and Liferay goes hand in hand, it is recommended to understand the core of OSGi. You can go thru <em><strong><a href=\"http:\/\/enprowess.com\/blogs\/core-osgi\/\" target=\"_blank\">this link<\/a><\/strong><\/em> and get your hand dirty with plain OSGi example.<br \/>\n<br \/>\nLiferay7 and DXP released with many buzzwords like Modularity, Expansibility and Semantic versioning. All of these, have base as OSGi with plenty of benefits. Let\u2019s quickly see how to create a OSGi module in Liferay 7 or DXP.<br \/>\n<br \/>\n<span style=\"text-decoration: underline;\"><strong>Pre-requisites:<\/strong><\/span><br \/>\n<em>&#8211; <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/jdk8-downloads-2133151.html\" target=\"_blank\">Java 1.8<\/a><\/em><br \/>\n<em> &#8211; <a href=\"https:\/\/www.liferay.com\/downloads\" target=\"_blank\">Liferay 7 must be installed.<\/a><\/em><br \/>\n<em> &#8211; <a href=\"https:\/\/web.liferay.com\/downloads\/liferay-projects\/liferay-ide\" target=\"_blank\">Liferay Developer studio<\/a><\/em><br \/>\nAnd if you haven\u2019t configure your Liferay Server with Developer studio, here are the steps..<br \/>\nGo to window \u2192 Preferences \u2192 Server \u2192 Runtime Enviornment \u2192<\/p>\n<p><\/p>\n<p><img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_1.png\" alt=\"osgi_pl_1\" width=\"563\" height=\"423\" \/><\/p>\n<p><\/p>\n<p>Click on Add \u2192 Select your server \u2192 Click on Browse \u2192 Give your server path \u2192 Finish<\/p>\n<p><\/p>\n<p><img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_2.png\" alt=\"osgi_pl_1\" width=\"535\" height=\"316\" \/><\/p>\n<p><\/p>\n<p><span style=\"text-decoration: underline;\"><em><strong>Developing a PostLoginService in Eclipse using OSGI:<\/strong><\/em><\/span><br \/>\n<br \/>\nThis example demonstrate capability how to develop Post Login Service, which used to be a Hook development in earlier Liferay versions.<\/p>\n<p>1. Create Liferay WorkSpaceProject:<br \/>\nTo create a Liferay Workspace in IDE follow this:<br \/>\nSelect File \u2192 New \u2192 Liferay Workspace Project<\/p>\n<p>Upon creation of the workspace, the structure should look like below:<br \/>\n<br \/>\n<img loading=\"lazy\" class=\"alignnone size-medium wp-image-1460\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_3-252x300.png\" alt=\"osgi_pl_3\" width=\"252\" height=\"300\" \/><\/p>\n<p><\/p>\n<p>2. Create module in Liferay workspace:<br \/>\nTo create a Liferay modules,<br \/>\nSelect Modules \u2192 Right Click \u2192 New \u2192 Liferay Module Project<\/p>\n<p><\/p>\n<p><img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_4.png\" alt=\"osgi_pl_1\" width=\"558\" height=\"419\" \/><\/p>\n<p><\/p>\n<p>3. Component class creation:<br \/>\n&#8211; Go to \u201csrc\/main\/java\u201d and create one Liferay Component Class;<br \/>\n&#8211; Select src\/main\/java \u2192 New \u2192 Liferay Component Class<br \/>\n&#8211; Select Component class Template: Login Pre Action<br \/>\n<br \/>\n<img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_5.png\" alt=\"osgi_pl_1\" width=\"564\" height=\"407\" \/><\/p>\n<p><\/p>\n<p>The output should look like this:<br \/>\n<br \/>\n<img loading=\"lazy\" class=\"alignnone size-medium wp-image-1463\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_6-300x188.png\" alt=\"osgi_pl_6\" width=\"300\" height=\"188\" \/><br \/>\n<br \/>\nOnce PostLoginGreeting class is created, you can notice the @component annotation is added and properties are defined in class file.<br \/>\n<br \/>\nIt will require to change the key from \u201ckey=login.events.pre\u201d to \u201ckey=login.events.post\u201d. You can also notice the\u201cprocessLifecycleEvent(LifecycleEvent lifecycleEvent)\u201d method is created where you can add the business logic. Class should look like below:<br \/>\n<br \/>\n<img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_7.png\" alt=\"osgi_pl_1\" width=\"702\" height=\"455\" \/><br \/>\n<br \/>\n<em><span style=\"text-decoration: underline;\"><strong>IMP Note:<\/strong><\/span><\/em> In Liferay 7 \/ DXP, you can notice there is no \u2018portlet.xml\u2019 and other configuration files. Infact it is taken care under annotation \u201c@component\u201d which describes this class as a component class and \u201cservice\u201d attribute describe its an Lifecycle Action class. In earlier version of Liferay, this configuration were xml based.<\/p>\n<p>By the way, In real scenarios, this method can be used for various business logic like redirecting to a specific page, processing custom session attributes or any business logic.<br \/>\n<br \/>\n6. Run project on server and observe the output,<br \/>\n\u2192 Right click on module project (login-greeting) &gt; Run on server<br \/>\n\u2192 Open the browser and login with userid\/password.<br \/>\n\u2192 Notice the console output.<br \/>\n<br \/>\n<em><span style=\"text-decoration: underline;\"><strong>Output:<\/strong><\/span><\/em><br \/>\n<br \/>\n<img loading=\"lazy\" class=\"alignnone  wp-image-1458\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/OSGI_PL_8.png\" alt=\"osgi_pl_1\" width=\"552\" height=\"164\" \/><\/p>\n<p>Blog By,<br \/>\nMaitrik\u00a0Panchal<br \/>\nSoftware Engineer<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Before we get in to how OSGi and Liferay goes hand in hand, it is recommended to understand the core of OSGi. You can go thru this link and get your hand dirty with plain OSGi example. Liferay7 and DXP released with many buzzwords like Modularity, Expansibility and Semantic versioning. All of these, have base&hellip; <a class=\"more-link\" href=\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/\">Continue reading <span class=\"screen-reader-text\">Liferay7\/DXP &#8211; OSGI module for PostLoginAction<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,46],"tags":[9,18,19,16,20,21],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Liferay7\/DXP \u2013 OSGI module for PostLoginAction<\/title>\n<meta name=\"description\" content=\"OSGI module for PostLoginAction using Liferay7\/DXP\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Liferay7\/DXP \u2013 OSGI module for PostLoginAction\" \/>\n<meta property=\"og:description\" content=\"OSGI module for PostLoginAction using Liferay7\/DXP\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/\" \/>\n<meta property=\"og:site_name\" content=\"EnProwess Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-09-24T09:53:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-06-14T05:44:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"999\" \/>\n\t<meta property=\"og:image:height\" content=\"229\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\",\"name\":\"EnProwess\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg\",\"contentUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg\",\"width\":1057,\"height\":697,\"caption\":\"EnProwess\"},\"image\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#website\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/\",\"name\":\"EnProwess Blog\",\"description\":\"Your Enterprise solution partner\",\"publisher\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.enprowess.com\/blogs\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg\",\"contentUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg\",\"width\":999,\"height\":229,\"caption\":\"Liferay7\/DXP \\u2013 OSGI module for PostLoginAction\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/\",\"name\":\"Liferay7\/DXP \\u2013 OSGI module for PostLoginAction\",\"isPartOf\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage\"},\"datePublished\":\"2016-09-24T09:53:25+00:00\",\"dateModified\":\"2017-06-14T05:44:12+00:00\",\"description\":\"OSGI module for PostLoginAction using Liferay7\/DXP\",\"breadcrumb\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\/\/www.enprowess.com\/blogs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Liferay\",\"item\":\"https:\/\/www.enprowess.com\/blogs\/category\/liferay\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Liferay7\/DXP &#8211; OSGI module for PostLoginAction\"}]},{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11\"},\"headline\":\"Liferay7\/DXP &#8211; OSGI module for PostLoginAction\",\"datePublished\":\"2016-09-24T09:53:25+00:00\",\"dateModified\":\"2017-06-14T05:44:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage\"},\"wordCount\":422,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg\",\"keywords\":[\"liferay\",\"Liferay 7\",\"Liferay DXP\",\"OSGI\",\"PostLoginHook\",\"PreLoginHook\"],\"articleSection\":[\"Liferay\",\"Liferay DXP\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/www.enprowess.com\/blogs\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Liferay7\/DXP \u2013 OSGI module for PostLoginAction","description":"OSGI module for PostLoginAction using Liferay7\/DXP","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/","og_locale":"en_US","og_type":"article","og_title":"Liferay7\/DXP \u2013 OSGI module for PostLoginAction","og_description":"OSGI module for PostLoginAction using Liferay7\/DXP","og_url":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/","og_site_name":"EnProwess Blog","article_published_time":"2016-09-24T09:53:25+00:00","article_modified_time":"2017-06-14T05:44:12+00:00","og_image":[{"width":999,"height":229,"url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg","type":"image\/jpeg"}],"twitter_card":"summary","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.enprowess.com\/blogs\/#organization","name":"EnProwess","url":"https:\/\/www.enprowess.com\/blogs\/","sameAs":[],"logo":{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/#logo","inLanguage":"en-US","url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg","contentUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg","width":1057,"height":697,"caption":"EnProwess"},"image":{"@id":"https:\/\/www.enprowess.com\/blogs\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.enprowess.com\/blogs\/#website","url":"https:\/\/www.enprowess.com\/blogs\/","name":"EnProwess Blog","description":"Your Enterprise solution partner","publisher":{"@id":"https:\/\/www.enprowess.com\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.enprowess.com\/blogs\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg","contentUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg","width":999,"height":229,"caption":"Liferay7\/DXP \u2013 OSGI module for PostLoginAction"},{"@type":"WebPage","@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage","url":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/","name":"Liferay7\/DXP \u2013 OSGI module for PostLoginAction","isPartOf":{"@id":"https:\/\/www.enprowess.com\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage"},"datePublished":"2016-09-24T09:53:25+00:00","dateModified":"2017-06-14T05:44:12+00:00","description":"OSGI module for PostLoginAction using Liferay7\/DXP","breadcrumb":{"@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/www.enprowess.com\/blogs\/"},{"@type":"ListItem","position":2,"name":"Liferay","item":"https:\/\/www.enprowess.com\/blogs\/category\/liferay\/"},{"@type":"ListItem","position":3,"name":"Liferay7\/DXP &#8211; OSGI module for PostLoginAction"}]},{"@type":"TechArticle","@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#article","isPartOf":{"@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage"},"author":{"@id":"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11"},"headline":"Liferay7\/DXP &#8211; OSGI module for PostLoginAction","datePublished":"2016-09-24T09:53:25+00:00","dateModified":"2017-06-14T05:44:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#webpage"},"wordCount":422,"commentCount":1,"publisher":{"@id":"https:\/\/www.enprowess.com\/blogs\/#organization"},"image":{"@id":"https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#primaryimage"},"thumbnailUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2016\/09\/howto-postlogin.jpg","keywords":["liferay","Liferay 7","Liferay DXP","OSGI","PostLoginHook","PreLoginHook"],"articleSection":["Liferay","Liferay DXP"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.enprowess.com\/blogs\/osgi-based-liferay-postloginaction\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11","name":"admin","image":{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/www.enprowess.com\/blogs\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/1456"}],"collection":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/comments?post=1456"}],"version-history":[{"count":4,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/1456\/revisions"}],"predecessor-version":[{"id":1776,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/1456\/revisions\/1776"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/media\/1737"}],"wp:attachment":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/media?parent=1456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/categories?post=1456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/tags?post=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}