エラーメッセージ
High-speed Service Framework(HSF)サービスの呼び出し時に、次のエラーメッセージが報告されます。
There is no TOP transformer for Service:[${serviceUniqueName}].解決策
Taobao Open Platform(TOP)呼び出しメソッドは、ゲートウェイアプリケーションがバックエンドサービスの API パッケージに依存することを防ぎます。TOP 呼び出しがサーバー上で変換されると、対応する transformer が見つかりません。
クライアントの設定
クライアントは、com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop を使用します。このクラスは、サーバーの API パッケージを必要としません。com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop#invoke を使用して API を呼び出します。
次のサンプルコードは、クライアントを設定する方法の例を示しています。
/**
* TOP はこのメソッドを呼び出して、HSF サービスにリモートアクセスします。
* <p>
* parameterTypes パラメーターは、呼び出すメソッドのパラメーターの型を示します。完全な Java クラス名である必要があります。パラメーターがアトミック型の場合、型はアトミック型の名前です。
* </p>
*
* @return ピアサービスの応答またはサービスエラーを返します。
*
* @throws HSFException
* ローカルまたはピア HSF レイヤーでエラーが発生した場合、HSFException がスローされます。
* @throws Throwable
* サーバーでエラーが発生した場合、Exception がスローされます。
*/
public Object invoke(String methodName, String[] parameterTypes, Object[] args) throws HSFException, Throwable {
return consumerBeanTop.invoke(methodName, parameterTypes, args);
}
ここで、args はサーバーの実際のサービスタイプではありません。
サーバーの設定
サーバーが初期化されると、com.taobao.hsf.ServiceInvokeTransform.Helper#register が呼び出されて transformer が登録されます。
次のサンプルコードは、サーバーを設定する方法の例を示しています。
/**
* サービス呼び出しパラメーターを、サービスが受け入れられる形式に変換するために使用されます。
*
* @param methodName
* 呼び出すサービスメソッドの名前。
* @param args
* 変換前の呼び出しパラメーター。
* @param parameterTypes
* 呼び出すサービスメソッドの実際のパラメーター型。
*/
abstract public Object[] transformRequest(String methodName, Object[] args, String[] parameterTypes)
throws Exception;
/**
* 変換されるリクエストパラメーターの型。
*
* @param methodName
* @param args
* @param parameterTypes
* @return
* @throws Exception
*/
abstract public String[] transformRequestTypes(String methodName, Object[] args, String[] parameterTypes)
throws Exception;
transformer は、クライアントによって送信されたパラメーターをサーバー上の実際のサービスタイプに変換します。HSF は、変換されたパラメーターに基づいてサービスを呼び出し、transformer を使用してサービス結果を変換し、その結果を TOP クライアントに返します。