gpt4 book ai didi

java - 实现通用 WS 重试调用

转载 作者:行者123 更新时间:2023-12-03 01:02:14 26 4
gpt4 key购买 nike

我想对我的 WS 调用实现通用重试调用机制。WS 调用可能会有所不同,因此结果有不同的类型。假设有两种类型的调用:

int result = wsPortType.callMethod(arg1, arg2);
MyObject result = anotherWsPortType.callSomeOtherMethod(arg);

我可以对所有 WS 调用方法执行类似的操作:

int result;
try
{
result = wsPortType.callMethod(arg1, arg2);
}
catch (Exception ex)
{
try
{
result = wsPortType.callMethod(arg1, arg2);
}
catch (Exception ex0)
{
// TODO
}
}

但是我必须为每个 WS 调用编写,但我不想这样做。

我在想这样的事情:

public class RetryWsCall
{
public interface RetryCallInterface
{
public <T> T RetryCallMethod();
};

public <T> T callWs(RetryCallInterface retryCallImplementation, int retryCount)
{
try
{
return retryCallImplementation.RetryCallMethod();
}
catch (Exception ex)
{
try
{
return retryCallImplementation.RetryCallMethod();
}
catch (Exception ex0)
{
// TODO
}
}
}
}

然后只需调用类似的内容:

RetryWsCall retryWsCall = new RetryWsCall();
retryWsCall.callWs(new RetryWsCall.RetryCallInterface()
{
@Override
public <T> T RetryCallMethod()
{
return wsPortType.callMethod(arg1, arg2);
}
}, 2);

但我就是无法正确使用它,因此泛型方法返回正确的值类型。

最佳答案

好的,我找到答案了。问题是我无法正确使用泛型。我在此示例中添加了最大尝试次数并有意跳过日志记录。

处理重试的类可能如下所示:

public class RetryWsCall
{
public interface RetryCallInterface
{
public <T> T RetryCallMethod();
};

public <T> T callWs(RetryCallInterface retryCallImplementation, int retryCount)
{
try
{
return retryCallImplementation.RetryCallMethod();
}
catch (Exception ex)
{
if (retryCount > 0)
{
while (retryCount > 0)
{
try
{
return result = retryCallImplementation.RetryCallMethod();
}
catch (Exception ex0)
{
retryCount--;
}
}
}
throw ex;
}
}
}

然后我可以调用:

RetryWsCall retryWsCall = new RetryWsCall();
int result = retryWsCall.callWs(
new RetryWsCall.RetryCallInterface()
{
@Override
public Integer RetryCallMethod()
{
return wsPortType.callMethod(arg1, arg2);
}
},
numberOfAttempts
);

RetryWsCall retryWsCall = new RetryWsCall();
MyObject result = retryWsCall.callWs(
new RetryWsCall.RetryCallInterface()
{
@Override
public Integer RetryCallMethod()
{
return anotherWsPortType.callSomeOtherMethod(arg);
}
},
numberOfAttempts
);

关于java - 实现通用 WS 重试调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59749381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com