tomcat - 服务 Liferay 中的 java.lang.NoSuchMethodError

标签 tomcat service liferay

我创建了一个 portlet,我生成了服务的 .jar 并将其移动到 /tomcat/lib/ext。然后我创建了一个使用相同 BD 的 Hook 。但是当我尝试在钩子(Hook)中执行“DynamicQuery”时它不起作用,然后我尝试在 RuleLocalServiceImpl.java 中创建一个新函数,再次生成 .jar 并将其移动到 /tomcat/lib/ext。但它不起作用,当我尝试执行时出现此错误:

java.lang.NoSuchMethodError: com.segmentationPortlet.service.RuleLocalServiceUtil.getActiveRule(Ljava/util/Date;)Ljava/util/List;

这是函数的代码:

public class RuleLocalServiceImpl extends RuleLocalServiceBaseImpl {
   /*
    * NOTE FOR DEVELOPERS:
    *
    * Never reference this interface directly. Always use {@link com.segmentationPortlet.service.RuleLocalServiceUtil} to access the rule local service.
    */
    public List<Rule> getActiveRule(Date lastLogin) throws SystemException {
        DynamicQuery dq_rules = DynamicQueryFactoryUtil.forClass(Rule.class, PortalClassLoaderUtil.getClassLoader())
            .add(PropertyFactoryUtil.forName("modifiedDate").ge(lastLogin))
            .add(PropertyFactoryUtil.forName("status").eq(true));

            List<Rule> listRules = RuleLocalServiceUtil.dynamicQuery(dq_rules);
            return listRules;
    }
}

我尝试停止 tomcat,删除 .jar 并重新创建,但不起作用。

这是钩子(Hook)的代码:

package com.segmentationProjecthookLogin.hook;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;
import com.segmentationPortlet.model.ConditionsRule;
import com.segmentationPortlet.model.Rule;
import com.segmentationPortlet.service.ConditionsRuleLocalServiceUtil;
import com.segmentationPortlet.service.RuleLocalServiceUtil;


public class LoginAction extends Action {

    private static boolean  isVelocityEngineStarted = false;
    public void run(HttpServletRequest req, HttpServletResponse res) {     
        System.out.println("Login");
        User user;
        try {
            user = PortalUtil.getUser(req);     
            Date lastLogin = user.getLastLoginDate();
            List<Rule> listRule = RuleLocalServiceUtil.getActiveRule(lastLogin);
            System.out.println("Size " + listRule.size());
        } catch (PortalException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SystemException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (com.liferay.portal.kernel.exception.SystemException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (com.liferay.portal.kernel.exception.PortalException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

谢谢!

最佳答案

以下是可能造成错误的可能性,按概率顺序排列。

  1. getActiveRole 是类 RuleLocalServiceImpl 中的非静态方法,您在静态上下文中调用它,我也是如此
  2. 假设以上不是问题,Date 可能有不同版本,即 java.util.Datejava.sql.Date在方法声明和方法调用中。

关于tomcat - 服务 Liferay 中的 java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845006/

相关文章:

java - 从 servlet 调用异步方法

java - 生产中的 Liferay 设置

java - Liferay如何调用新 View

tomcat - @EnableAutoConfiguration - excludeName

java - SoapUI 找不到我的网络服务

mysql windows服务卡在启动状态

Angular 6 : Update a value in my component when she change in my service

android - 如何对依赖于网络连接的 Android 服务进行单元测试

liferay - 在 portlet 外部使用模板时出现类加载器问题

javascript - 使用 websockets 的 Web 应用程序 “Could not establish connection. Receiving end does not exist."