2011-12-28 74 views
0

我有一个“ECLocalDataService.java”类。我试图将它构建为liferay本地服务,以便我可以使用ServiceLocator.findService()从所有portlet和velocity模板访问它。当我尝试使用servicebuilder构建liferay服务时出现空指针异常

我ECLocalDataService有点像这样:

public interface ECDataLocalService { 

    public java.lang.String getBeanIdentifier(); 


    public void setBeanIdentifier(java.lang.String beanIdentifier); 

    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) 
    public float getPriceBySKU(java.lang.String sku); 
} 

其实现类是这样的:

import com.rosettastone.service.base.ECDataLocalServiceBaseImpl; 

public class ECDataLocalServiceImpl extends ECDataLocalServiceBaseImpl { 

    public float getPriceBySKU(String sku) { 
     float price = 125.99f; 
     return price; 
    } 

} 

我已经注册了我的ECDataLocalService在我service.xml中

<service-builder package-path="com.rosettastone"> 
    <author>rajeshp</author> 
    <namespace>mycompany</namespace> 

    <entity name="ECDataLocalService" local-service="true" remote-service="false" human-name="ECDataLocalService"></entity> 

</service-builder> 

在此之后,当我点击Liferay Dev Studio中的“BuildServices”图标时,它会抛出N ullPointer异常。它甚至没有显示它找到了NullPointer的对象,也没有显示错误消息或日志消息,只是简单地显示NullPointerException并且服务没有生成。

+0

你可以在调试器中运行它吗? –

+1

您的实体没有列,也没有主键列。添加完这些之后,我建议您从命令行运行ant-task:ant build-service。然后通过堆栈痕迹。 – knb

回答

0

构建服务ant任务旨在从定义一个或多个表的service.xml构建服务。然后它会为您生成所有Java代码。没有必要先创建Java文件,实际上我认为这不会起作用。

我会阅读这篇Liferay维基文章,这应该让你在路上。

http://www.liferay.com/community/wiki/-/wiki/Main/Service+Builder

一旦你从这个您造成服务罐子把那你的tomcat类路径,以便其他portlet可以访问该服务。

1
<entity name="ECDataLocalService" local-service="true" remote-service="false" human-name="ECDataLocalService"></entity> 

此时,只有一个<实体您的代码示例中>元素。它没有列,也没有定义主键列。在这种情况下代码生成不可能工作。

相关问题