{"id":1135,"date":"2012-04-06T04:00:00","date_gmt":"2012-04-06T04:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/spring-remoting-support-with-http-invoker.html"},"modified":"2012-10-21T23:37:37","modified_gmt":"2012-10-21T23:37:37","slug":"spring-remoting-support-with-http","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html","title":{"rendered":"Spring Remoting Support with Http Invoker"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services through HTTP and can be thought as an alternative solution instead of the custom serialization found in Hessian and Burlap. Also, it is only provided by Spring so both client and server applications have to be based on Spring. <\/p>\n<p>Spring supports HTTP invoker infrastructure via HttpInvokerProxyFactoryBean and HttpInvokerServiceExporter. HttpInvokerServiceExporter that exports the specified service bean as HTTP invoker service endpoint, accessible via an HTTP invoker proxy. HttpInvokerProxyFactoryBean is a factory bean for HTTP invoker proxies.  <\/p>\n<p>Also <a href=\"http:\/\/www.onlinetechvision.com\/?p=510\">Spring Remoting Support &amp; RMI<\/a> article is offered for Spring Remoting introduction and RMI Service &amp; Client sample project.  <\/p>\n<p>Let us look at Spring Remoting Support to develop Http Invoker Service &amp; Client.  <\/p>\n<p><strong>Used Technologies :<\/strong><\/p>\n<ul style=\"text-align: left\">\n<li>JDK 1.6.0_31&nbsp;<\/li>\n<li>Spring 3.1.1&nbsp;<\/li>\n<li>Tomcat 7.0&nbsp;<\/li>\n<li>Maven 3.0.2<\/li>\n<\/ul>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/1.bp.blogspot.com\/-QllnG8qf4A4\/T33CWKzZwfI\/AAAAAAAAAGQ\/bkDjfHetPRw\/s1600\/SpringHttpInvoker.png\"><img decoding=\"async\" border=\"0\" height=\"400\" src=\"http:\/\/1.bp.blogspot.com\/-QllnG8qf4A4\/T33CWKzZwfI\/AAAAAAAAAGQ\/bkDjfHetPRw\/s400\/SpringHttpInvoker.png\" width=\"231\" \/><\/a><\/div>\n<p><strong>STEP 1 : CREATE MAVEN PROJECT <\/strong><\/p>\n<p>A maven project is created as below. (It can be created by using Maven or IDE Plug-in). <\/p>\n<p><strong>STEP 2 : LIBRARIES <\/strong><\/p>\n<p>Spring dependencies are added to Maven\u2019 s pom.xml.  <\/p>\n<pre class=\"brush:xml\">&lt;!-- Spring 3.1.x dependencies --&gt;\r\n&lt;properties&gt;\r\n    &lt;spring.version&gt;3.1.1.RELEASE&lt;\/spring.version&gt;\r\n&lt;\/properties&gt;\r\n \r\n&lt;dependencies&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-core&lt;\/artifactId&gt;\r\n        &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-context&lt;\/artifactId&gt;\r\n        &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-remoting&lt;\/artifactId&gt;\r\n        &lt;version&gt;2.0.8&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-web&lt;\/artifactId&gt;\r\n        &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-webmvc&lt;\/artifactId&gt;\r\n        &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n&lt;dependencies&gt;\r\n<\/pre>\n<p><strong>STEP 3 : CREATE USER CLASS <\/strong><\/p>\n<p>A new User Class is created.  <\/p>\n<pre class=\"brush:java\">package com.otv.user;\r\n \r\nimport java.io.Serializable;\r\n \r\n\/**\r\n * User Bean\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   24 Feb 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic class User implements Serializable {\r\n \r\n    private long id;\r\n    private String name;\r\n    private String surname;\r\n \r\n    \/**\r\n     * Get User Id\r\n     *\r\n     * @return long id\r\n     *\/\r\n    public long getId() {\r\n        return id;\r\n    }\r\n \r\n    \/**\r\n     * Set User Id\r\n     *\r\n     * @param long id\r\n     *\/\r\n    public void setId(long id) {\r\n        this.id = id;\r\n    }\r\n \r\n    \/**\r\n     * Get User Name\r\n     *\r\n     * @return long id\r\n     *\/\r\n    public String getName() {\r\n        return name;\r\n    }\r\n \r\n    \/**\r\n     * Set User Name\r\n     *\r\n     * @param String name\r\n     *\/\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n \r\n    \/**\r\n     * Get User Surname\r\n     *\r\n     * @return long id\r\n     *\/\r\n    public String getSurname() {\r\n        return surname;\r\n    }\r\n \r\n    \/**\r\n     * Set User Surname\r\n     *\r\n     * @param String surname\r\n     *\/\r\n    public void setSurname(String surname) {\r\n        this.surname = surname;\r\n    }\r\n \r\n    @Override\r\n    public String toString() {\r\n        StringBuilder strBuilder = new StringBuilder();\r\n        strBuilder.append(\"Id : \").append(getId());\r\n        strBuilder.append(\", Name : \").append(getName());\r\n        strBuilder.append(\", Surname : \").append(getSurname());\r\n        return strBuilder.toString();\r\n    }\r\n}\r\n<\/pre>\n<p><strong>STEP 4 : CREATE ICacheService INTERFACE <\/strong><\/p>\n<p>ICacheService Interface representing a remote cache service interface, is created. <\/p>\n<pre class=\"brush:java\">package com.otv.cache.service;\r\n \r\nimport java.util.concurrent.ConcurrentHashMap;\r\n \r\nimport com.otv.user.User;\r\n \r\n\/**\r\n * Cache Service Interface\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   10 Mar 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic interface ICacheService {\r\n \r\n    \/**\r\n     * Get User Map\r\n     *\r\n     * @return ConcurrentHashMap User Map\r\n     *\/\r\n    public ConcurrentHashMap&lt;Long, User&gt; getUserMap();\r\n \r\n}\r\n<\/pre>\n<p><strong>STEP 5 : CREATE CacheService CLASS <\/strong><\/p>\n<p>CacheService Class is created by implementing ICacheService Interface. It provides access to the remote cache\u2026  <\/p>\n<pre class=\"brush:java\">package com.otv.cache.service;\r\n \r\nimport java.util.concurrent.ConcurrentHashMap;\r\n \r\nimport com.otv.user.User;\r\n \r\n\/**\r\n * Cache Service Implementation\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   10 Mar 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic class CacheService implements ICacheService {\r\n \r\n    \/\/User Map is injected...\r\n    ConcurrentHashMap&lt;Long, User&gt; userMap;\r\n \r\n    \/**\r\n     * Get User Map\r\n     *\r\n     * @return ConcurrentHashMap User Map\r\n     *\/\r\n    public ConcurrentHashMap&lt;Long, User&gt; getUserMap() {\r\n        return userMap;\r\n    }\r\n \r\n    \/**\r\n     * Set User Map\r\n     *\r\n     * @param ConcurrentHashMap User Map\r\n     *\/\r\n    public void setUserMap(ConcurrentHashMap&lt;Long, User&gt; userMap) {\r\n        this.userMap = userMap;\r\n    }\r\n \r\n}\r\n<\/pre>\n<p><strong>STEP 6 : CREATE IHttpUserService INTERFACE <\/strong><div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>IHttpUserService representing Http user service interface, is created. Also, it provides remote methods for the Http Clients\u2026  <\/p>\n<pre class=\"brush:java\">package com.otv.http.server;\r\n \r\nimport java.util.List;\r\n \r\nimport com.otv.user.User;\r\n \r\n\/**\r\n * Http User Service Interface\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   10 Mar 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic interface IHttpUserService {\r\n \r\n    \/**\r\n     * Add User\r\n     *\r\n     * @param  User user\r\n     * @return boolean response of the method\r\n     *\/\r\n    public boolean addUser(User user);\r\n \r\n    \/**\r\n     * Delete User\r\n     *\r\n     * @param  User user\r\n     * @return boolean response of the method\r\n     *\/\r\n    public boolean deleteUser(User user);\r\n \r\n    \/**\r\n     * Get User List\r\n     *\r\n     * @return List user list\r\n     *\/\r\n    public List&lt;User&gt; getUserList();\r\n \r\n}\r\n<\/pre>\n<p><strong>STEP 7 : CREATE HttpUserService CLASS <\/strong><\/p>\n<p>HttpUserService Class is created by implementing IHttpUserService Interface. <\/p>\n<pre class=\"brush:java&quot;&quot;\">package com.otv.http.server;\r\n \r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport org.apache.log4j.Logger;\r\n \r\nimport com.otv.cache.service.ICacheService;\r\nimport com.otv.user.User;\r\n \r\n\/**\r\n * Http User Service Implementation\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   10 Mar 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic class HttpUserService implements IHttpUserService {\r\n \r\n    private static Logger logger = Logger.getLogger(HttpUserService.class);\r\n \r\n    \/\/Remote Cache Service is injected...\r\n    ICacheService cacheService;\r\n \r\n    \/**\r\n     * Add User\r\n     *\r\n     * @param  User user\r\n     * @return boolean response of the method\r\n     *\/\r\n    public boolean addUser(User user) {\r\n        getCacheService().getUserMap().put(user.getId(), user);\r\n        logger.debug(\"User has been added to cache. User : \"+getCacheService().getUserMap().get(user.getId()));\r\n        return true;\r\n    }\r\n \r\n    \/**\r\n     * Delete User\r\n     *\r\n     * @param  User user\r\n     * @return boolean response of the method\r\n     *\/\r\n    public boolean deleteUser(User user) {\r\n        getCacheService().getUserMap().remove(user.getId());\r\n        logger.debug(\"User has been deleted from cache. User : \"+user);\r\n        return true;\r\n    }\r\n \r\n    \/**\r\n     * Get User List\r\n     *\r\n     * @return List user list\r\n     *\/\r\n    public List&lt;User&gt; getUserList() {\r\n        List&lt;User&gt; list = new ArrayList&lt;User&gt;();\r\n        list.addAll(getCacheService().getUserMap().values());\r\n        logger.debug(\"User List : \"+list);\r\n        return list;\r\n    }\r\n \r\n    \/**\r\n     * Get Remote Cache Service\r\n     *\r\n     * @return ICacheService Remote Cache Service\r\n     *\/\r\n    public ICacheService getCacheService() {\r\n        return cacheService;\r\n    }\r\n \r\n    \/**\r\n     * Set Remote Cache Service\r\n     *\r\n     * @param ICacheService Remote Cache Service\r\n     *\/\r\n    public void setCacheService(ICacheService cacheService) {\r\n        this.cacheService = cacheService;\r\n    }\r\n \r\n}\r\n<\/pre>\n<p><strong>STEP 8 : CREATE HttpUserService-servlet.xml <\/strong><\/p>\n<p>HttpUserService Application Context is shown as follows. This xml has to be named as <strong>your_servlet_name-servlet.xml<\/strong> <\/p>\n<pre class=\"brush:xml\">&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\r\n        xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n        xmlns:util=\"http:\/\/www.springframework.org\/schema\/util\"\r\n        xsi:schemaLocation=\"http:\/\/www.springframework.org\/schema\/beans\r\n \r\nhttp:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.0.xsd\r\n \r\nhttp:\/\/www.springframework.org\/schema\/util\r\n \r\nhttp:\/\/www.springframework.org\/schema\/util\/spring-util-3.0.xsd\"&gt;\r\n \r\n    &lt;!-- User Map Declaration --&gt;\r\n    &lt;bean id=\"UserMap\" class=\"java.util.concurrent.ConcurrentHashMap\" \/&gt;\r\n \r\n    &lt;!-- Cache Service Declaration --&gt;\r\n    &lt;bean id=\"CacheService\" class=\"com.otv.cache.service.CacheService\"&gt;\r\n        &lt;property name=\"userMap\" ref=\"UserMap\"\/&gt;\r\n    &lt;\/bean&gt;   \r\n \r\n    &lt;!-- Http User Service Bean Declaration --&gt;\r\n    &lt;bean id=\"HttpUserService\" class=\"com.otv.http.server.HttpUserService\" &gt;\r\n        &lt;property name=\"cacheService\" ref=\"CacheService\"\/&gt;\r\n    &lt;\/bean&gt;\r\n \r\n    &lt;!-- Http Invoker Service Declaration --&gt;\r\n    &lt;bean id=\"HttpUserServiceExporter\" class=\"org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter\"&gt;\r\n \r\n        &lt;!-- service represents Service Impl --&gt;\r\n        &lt;property name=\"service\" ref=\"HttpUserService\"\/&gt;\r\n \r\n        &lt;!-- serviceInterface represents Http Service Interface which is exposed --&gt;\r\n        &lt;property name=\"serviceInterface\" value=\"com.otv.http.server.IHttpUserService\"\/&gt;\r\n \r\n    &lt;\/bean&gt;\r\n \r\n    &lt;!-- Mapping configurations from URLs to request handler beans --&gt;\r\n    &lt;bean id=\"urlMapping\" class=\"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping\"&gt;\r\n        &lt;property name=\"mappings\"&gt;\r\n            &lt;props&gt;\r\n                &lt;prop key=\"\/HttpUserService\"&gt;HttpUserServiceExporter&lt;\/prop&gt;\r\n            &lt;\/props&gt;\r\n        &lt;\/property&gt;\r\n    &lt;\/bean&gt;\r\n \r\n&lt;\/beans&gt;\r\n<\/pre>\n<p><strong>STEP 9 : CREATE web.xml <\/strong><\/p>\n<p><strong>web.xml<\/strong> is configured as follows :  <\/p>\n<pre class=\"brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;web-app xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns=\"http:\/\/java.sun.com\/xml\/ns\/javaee\" xmlns:web=\"http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd\" xsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd\" id=\"WebApp_ID\" version=\"2.5\"&gt;\r\n \r\n    &lt;display-name&gt;OTV_SpringHttpInvoker&lt;\/display-name&gt;\r\n \r\n    &lt;!-- Spring Context Configuration' s Path definition --&gt;\r\n    &lt;context-param&gt;\r\n        &lt;param-name&gt;contextConfigLocation&lt;\/param-name&gt;\r\n        &lt;param-value&gt;\r\n            \/WEB-INF\/HttpUserService-servlet.xml\r\n        &lt;\/param-value&gt;\r\n    &lt;\/context-param&gt;\r\n \r\n    &lt;!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext. It is registered to Servlet Container --&gt;\r\n    &lt;listener&gt;\r\n        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;\/listener-class&gt;\r\n    &lt;\/listener&gt;\r\n \r\n    &lt;!-- Central dispatcher for HTTP-based remote service exporters. Dispatches to registered handlers for processing web requests.--&gt;\r\n    &lt;servlet&gt;\r\n        &lt;servlet-name&gt;HttpUserService&lt;\/servlet-name&gt;\r\n        &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;\/servlet-class&gt;\r\n        &lt;load-on-startup&gt;2&lt;\/load-on-startup&gt;\r\n    &lt;\/servlet&gt;\r\n \r\n    &lt;!-- Servlets should be registered with servlet container and mapped with url for the http requests. --&gt;\r\n    &lt;servlet-mapping&gt;\r\n        &lt;servlet-name&gt;HttpUserService&lt;\/servlet-name&gt;\r\n        &lt;url-pattern&gt;\/HttpUserService&lt;\/url-pattern&gt;\r\n    &lt;\/servlet-mapping&gt;\r\n \r\n    &lt;welcome-file-list&gt;\r\n      &lt;welcome-file&gt;\/pages\/index.xhtml&lt;\/welcome-file&gt;\r\n    &lt;\/welcome-file-list&gt;\r\n \r\n&lt;\/web-app&gt;\r\n<\/pre>\n<p><strong>STEP 10 : CREATE HttpUserServiceClient CLASS <\/strong><\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/3.bp.blogspot.com\/-nn3SMDMQ_ao\/T33CpRU79-I\/AAAAAAAAAGY\/FG9kPh5wkL8\/s1600\/SpringHttpInvokerClient.png\"><img decoding=\"async\" border=\"0\" height=\"320\" src=\"http:\/\/3.bp.blogspot.com\/-nn3SMDMQ_ao\/T33CpRU79-I\/AAAAAAAAAGY\/FG9kPh5wkL8\/s320\/SpringHttpInvokerClient.png\" width=\"221\" \/><\/a><\/div>\n<p>HttpUserServiceClient Class is created. It calls the Remote Http User Service and performs user operations. <\/p>\n<pre class=\"brush:java\">package com.otv.http.client;\r\n \r\nimport org.apache.log4j.Logger;\r\nimport org.springframework.context.ApplicationContext;\r\nimport org.springframework.context.support.ClassPathXmlApplicationContext;\r\n \r\nimport com.otv.http.server.IHttpUserService;\r\nimport com.otv.user.User;\r\n \r\n\/**\r\n * Http User Service Client\r\n *\r\n * @author  onlinetechvision.com\r\n * @since   24 Feb 2012\r\n * @version 1.0.0\r\n *\r\n *\/\r\npublic class HttpUserServiceClient {\r\n \r\n    private static Logger logger = Logger.getLogger(HttpUserServiceClient.class);\r\n \r\n    \/**\r\n     * Main method of the Http User Service Client\r\n     *\r\n     *\/\r\n    public static void main(String[] args) {\r\n \r\n        logger.debug(\"Http User Service Client is starting...\");\r\n \r\n        \/\/Http Client Application Context is started...\r\n        ApplicationContext context = new ClassPathXmlApplicationContext(\"httpClientAppContext.xml\");\r\n \r\n        \/\/Remote User Service is called via Http Client Application Context...\r\n        IHttpUserService httpClient = (IHttpUserService) context.getBean(\"HttpUserService\");\r\n \r\n        \/\/New User is created...\r\n        User user = new User();\r\n        user.setId(1);\r\n        user.setName(\"Bruce\");\r\n        user.setSurname(\"Willis\");\r\n \r\n        \/\/The user is added to the remote cache...\r\n        httpClient.addUser(user);\r\n \r\n        \/\/The users are gotten via remote cache...\r\n        httpClient.getUserList();\r\n \r\n        \/\/The user is deleted from remote cache...\r\n        httpClient.deleteUser(user);\r\n \r\n        logger.debug(\"Http User Service Client is stopped...\");\r\n    }\r\n}\r\n<\/pre>\n<p><strong>STEP 11 : CREATE httpClientAppContext.xml <\/strong><\/p>\n<p>Http Client Application Context is shown as follows : <\/p>\n<pre class=\"brush:xml\">&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\r\n    xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n    xsi:schemaLocation=\"http:\/\/www.springframework.org\/schema\/beans\r\n \r\nhttp:\/\/www.springframework.org\/schema\/beans\/spring-beans-3.0.xsd\"&gt;\r\n \r\n    &lt;!-- Http Invoker Client Declaration --&gt;\r\n    &lt;bean id=\"HttpUserService\" class=\"org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean\"&gt;\r\n \r\n        &lt;!-- serviceUrl demonstrates Http Service Url which is called--&gt;\r\n        &lt;property name=\"serviceUrl\" value=\"http:\/\/remotehost:port\/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT\/HttpUserService\"\/&gt;\r\n \r\n        &lt;!-- serviceInterface demonstrates Http Service Interface which is called --&gt;\r\n        &lt;property name=\"serviceInterface\" value=\"com.otv.http.server.IHttpUserService\"\/&gt;\r\n \r\n    &lt;\/bean&gt;\r\n \r\n&lt;\/beans&gt;\r\n<\/pre>\n<p><strong>STEP 12 : DEPLOY PROJECT <\/strong><\/p>\n<p>After <strong>OTV_SpringHttpInvoker <\/strong>Project is deployed to Tomcat, Http User Service Client is started and output logs are shown as follows : <\/p>\n<pre class=\"brush:bash\">....\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [\/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT\/HttpUserService]\r\n15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [\/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.addUser\r\n15.03.2012 21:26:41 DEBUG (HttpUserService.java:33) - User has been added to cache. User : Id : 1, Name : Bruce, Surname : Willis\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.addUser\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling\r\n15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [\/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT\/HttpUserService]\r\n15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [\/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.getUserList\r\n15.03.2012 21:26:41 DEBUG (HttpUserService.java:57) - User List : [Id : 1, Name : Bruce, Surname : Willis]\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.getUserList\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling\r\n15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [\/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT\/HttpUserService]\r\n15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [\/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.deleteUser\r\n15.03.2012 21:26:41 DEBUG (HttpUserService.java:45) - User has been deleted from cache. User : Id : 1, Name : Bruce, Surname : Willis\r\n15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.deleteUser\r\n15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling\r\n15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request\r\n...\r\n\r\n<\/pre>\n<p><strong>STEP 13 : DOWNLOAD <\/strong><\/p>\n<p><a href=\"http:\/\/www.onlinetechvision.com\/wp-content\/uploads\/2012\/03\/OTV_SpringHttpInvoker.zip\">OTV_SpringHttpInvoker<\/a><\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/www.onlinetechvision.com\/?p=537\">Spring Remoting Support with Http Invoker<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Eren Avsarogullari at the <a href=\"http:\/\/www.onlinetechvision.com\/\">Online Technology Vision<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services through HTTP and can be thought as an alternative solution instead of the custom serialization found in Hessian and Burlap. Also, it is only provided by Spring so both client and server applications have &hellip;<\/p>\n","protected":false},"author":158,"featured_media":240,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[30,462],"class_list":["post-1135","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-spring","tag-spring-remoting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Remoting Support with Http Invoker - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Remoting Support with Http Invoker - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-04-06T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T23:37:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Eren Avsarogullari\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eren Avsarogullari\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html\"},\"author\":{\"name\":\"Eren Avsarogullari\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/65e6e57c730ae5ade3adbadd483553bd\"},\"headline\":\"Spring Remoting Support with Http Invoker\",\"datePublished\":\"2012-04-06T04:00:00+00:00\",\"dateModified\":\"2012-10-21T23:37:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html\"},\"wordCount\":363,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"keywords\":[\"Spring\",\"Spring Remoting\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html\",\"name\":\"Spring Remoting Support with Http Invoker - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"datePublished\":\"2012-04-06T04:00:00+00:00\",\"dateModified\":\"2012-10-21T23:37:37+00:00\",\"description\":\"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"spring-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/04\\\/spring-remoting-support-with-http.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Remoting Support with Http Invoker\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/65e6e57c730ae5ade3adbadd483553bd\",\"name\":\"Eren Avsarogullari\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g\",\"caption\":\"Eren Avsarogullari\"},\"sameAs\":[\"http:\\\/\\\/www.onlinetechvision.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Eren-Avsarogullari\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Remoting Support with Http Invoker - Java Code Geeks","description":"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html","og_locale":"en_US","og_type":"article","og_title":"Spring Remoting Support with Http Invoker - Java Code Geeks","og_description":"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services","og_url":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-04-06T04:00:00+00:00","article_modified_time":"2012-10-21T23:37:37+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Eren Avsarogullari","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Eren Avsarogullari","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html"},"author":{"name":"Eren Avsarogullari","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/65e6e57c730ae5ade3adbadd483553bd"},"headline":"Spring Remoting Support with Http Invoker","datePublished":"2012-04-06T04:00:00+00:00","dateModified":"2012-10-21T23:37:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html"},"wordCount":363,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","keywords":["Spring","Spring Remoting"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html","url":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html","name":"Spring Remoting Support with Http Invoker - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","datePublished":"2012-04-06T04:00:00+00:00","dateModified":"2012-10-21T23:37:37+00:00","description":"Spring HTTP Invoker is an important solution for Java-to-Java Remoting. This technology uses the standard Java serialization mechanism to expose services","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","width":150,"height":150,"caption":"spring-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/04\/spring-remoting-support-with-http.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Remoting Support with Http Invoker"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/65e6e57c730ae5ade3adbadd483553bd","name":"Eren Avsarogullari","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d90f2a1d9c2144dd49935d6c84d5c3aa0832793a522148f397bda79bd8e04c16?s=96&d=mm&r=g","caption":"Eren Avsarogullari"},"sameAs":["http:\/\/www.onlinetechvision.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Eren-Avsarogullari"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/158"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1135"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1135\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}