Liferay:如何添加新的JSONWebService方法

时间:2013-04-15 12:36:04

标签: tomcat liferay liferay-6 portal

我需要通过json请求获取DDL记录。 Liferay核心没有这样的服务。只有getRecordSet。

我编写DDLRecordSetService Hook来添加新方法getRecords(recordSetId)。 我的代码:

public class ExtDDLRecordSetLocalServiceImpl extends DDLRecordSetServiceWrapper {


   public ExtDDLRecordSetLocalServiceImpl(DDLRecordSetService ddlRecordSetService) {
       super(ddlRecordSetService);
   }

   public com.liferay.portlet.dynamicdatalists.model.DDLRecordSet getRecordSet(long recordSetId) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException{

       System.out.println("------override getRecordSet ");
      DDLRecordSet set = super.getRecordSet(recordSetId+10);
        return set;
   }

   @JSONWebService
   public List<DDLRecord> getRecords(long recordSetId) throws SystemException, PortalException {
        System.out.println("------override getRecords");
        return   getRecordSet(recordSetId).getRecords();
   }

}

我可以覆盖getRecordSet(),但是我无法通过URL访问getRecordSet()方法。

我明白了:

{"exception":"No JSON web service action associated with path /ddlrecordset/get-records and method GET for /"}

如何添加可以通过JSONWebService返回记录集的新DDLRecordSetService?

1 个答案:

答案 0 :(得分:1)

DDL内置的JSON服务比get-record-set更丰富。尝试将浏览器指向门户网站的Web服务API页面。登录后,

/ API / jsonws

DDLRecord有7种方法,DDLRecordSet有8种方法。

在我看来,标准API将满足您的需求。

如果事实证明是这样,那么......

运行服务构建器时会创建JSON Web服务方法。这反过来将您的方法设计为JSON,SOAP等正确的对象。

由于您从未运行过服务构建器,因此不会发生逆向工程。我怀疑为你的核心Liferay资源上的钩子运行SB是你的想法(无论如何,它都是不可取的,imo。)

我的建议是使用Service Builder创建自己的服务,从而为您要公开的服务对象创建自己的API。另请参阅this question