Liferay 7-Freemark:打开操作与函数签名不匹配



我在Freemarker和类加载器方面遇到了一个奇怪的问题,而我在6.2上没有使用过这个问题。基本上,在使用Oauth的模板顶部有一个小逻辑。这个过去工作得很好,我看不出有什么问题。我试着把Scribe的变体放在我能放的地方,甚至删除了ROOT中的一个。

奇怪的是,代码在抛出异常之前成功地调用了一些方法,我想这不是类加载器的问题,而是打开操作的问题。该功能是否发生了变化?

代码: ${callbackParameters.add(TrueNTHOAuthConstants.REDIRECT, portalUtil.getCurrentCompleteURL(request))}
<#assign trueNTHConnectLoginURL = trueNTHConnect.getAuthorizationUrl(companyId,1, callbackParameters) /> (Exception at this line)

FreeMarker template error: No compatible overloaded variation was found; can't convert (unwrap) the 3rd argument to the desired Java type. The FTL type of the argument values were: number (wrapper: f.t.SimpleNumber), number (wrapper: f.t.SimpleNumber), extended_hash+string (org.scribe.model.ParameterList wrapped into f.e.b.StringModel). **The matching overload was searched among these members**: com.sun.proxy.$Proxy799.getAuthorizationUrl(long), com.sun.proxy.$Proxy799.getAuthorizationUrl(long, int, org.scribe.model.ParameterList, org.scribe.model.ParameterList), com.sun.proxy.$Proxy799.getAuthorizationUrl(long, int, org.scribe.model.ParameterList)

我刚刚提到了类加载器,因为我必须处理几个找不到的ClassNotFoundException或类定义才能达到这一点。由于库复制,这在某种程度上是意料之中的(不可预测的行为)。。

可能有两个不同的类加载了org.scribe.model.ParameterList名称。因此,trueNTHConnect使用了问题类的另一个版本,而不是之前调用的方法。JVM会将它们视为完全不同的不兼容类,因此没有匹配的重载。

有一种可靠的方法可以找到它:在打印类名的地方调试或修改FreeMarker,这样它也可以打印class对象的标识哈希。

最新更新