JAX WSclient向bindingprovider强制转换存根

JAX WSclient向bindingprovider强制转换存根,binding,jax-ws,stub,Binding,Jax Ws,Stub,在编写JAXWS客户端时,我过去使用过以下方法: // CALL SERVICE EPaymentsService bPayService = new EPaymentsService(); ServiceInterface stub = bPayService.getPort(); BindingProvider bp = (BindingProvider) stub; Map<String, Object> rc = bp.getRequestContext(); String

在编写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);
这是一个缩小的参考转换。根据缩小参考转换的规则之一,可以将接口类型
K
分配给非参数化接口类型
J
,前提是
K
不是
J
的子类型(如果
K
J
的子类型,则不需要显式转换)

如果强制转换失败,则在运行时抛出ClassCastException

InputStream in = System.in;
Runnable r = (Runnable) in;
上述代码段之所以编译,是因为
InputStream
Runnable
都是非参数化接口,但在运行时会导致
ClassCastException


ServiceInterface
BindingProvider
的转换之所以有效,是因为
getPort
返回一个动态代理类,该类实现了
WSBindingProvider
接口,从而扩展了
BindingProvider
接口。

谢谢。我想这就像把一个整数转换成一个浮点?还是相反?不,兄弟。不是这样的。不能将
整数
强制转换为
浮点
,反之亦然,因为它们都是类类型。但是您可以将
浮点
整数
分配给
数字
,而无需任何强制转换,因为它们扩展了
数字
。此规范(即,由javax.xml.ws.Service#getPort方法返回的代理必须实现javax.xml.ws.BindingProvider接口)可以在JAX-WS规范的第4.2.3节中找到,目前可从下载。
BindingProvider bp = (BindingProvider) stub;
J j = (J) K;
InputStream in = System.in;
Runnable r = (Runnable) in;