我有一个用 Apache CXF 编写的 Web 服务客户端,它使用简单的前端样式。它可以动态调用远程 Web 服务上的方法,给定它的位置和服务实现的接口。
public static void callWsMethod(Class<?> serviceInterface, String address, String methodName,...) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(serviceInterface);
factory.setAddress(address);
Object instance = factory.create();
... /*invoke method "methodName" on instance */
我想将此代码迁移到纯 JAX-WS 实现。我的代码应该类似于:
public static void callWsMethod(Class<?> serviceInterface, String address, String methodName,...) {
URL wsdlLocation = new URL(address + "?wsdl");
QName serviceName = new QName( .... , ....); //??? what goes here
Service service = Service.create(wsdlLocation, serviceName);
Object instance = service.getPort(serviceInterface);
... /*invoke method "methodName" on instance */
我怀疑这是可能的,因为上面引用的 CXF 文档说:
在“简单”的情况下,Simple 前端中发生的事情与 JAX-WS 中几乎相同。
我的第一个问题是QName构造函数:
QName(java.lang.String namespaceURI, java.lang.String localPart)
CXF是如何判断权限namespaceURI
并localPart
调用ws的?