cxf是创建bus的时候会去jar包的META-INF目录下寻找org.apache.cxf.bus.factory这个文件
这个文件的内容是
org.apache.cxf.bus.spring.SpringBusFactory
org.springframework.context.ApplicationContext
当你的环境是spring的换件 而且classpath下他找到了
org.apache.cxf.bus.spring.SpringBusFactory
org.springframework.context.ApplicationContext这2个类 ,随后他会去调用SpringBusFactory这个类,
这个类他引用了spring的jar中的beans类 如果你的spring版本和他所引入的不一致,那么就会导致 classnotfoundexception,大多数情况 我们不可能为了引入一个cxf而改变公司原有的spring版本结构,而我遇到的问题是对方公司的webservce要求用cxf2.4版本(那里要求的是spring3.0而这个系统比较老是spring1的),因此换了一种方式调用
JaxWsProxyFactoryBean proxyFactory =new JaxWsProxyFactoryBean();
使用JaxWsProxyFactoryBean 的setBus方法
调用busfactory产生cxf自带cxfbusfactory的实例
proxyFactory.setBus(BusFactory.newInstance(BusFactory.DEFAULT_BUS_FACTORY).createBus());
ok 问题解决了 希望对后来人有点帮助
接下来提供一个实例 (我这边spring1.0环境+cxf独立发布webservice)
1.写接口
目录结构
package
hello
HelloService.java
HelloServiceImpl.java
User.java
接下来上代码
HelloService
package hello; import java.util.List; import javax.jws.WebService; @WebService public interface HelloService { public List<User> say(); public String show(); }
HelloServiceImpl
package hello; import java.util.ArrayList; import java.util.List; import javax.jws.WebService; @WebService public class HelloServiceImpl implements HelloService{ @Override public List<User> say(){ List<User> list = new ArrayList<User>(); list.add(new User("user1id","user1name")); return list; } @Override public String show() { return "hello"; } }
User
package hello; import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 4143304866886285361L; public User(){ } public User(String id,String name){ this.id=id; this.name=name; } private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.创建服务
//创建WebService服务工厂
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//注册WebService接口
factory.setServiceClass(HelloServiceImpl.class);
//这里有个误区
//这句话不能加,加了可能会认为是跟spring关联的 最终导致客户端访问时出现 反射出错
//Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: object is
//not an instance of declaring class while invoking public java.util.List
//hello.HelloServiceImpl.say() with params [].
//factory.setServiceBean(HelloServiceImpl.class)
//调用默认的busfactory
factory.setBus(BusFactory.newInstance(BusFactory.DEFAULT_BUS_FACTORY).createBus());
//发布接口
factory.setAddress("http://192.168.0.21:9000/HelloService");
//下面可以添加各种拦截器
//factory.getInInterceptors().add();
//factory.getInFaultInterceptors().add();
//factory.getOutInterceptors().add();
//创建WebService
factory.create();
3.创建客户端
String address ="http://192.168.0.21:9000/HelloService";
JaxWsProxyFactoryBean proxyFactory =new JaxWsProxyFactoryBean();
proxyFactory.setAddress(address);
//若客户端也带有springjar包而且是1版本的 那么客户端也要加这句话 调用默认的busfactory,否则不用加这句
// proxyFactory.setBus(BusFactory.newInstance(BusFactory.DEFAULT_BUS_FACTORY).createBus());
proxyFactory.setServiceClass(HelloService.class);
HelloService service = (HelloService) proxyFactory.create();
System.out.println(service.say().get(0).getName());
相关推荐
2. **配置Spring**:创建一个Spring配置文件(如`cxf-servlet.xml`),在这个文件中定义CXF的服务发布和消费者配置。你可以使用Spring的`jaxws:endpoint`或`jaxrs:server`标签来声明服务端点,`jaxws:client`或`jax...
在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...
【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...
在Spring框架中集成CXF,我们可以利用Spring的依赖注入和配置管理优势,使得Web服务的开发和维护变得更加简洁。以下是一个基本的步骤概述: 1. **创建Spring配置文件**: 首先,我们需要在Spring的配置文件(如`...
完成这些配置后,只需启动Spring容器,Apache CXF就会自动发布Web服务,并处理来自客户端的请求。客户端可以通过WSDL文档来发现和调用服务。 在实际项目中,可能还需要处理安全、事务、异常处理等问题。Apache CXF...
本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...
【标题】:“cxf+spring webservice demo client” 在IT领域,Web服务是一种常见的系统间交互方式,它允许不同应用程序之间共享数据和服务。本示例是关于如何使用Apache CXF和Spring框架创建一个Web服务客户端的...
4. **发布Web服务**:在Spring配置完成后,可以通过Spring启动CXF的Bus,使Web服务自动发布到指定的地址。这通常通过`<jaxws:endpoint>`标签的`address`属性完成。 5. **客户端调用**:在Spring环境中,也可以方便...
1. **配置Spring上下文**:首先,我们需要创建一个Spring配置文件,例如`spring-cxf.xml`,在这个文件中,我们会定义CXF的bean,如`JaxWsServerFactoryBean`,用于创建和发布WebService服务。 2. **定义WebService...
通过Spring的ApplicationContext配置,我们可以管理CXF服务的生命周期,实现服务的发布和消费。 2. **创建WebService**: 使用CXF,首先需要定义服务接口,通常是一个Java接口,然后提供其实现。Spring会自动扫描...
【压缩包子文件的文件名称列表】:尽管未提供具体的文件名,但通常情况下,"webservice-cxf-spring-jar"这样的命名可能包含CXF的核心库(如cxf-api.jar、cxf-rt-frontend-jaxws.jar、cxf-rt-transports-http.jar等)...
5. **发布WebService**:在Spring中,可以使用`<jaxws:endpoint>`标签来配置并发布CXF服务,该标签包含了服务的实现类、地址、绑定等信息。通过Spring的ApplicationContext,服务会被自动加载并启动。 6. **消费...
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
在本文中,我们将深入探讨如何将Apache CXF 2.7与Spring 3框架集成,以便在Java环境中创建和消费Web服务。这是一个重要的技术组合,因为它允许开发人员利用Spring的依赖注入和管理能力,以及CXF的强大Web服务支持。...
在CXF和Spring的结合下,创建Web服务主要涉及以下步骤: 1. 定义服务接口:使用Java接口定义Web服务的方法。 2. 创建服务实现:实现服务接口,包含实际的业务逻辑。 3. 配置CXF和Spring:在Spring配置文件中,声明...
3. "ws_1231_cxf_spring_client":对应的客户端项目,展示了如何在Spring环境中创建Web服务客户端,调用由CXF提供的服务。这将涵盖如何设置客户端代理、发送请求和处理返回结果。 通过这些资料,学习者可以深入理解...
3. **cxf-rt-transports-http-jetty.jar**: 如果你打算在本地运行Web服务,这个jar包提供了Jetty服务器的支持,可以在不依赖其他Web容器的情况下运行CXF服务。 4. **spring-beans.jar**: Spring的核心库,包含了...
在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...
Spring与CXF的集成使得开发者可以方便地在Spring环境中创建和管理Web服务。 要部署一个基于CXF和Spring的WebService服务,你需要遵循以下步骤: 1. **环境准备**:确保安装了Java Development Kit (JDK) 和Apache ...
**WebService实现**:在CXF的帮助下,我们可以通过以下步骤实现一个WebService: 1. **定义服务接口**:首先,我们需要定义一个Java接口,包含要暴露给客户端的方法。 2. **创建服务实现**:然后,实现该接口,具体...