Expose Liferay Custom JSON web Services in Plug-in Environment


Download plugin portlet from following URL


Following is the step by step description of generating a custom liferay plugin service and exposing it as JSON Web Service.

STEP: 1 Create a liferay plugin project and create new service

Here is the sample service.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_0_0.dtd">
<service-builder package-path="com.meera.json">
      <author>meera</author>
      <namespace>json</namespace>

<entity name="Student" local-service="true" remote-service="true">
            <column name="studentId" type="long" primary="true" />
            <column name="studentName" type="String" />
      </entity>
</service-builder>

Make sure remote-service=”true” in entity tag declaration.

STEP: 2  Build the service.
  
STEP: 3 write you custom method implementation in StudentServiceImpl.java

public com.meera.json.model.Student getStudent(long studentId)
      throws com.liferay.portal.kernel.exception.PortalException,
            com.liferay.portal.kernel.exception.SystemException {
      return StudentLocalServiceUtil.getStudent(studentId);
}

Note: Here I am using existed method only don’t confuse. You can write your custom method implementation instead of my method.

STEP: 4 build the service using command ant build-service from your eclipse ant view

STEP: 5 Add the following <servlet> and <servlet-mapping> Entries to portlet’s  web.xmlfile

<servlet>
<servlet-name>JSON Web Service Servlet</servlet-name>
<servlet-class>com.liferay.portal.kernel.servlet.PortalClassLoaderServlet</servlet-class>
<init-param>
<param-name>servlet-class</param-name>
<param-value>com.liferay.portal.servlet.JSONServlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSON Web Service Servlet</servlet-name>
<url-pattern>/api/jsonws/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JSON Web Service Servlet</servlet-name>
<url-pattern>/api/secure/jsonws/*</url-pattern>
</servlet-mapping>

STEP: 6 deploy the portlet using ant deploy command from eclipse ant view

STEP: 7 to access your json web services enter the following url –
Note: if you access above url you will get blank page in browser but don’t worry. Make sure no exception will be occurred in console. Go through following url
Following is full URL to get json data according to my example

http://localhost:8080/LiferayCustomJsonWebService-portlet/api/jsonws/?serviceClassName=com.meera.json.service.StudentServiceUtil&serviceMethodName=getStudent&serviceParameters=[studentId]&studentId=1


Note: Change port number according to your environment and change portlet-contextname according to your portlet context name
Share on Google Plus

About Meera Prince

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

4 comments:

  1. The message in Liferay 6.1.1 is {"exception":"No JSON web service action associated with path /student/get-stutend and method GET for //LiferayCustomJsonWebService-portlet"}

    ReplyDelete
  2. {"exception":"Please sign in to invoke this method"}
    How to resolve this issue ?

    ReplyDelete
  3. This was one of the greatest thing I have read. Thank you for sharing . Hope you continue writing educational post for every students.

    ReplyDelete
  4. thank you... i will have such kind of plans.. thanks for your suggestion and keep in touch with liferaysavvy.com for latest updates..also go through following link for liferay 6.1x json web services..

    http://www.liferaysavvy.com/2013/11/liferay-custom-json-web-services-on.html

    ReplyDelete