JAX WSclient向bindingprovider强制转换存根
在编写JAXWS客户端时,我过去使用过以下方法: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
// 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;