错误编码:HSF-0029
报错信息
There is no TOP transformer for Service:[${serviceUniqueName}].
解决方案
TOP 调用在服务端进行转换时,没有找到对应的 transformer。故在服务端初始化时,请通过 com.taobao.hsf.ServiceInvokeTransform.Helper#register
注册一个 transformer
。
TOP 调用方式
TOP 调用方式 TOP 方式是为了避免网关应用依赖后端服务的 API 包。
客户端
客户端使用 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop
,该类无需服务端的接口包。
通过 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop#invoke
发起调用。
/**
* 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 客户端。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论