将使用“简单前端”的CXF客户端迁移到JAX-WS

时间:2016-04-07 03:35:42

标签: web-services cxf jax-ws cxf-client

我有一个用Apache CXF编写的Web服务客户端,它使用simple frontend样式。它可以动态调用远程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文档说:

  

在“简单”的情况下,简单前端中发生的事情与JAX-WS中几乎完全相同。

我的第一个问题是QName构造函数:

QName(java.lang.String namespaceURI, java.lang.String localPart) 

CXF如何找出正确的namespaceURIlocalPart来调用ws?

1 个答案:

答案 0 :(得分:0)

你有WSDL吗?

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

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