0

我在使用 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 或未找到的类定义才能到达这一点。由于库复制,这是某种预期的(不可预测的行为)。

4

1 回答 1

0

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

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

于 2016-09-12T18:59:44.140 回答