Liferay - GroupWrapper 的钩子

发布于 2024-11-09 07:39:10 字数 1710 浏览 2 评论 0原文

我试图重写 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)

你有什么想法吗?

谢谢!

I'm trying to override the getDescriptiveName() method in com.liferay.portal.model.Group

I found a wrapper (com.liferay.portal.model.GroupWrapper), so I tried to write a hook as written in the documentation :

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();
}

When the hook is deployed, it raises an exception :

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

I browse the code I found out that it breaks at this part for a reason I ignore:

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

At this point, variables have theses values:

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)

Do you have any idea?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我是男神闪亮亮 2024-11-16 07:39:10

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

我在其他情况下也遇到过类似的情况,这就是解决方案。错误消息上的 标记就涉及此类问题。

You should have also a constructor without any argument. Now you have one with constuctor arguments, but there is no pure class constructor that java searches when it makes class instance. After calling the pure constructor java then calls the argumented one.

I had similar case in some other context and this was the solution. <init> tag on the error message refers on this kind of issue.

清风不识月 2024-11-16 07:39:10

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

Apparently, it's not possible to hook other classes than Services, so I had to find a different way. For my case, I hooked a JSP and wrote my own method to get the right descriptive name from the hook.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文