Liferay - Hook for GroupWrapper

时间:2011-05-23 10:27:49

标签: hook liferay liferay-6

我正在尝试覆盖com.liferay.portal.model.Group中的getDescriptiveName()方法

我找到了一个包装器(com.liferay.portal.model.GroupWrapper),所以我试着写一个如文档中所写的钩子:

liferay-hook.xml

<service>
    <service-type>com.liferay.portal.model.GroupWrapper</service-type>
    <service-impl>fr.villedeniort.hook.expando.GroupWrapperImpl</service-impl>
</service>

fr.villedeniort.hook.expando.GroupWrapperImpl.java

public class GroupWrapperImpl extends GroupWrapper {
    public GroupWrapperImpl(Group group) {
    super(group);
}

@Override
public java.lang.String getDescriptiveName()
  throws com.liferay.portal.kernel.exception.PortalException,
  com.liferay.portal.kernel.exception.SystemException {
    return super.getDescriptiveName();
}

当部署钩子时,它会引发异常:

java.lang.NoSuchMethodException: fr.villedeniort.hook.expando.GroupWrapperImpl.<init>(com.liferay.portal.model.GroupWrapper)

我浏览了我发现的代码,因为我忽略的原因它在这部分中断了:

Constructor<?> serviceImplConstructor = serviceImplClass.getConstructor(new Class<?>[] {serviceTypeClass});

此时,变量具有以下值:

serviceType "com.liferay.portal.model.GroupWrapper" (id=14829)
serviceImpl "fr.villedeniort.hook.expando.GroupWrapperImpl" (id=14830)
serviceTypeClass Class<T> (com.liferay.portal.model.GroupWrapper) (id=14831)
serviceImplClass Class<T> (fr.villedeniort.hook.expando.GroupWrapperImpl) (id=14832)

你有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

你应该还有一个没有任何参数的构造函数。现在你有一个带有constuctor参数,但是java在创建类实例时没有搜索的纯类构造函数。在调用纯构造函数java之后,然后调用有争议的。

我在其他一些情况下有类似的情况,这就是解决方案。错误消息上的<init>标记引用了这类问题。

答案 1 :(得分:0)

显然,除了服务之外不可能挂钩其他类,所以我必须找到一种不同的方式。对于我的情况,我挂钩了一个JSP并编写了我自己的方法来从钩子中获取正确的描述性名称。