2016-03-25 6 views
0

Freemarkerと6.2で使用していなかったクラスローダーに奇妙な問題があります。 基本的に、Oauthを使用するテンプレートの上部にマイナーロジックがあります。これはうまく動作するために使用し、私はそれで問題を見ることができません。私はできる限りどこでもScribeのバリエーションを配置し、ROOTの中に入っているものを削除しようとしました。Liferay 7 - Freemarker:関数シグネチャと一致しないアンラップ操作

奇妙なのは、例外がスローされる前にコードがいくつかのメソッドを正常に呼び出すということです。クラスローダーの問題ではなく、unwrap操作の問題です。その機能に関して何か変わったのですか?

コード: ${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またはクラスの定義に対処しなければならなかったとして、私はクラスローダに言及しています。これは、ライブラリの複製による何らかの予期せぬ動作(予測できない動作)でした。

+0

'org.scribe.model.ParameterList' nameを使って2つの異なるクラスをロードすることは可能でしょうか?第3引数のアンラップは非常に簡単なケースです。このフィールドの最後の重要な変更点は、2.3.21(2014-10-12)ですが、このような回帰があってはなりません。 – ddekany

+0

私は、クラスではなく、クラスのdefの問題があったので、それが当てはまると思います。しかし、例外がすべて消えてしまったのですが、これが当てはまる場合、代入前のメソッドも失敗するでしょうか? – Victor

+1

失敗したテンプレートからわかるように、 'trueNTHConnect'はそれ以前に呼び出されたメソッドよりも問題のあるクラスの別のバージョンを使用する可能性があります。とにかく、それを見つけるための確実な方法があります:クラス名が印刷された場所でFreeMarkerを修正して、 'Class'オブジェクトのアイデンティティハッシュも表示するようにしてください。 – ddekany

答えて

0

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

これを見つけるには確かな方法があります:クラスオブジェクトのアイデンティティハッシュも印刷できるように、クラス名が印刷された場所でFreeMarkerをデバッグまたは修正してください。

関連する問題