2011-12-28 56 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> 

此時,只有一個<實體您的代碼示例中>元素。它沒有列,也沒有定義主鍵列。在這種情況下代碼生成不可能工作。

相關問題