2017-06-12 1 views
0

Je travaille sur Liferay et Salesforce. Je suis nouveau à Liferay et je rencontre un problème sur lequel j'ai passé trop de temps.Liferay 7 Service Builder Erreur [NoClassDefFoundError]

J'ai un portlet que j'ai décidé de créer un Service Builder (nommé "newService"). Voici mon service.xml:

<service-builder package-path="com.fr.liferay"> 
    <namespace>SSB</namespace> 
    <entity local-service="true" name="Comp" remote-service="false" uuid="true"> 
    <!--<entity name="Foo" table="foo" uuid="true" local-service="true" remote-service="false" data-source="sampleDataSource" session-factory="sampleSessionFactory" tx-manager="sampleTransactionManager">--> 

     <!-- PK fields --> 

     <column name="compId" primary="true" type="long" /> 

     <!-- Group instance --> 

     <column name="groupId" type="long" /> 

     <!-- Audit fields --> 

     <column name="companyId" type="long" /> 
     <column name="userId" type="long" /> 
     <column name="userName" type="String" /> 
     <column name="createDate" type="Date" /> 
     <column name="modifiedDate" type="Date" /> 

     <!-- Other fields --> 

     <column name="compName" type="String" /> 
     <column name="compDesc" type="String" /> 
     <column name="compPath" type="String" /> 

     <!-- Order --> 

     <!-- References --> 

    </entity> 
</service-builder> 

Maintenant, j'exécutez la commande maven: mvn service-builder:build et il a généré l'artefact newService-api.

J'appelle le service dans mon portlet comme suit:

Comp comp = CompLocalServiceUtil.createComp(3); comp.persist();

j'ai ajouté la dépendance newservice-api dans le pom.xml du portlet:

<dependency> 
    <groupId>com.fr.liferay.liferay7- 
       architecture.portail7.services.newService</groupId> 
    <artifactId>newService-api</artifactId> 
    <version>1.0.0</version> 
    <scope>provided</scope> 
</dependency> 

Lors du lancement de mon portlet, je obtenir cette erreur:

Caused by: java.lang.NoClassDefFoundError: com/fr/liferay/service/CompLocalServiceUtil 
    at com.fr.liferay.controllers.TestController.actionTwoMethod(TestController.java:151) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180) 
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:367) 
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.doHandle(AnnotationMethodHandlerAdapter.java:354) 
    at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.handleAction(AnnotationMethodHandlerAdapter.java:285) 
    at org.springframework.web.portlet.DispatcherPortlet.doActionService(DispatcherPortlet.java:666) 
    ... 181 more 
12:55:57,243 ERROR [http-nio-8080-exec-5][render_portlet_jsp:131] null 
java.lang.NoClassDefFoundError: com/fr/liferay/service/CompLocalServiceUtil 
    at com.fr.liferay.controllers.TestController.actionTwoMethod(TestController.java:151) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:71) 
    at com.liferay.portlet.CheckboxParametersPortletFilter.doFilter(CheckboxParametersPortletFilter.java:57) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:68) 
    at com.liferay.portlet.CheckboxParametersPortletFilter.doFilter(CheckboxParametersPortletFilter.java:57) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:68) 
    at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:48) 
    at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:105) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at com.liferay.portal.osgi.web.wab.extender.internal.adapter.ServletExceptionAdapter.service(ServletExceptionAdapter.java:68) 
    at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153) 
    at org.eclipse.equinox.http.servlet.internal.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:50) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:115) 
    at com.liferay.portal.osgi.web.wab.extender.internal.adapter.FilterExceptionAdapter.doFilter(FilterExceptionAdapter.java:46) 
    at org.eclipse.equinox.http.servlet.internal.registration.FilterRegistration.doFilter(FilterRegistration.java:121) 
    at org.eclipse.equinox.http.servlet.internal.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:45) 
    at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:70) 
    at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:117) 
    at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.include(RequestDispatcherAdaptor.java:48) 

Une idée de comment résoudre ceci?

+0

Où avez-vous votre newService-api dans le fichier de guerre de portlet? – YuVi

+0

Pourquoi utilisez-vous 'comp comp = CompLocalServiceUtil.createComp (3);'? Avez-vous implémenté votre méthode overriden dans CompImpl? – German

+0

Eh bien le newService-api est en fait censé être appelé depuis l'osgi et non le portlet autant que je sache, Et à propos du CompImpl, je ne l'ai pas fait. –

Répondre

0

Je voulais écrire ceci comme commentaire mais c'est trop long donc je peux seulement le poster comme réponse, désolé.

Vous créez votre unité et toutes les tâches persistense/model/etc sont effectuées par ServiceBuilder. Dans Liferay 7 il est représenté par deux modules: api et service. Après "build" de maven et "build-service" de servicebuilder, vous pouvez utiliser des méthodes crud par défaut telles que CompLocalServiceUtil.deleteComp() et autres. Et vous avez écrit que vous utilisez CompLocalServiceUtil.createComp(3) ce qui signifie que vous avez déjà remplacé cette méthode par défaut dans le fichier CompLocalServiceImpl.java. Est-ce vrai? Si non - c'est exactement pourquoi vous avez votre erreur.

Si vous voulez ajouter votre propre logique métier - vous devez modifier (et construire service nouveau) CompLocalServiceImpl, si vous voulez vous ajouter le modèle propre - vous devez modifier CompImpl.java

Peut-être je vous comprends mal.

+0

Merci encore pour votre réponse, Ah, je vois ce que vous voulez dire. Eh bien, je ne modifie pas les méthodes crud générées par le constructeur de services, dès qu'ils sont générés, je les utilise sans aucune modification. –