2011-12-28 7 views
0

"ECLocalDataService.java"クラスがあります。私はServiceLocator.findService()を使用して、すべてのポートレットと速度テンプレートからアクセスできるように、ライフラインのローカルサービスとして構築しようとしています。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); 
} 

とその実装クラスは、このようなものです:

私は私のservice.xmlをして私のECDataLocalServiceを登録している
import com.rosettastone.service.base.ECDataLocalServiceBaseImpl; 

public class ECDataLocalServiceImpl extends ECDataLocalServiceBaseImpl { 

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

} 

<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

build-services antタスクは、1つまたは複数のテーブルを定義するservice.xmlからサービスを構築するためのものです。次に、すべてのJavaコードを生成します。 Javaファイルを最初に作成する必要はありませんが、実際にはそれがうまくいくとは思いません。

私はこのLiferay wikiの記事を読んでいます。

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

あなたはこのことから、あなたの結果のサービスの瓶を持っていたら、あなたのTomcatのクラスパス上ので、他のポートレットがサービスにアクセスできることを置きます。このとき

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

、あなたのコードサンプルで唯一<実体>要素があります。列はなく、主キー列も定義されていません。このような状況では、コードの生成がうまくいくわけではありません。

関連する問題