CXF的三种发布方式和客户端调用方法
先定义一个web service
@WebService(targetNamespace="http://www.itfad.net/queryUser") public interface IQueryUser { String query(@WebParam(name = "user") UserInfo user); }
实现类:
@WebService(endpointInterface="net.itfad.services.IQueryUser") public class QueryUserImpl implements IQueryUser { public String query(UserInfo user) { if (user == null) throw new IllegalArgumentException("参数user不能为null"); return "your name is " + user.getUserName(); } }
web service发布方式
第一种,使用jax-ws方式,非常简单
String url="http://localhost:8080/queryUser;
Endpoint.publish(url, new QueryUserImpl);
第二种,CXF方式
String url="http://localhost:8080/queryUser"; JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean(); factoryBean.setAddress(url); factoryBean.setServiceClass(IQueryUser.class); factoryBean.setServiceBean(new QueryUserImpl()); factoryBean.create()
第三种,CXF Simple FrontEnd方式
该方式无需在类中指定相关协议,也就是说不需要在类中指定相关webservice注解,一个普通类就行
ServerFactoryBean svrFactory = new ServerFactoryBean(); //设置服务接口类 svrFactory.setServiceClass(IQueryUser.class); svrFactory.setAddress("http://localhost:8080/queryUser"); //设置服务实现接口类 svrFactory.setServiceBean(QueryUserImpl); svrFactory.create();
客户端调用web service方法
首先要使用cxf的wsdl2java命令工具生成服务代理类,如:wsdl2java -p com.charles.client http://localhost:8080/queryUser?wsdl
具体命令格式可使用wsdl2java /?查看。生成后的代理类名是:服务实现类名+Service
方法一:使用标准的JAX-WS的API完成客户端调用
//注意。此处http:http://www.itfad.net/queryUser是服务的命名空间,可查看wsdl文件中的targetNamespace
QName qName = new QName("http://www.itfad.net/queryUser","QueryUserImplService");
QueryUserImplService ImplService =new QueryUserImplService(new URL("http://localhost:8080/CXFDemo/queryUser?wsdl"),qName);
IQueryUser service=(IQueryUser)ImplService.getPort(IQueryUser.class);
方法二:javax.xml.ws.Service
String endPointAddress = "http://localhost:8080/queryUser";//服务实际地址
//此处http://charles.com/为命名空间,默认是包名的倒序。IQueryUserService=服务接口名+service
javax.xml.ws.Service service = javax.xml.ws.Service.create(new QName("http://charles.com/","IQueryUserService"));
//IQueryUserPort=服务接口名+Port
service.addPort(new QName("http://charles.com/","IQueryUserPort"),javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, endPointAddress);
IQueryUser queryService1 =service.getPort(IQueryUser.class);
System.out.println(queryService1.query(user));
这里其实利用wsdl2java工具为我们生成类时已经包含了这种方法。比如我们的服务接口是IQueryUser,那么我们会发现生成的文件下有个IQueryUserService类
该类正是继承至javax.xml.ws.Service,并封装以上代码的功能,调用代码如下:
IQueryUserService queryUserService=new IQueryUserService();//默认构造函数里使用默认wsdl地址和服务的QName
IQueryUser queryService1 =queryUserService.getIQueryUserPort();//方法内部调用了super.getPort(IQueryUserPort, IQueryUser.class);
System.out.println(queryService1.query(user));
方法三:使用CXF中JaxWsProxyFactoryBean客户端代理工厂调用web服务
JaxWsProxyFactoryBean soapFactoryBean = newJaxWsProxyFactoryBean();
soapFactoryBean.setAddress("http://localhost:8080/queryUser");
soapFactoryBean.setServiceClass(IQueryUser.class);
Object o = soapFactoryBean.create();
IQueryUser service = (IQueryUser)o;
方法四:使用CXF的JaxWsDynamicClientFactory动态代理工厂
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("people.wsdl", classLoader);
Object person =Thread.currentThread().getContextClassLoader().loadClass("com.acme.Person").newInstance();
Method m = person.getClass().getMethod("setName", String.class);
m.invoke(person, "Joe Schmoe");
client.invoke("addPerson", person);
相关推荐
- 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...
本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...
在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始化和配置。而Apache CXF则是一个强大的...通过这种方式,你可以构建安全、可靠的Web服务,并在Spring Boot环境中轻松地进行客户端调用。
CXF 客户端调用提供了一种更稳定的方法,尤其是在调用 CXF 自身发布的服务时更为方便。 **调用示例:** - 使用 CXF 客户端调用或其他方式调用 ### 总结 以上介绍了 WebService 的四种常见发布方式及其客户端调用...
CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...
Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...
1.使用Java 2.用cxf开发webservice ...客户端也需要接口类文件和pojo,和cxf客户端xml 但是没有接口的实现类,就是为了去服务端来调用的。 具体有不懂可以问我 给我发消息, 劳烦评价 ,请大家支持原创 禁止转载
【WebService五种发布方式及客户端调用】 在IT行业中,WebService是一种基于标准的、平台无关的通信机制,用于不同系统间的数据交换。本篇主要讨论的是使用CXF和Axis2两种方式来发布WebService以及客户端如何调用...
用CXF作为客户端调用webService的demo:本人亲测可用,eclipse工程项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。
总结来说,"idea + spring4.3.7.RELEASE + cxf3.1.0"的整合项目涵盖了企业级Java应用开发的关键技术点:Spring框架的使用、Maven项目的构建、Apache CXF的Web服务发布和调用。通过对这些知识点的掌握,开发者可以更...
在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会通过服务接口类来实现。在给出的示例中,`TestService`接口定义了几个服务方法,如`...
这些JAR包组合在一起,为CXF客户端调用提供了完整的环境,包括XML解析、SOAP消息处理、加密安全、缓存优化、消息传递以及依赖管理等多个方面。在实际项目中,将这些JAR包放入项目的`lib`目录下,确保了所有必要的...
### CXF客户端调用Axis服务端流程详解 #### 一、概述 在现代软件开发过程中,Web服务(尤其是SOAP服务)被广泛应用于不同系统间的通信。Apache CXF是一款开源框架,支持开发和部署RESTful及SOAP web服务。而Apache...
1. **CXF客户端调用** CXF是一个开源的Java框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。对于客户端调用,CXF提供了一种基于接口的方式,这使得调用服务就像调用本地方法一样简单。 **服务接口定义:** ```...
通过这个整合项目,开发者可以学习到如何利用Spring 4进行服务端控制流的管理,使用CXF 3发布和消费Web服务,以及Maven 3如何帮助管理整个项目的构建流程。这将为开发者提供一个实际的平台,以实践和掌握这些技术的...
4. 发布服务:通过CXF的服务器组件(如Spring或Jetty),将服务部署到HTTP服务器上,使其可供客户端调用。 客户端开发则涉及调用服务端提供的Web服务: 1. 生成客户端代理:CXF提供了工具(如wsdl2java或JAXB)...
3. **调用服务**:一旦客户端准备好,就可以通过CXF客户端API来调用服务方法,传递必要的参数并接收响应。 Apache Camel 是一个强大的集成框架,它提供了一种声明式的方式来定义和路由消息流。camel-cxf是Camel的一...