2017-06-12 88 views
0

我正在使用Liferay和Salesforce。我是Liferay的新手,我遇到了一个我花费太多时间的问题。Liferay 7 Service Builder错误[NoClassDefFoundError]

我有一个portlet,我决定创建一个Service Builder(名为“newService”)。这里是我的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> 

现在,我运行Maven的命令:mvn service-builder:build和它产生的newService-api神器。

我打电话给我的portlet中的服务如下:

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

我加在portlet的pom.xml的newservice-api依赖性:

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

关于开展我的门户,我得到这个错误:

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) 

任何想法如何解决这个问题?

+0

你在哪里有你的portlet war文件中的newService-api? – YuVi

+0

为什么使用Comp Comp = CompLocalServiceUtil.createComp(3);'?你是否在'CompImpl'中实现了你的overriden方法? – German

+0

那么newService-api实际上应该从osgi而不是portlet调用,据我所知, 关于CompImpl,我其实并没有。 –

回答

0

我想写这个评论,但它太长,所以我只能发布它作为答案,对不起。

你创建你的实体,所有persistense/model/etc的东西由ServiceBuilder完成。在Liferay 7中,它由两个模块表示:API和服务。在maven的“build”和servicebuilder的“build-service”之后,你可以使用默认的crud方法,如CompLocalServiceUtil.deleteComp()等等。你已经写道你使用CompLocalServiceUtil.createComp(3)这意味着你已经覆盖CompLocalServiceImpl.java文件中的默认方法。这是真的吗?如果没有 - 这正是你出错的原因。

如果你想添加自己的逻辑 - 你应该修改(并重新建立服务)CompLocalServiceImpl,如果你想加你自己的模型 - 你应该修改CompImpl.java

可能是我刚才误会你。

+0

再次感谢您的回答, 啊,我明白你的意思了。那么,我不会修改服务构建器生成的crud方法,只要它们生成,我就可以在不做任何修改的情况下使用它们。 –