gpt4 book ai didi

binding - JAX WSclient 将 stub 转换到绑定(bind)提供者

转载 作者:行者123 更新时间:2023-12-02 17:43:40 27 4
gpt4 key购买 nike

在编写 JAXWS 客户端时,这是我过去使用的:

// CALL SERVICE
EPaymentsService bPayService = new EPaymentsService();
ServiceInterface stub = bPayService.getPort();
BindingProvider bp = (BindingProvider) stub;
Map<String, Object> rc = bp.getRequestContext();
String endPointUrl = propFile.getString(Constants.END_POINT_URL);
rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointUrl);
// RESPONSE
ResponseMessage resMessage = stub.sendMessage(reqMessage);

在我的代码中,ServiceInterface 没有扩展 BindingProvider。那么我们为什么在转换时不会出错

BindingProvider bp = (BindingProvider) stub;

最佳答案

BindingProvider bp = (BindingProvider) stub;

这是一个窄化引用转换。根据 Narrowing reference conversion 的规则之一,接口(interface)类型 K 可以分配给非参数化接口(interface)类型 J,提供 K不是 J 的子类型(如果 KJ 的子类型,则不需要显式转换)。

J j = (J) K;

如果转换失败,将在运行时抛出 ClassCastException。

InputStream in = System.in;
Runnable r = (Runnable) in;

上面的代码片段可以编译,因为 InputStreamRunnable 都是非参数化接口(interface),但会在运行时导致 ClassCastException

ServiceInterfaceBindingProvider 的转换是有效的,因为 getPort 返回一个实现了 WSBindingProvider 接口(interface)的动态代理类,它又扩展了 BindingProvider 接口(interface)。

关于binding - JAX WSclient 将 stub 转换到绑定(bind)提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17552597/

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