0

我有一个用 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是如何判断权限namespaceURIlocalPart调用ws的?

4

1 回答 1

0

你有 WSDL 吗?

namespaceUri = /wsdl:definitions/@targetNamespace
localPort = /wsdl:definitions/wsdl:service/@name

如果您有 WSDL。为什么不简单地使用 wsimport 生成 SEI 类?您将看到生成的自动包含正确的 QName。

于 2016-04-08T10:44:57.433 回答