Liferay 7-Freemarker:展开操作与函数签名不匹配

Liferay 7-Freemarker:展开操作与函数签名不匹配,liferay,freemarker,liferay-theme,liferay-7,Liferay,Freemarker,Liferay Theme,Liferay 7,我在Freemarker和类加载器方面遇到了一个奇怪的问题,我在6.2上没有使用过它。 基本上,在使用Oauth的模板顶部有一个小逻辑。这种用法很好用,我看不出有什么问题。我试着在任何地方放置一个不同的抄写器,甚至删除根中的一个 奇怪的是,代码在抛出异常之前成功地调用了一些方法,我想这不是类加载器的问题,而是展开操作的问题。该功能是否发生了变化 代码: ${callbackParameters.add(TruenthouthConstants.REDIRECT,PortalTil.getCur

我在Freemarker和类加载器方面遇到了一个奇怪的问题,我在6.2上没有使用过它。 基本上,在使用Oauth的模板顶部有一个小逻辑。这种用法很好用,我看不出有什么问题。我试着在任何地方放置一个不同的抄写器,甚至删除根中的一个

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

代码:

${callbackParameters.add(TruenthouthConstants.REDIRECT,PortalTil.getCurrentCompleteURL(请求))}
(此行例外)


FreeMarker模板错误:
未发现相容性超负荷变异;无法将第3个参数转换(展开)为所需的Java类型。
参数值的FTL类型为:number(包装器:f.t.SimpleNumber)、number(包装器:f.t.SimpleNumber)、extended_hash+string(org.scribe.model.ParameterList包装到f.e.b.StringModel中)。
**已在这些成员中搜索匹配的重载**:
com.sun.proxy.$Proxy799.getAuthorizationUrl(长),
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或类定义NotFound才能达到这一点。由于库复制,这是意料之中的(不可预测的行为)

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


有一个确定的方法可以找到:在打印类名的位置调试或修改FreeMarker,以便它也打印类对象的标识哈希。

是否可能有两个不同的类加载了
org.scribe.model.ParameterList
name?因为展开第三个参数是一个非常简单的例子。该字段的最后一个重要更改出现在2.3.21(2014-10-12)中,但它不应该导致这样的回归。我怀疑是这样的,因为我遇到的是类定义问题,而不是类未找到。但是现在所有的异常都消失了,如果是这种情况,那么赋值之前的方法也会失败,对吗?从失败的模板中我看到的很多情况是,
trueNTHConnect
很可能使用了问题类的另一个版本,而不是之前调用的方法。无论如何,有一个确定的方法可以找到它:在打印类名的地方修改FreeMarker,这样它也可以打印
对象的标识哈希。@ddekany很抱歉,很长时间以来,我一直在浏览这里的问题,我注意到这个问题被标记为未回答。如果你愿意的话,你可以写一个答案。它解决了问题。我把这个作为答案加上去了。