我有一个用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如何找出正确的namespaceURI
和localPart
来调用ws?
答案 0 :(得分:0)
你有WSDL吗?
namespaceUri = /wsdl:definitions/@targetNamespace
localPort = /wsdl:definitions/wsdl:service/@name
如果您有WSDL。为什么不使用wsimport简单地生成SEI类?您将看到生成的内容自动包含正确的QName。