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

名前がロードされた 2 つの異なるクラスがある可能性がありますorg.scribe.model.ParameterList。そのtrueNTHConnectため、以前に呼び出されたメソッドとは異なる、問題のあるクラスの別のバージョンを使用しています。JVM はそれらをまったく異なる互換性のないクラスと見なすため、一致するオーバーロードはありません。

それを見つける確実な方法があります。クラス名が出力されている場所で FreeMarker をデバッグまたは変更して、Class オブジェクトの ID ハッシュも出力するようにします。

于 2016-09-12T18:59:44.140 に答える