0

我正在研究 Liferay 和 Salesforce。我是 Liferay 的新手,我遇到了一个我花了太多时间处理的问题。

我有一个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();

newservice-api在 portlet 的 pom.xml 中添加了依赖项:

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

在启动我的 portlet 时,我收到此错误:

    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)

知道如何解决这个问题吗?

4

1 回答 1

0

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

你创建你的实体,所有持久化/模型/等东西都是由 ServiceBuilder 完成的。在 Liferay 7 中,它由两个模块表示:api 和 service。在 maven 的“build”和 servicebuilder 的“build-service”之后,您可以使用默认的 crud 方法CompLocalServiceUtil.deleteComp()等。而且您已经编写了您使用CompLocalServiceUtil.createComp(3)的内容,这意味着您已经覆盖了CompLocalServiceImpl.java文件中的默认方法。这是真的吗?如果不是 - 这正是你有错误的原因。

如果您想添加自己的业务逻辑 - 您应该修改(并再次构建服务)CompLocalServiceImpl,如果您想添加自己的模型 - 您应该修改CompImpl.java

可能我只是误会你了。

于 2017-06-13T09:40:22.307 回答