`

cxf在spring环境下 做到不依赖spring发布webservice

 
阅读更多

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());

 

分享到:
评论

相关推荐

    WebService的CXF整合Spring

    2. **配置Spring**:创建一个Spring配置文件(如`cxf-servlet.xml`),在这个文件中定义CXF的服务发布和消费者配置。你可以使用Spring的`jaxws:endpoint`或`jaxrs:server`标签来声明服务端点,`jaxws:client`或`jax...

    cxf+spring实现webservice

    在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...

    CXF+Spring+Tomcat发布WebService

    【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...

    CXF和Spring搭建webservice代码

    在Spring框架中集成CXF,我们可以利用Spring的依赖注入和配置管理优势,使得Web服务的开发和维护变得更加简洁。以下是一个基本的步骤概述: 1. **创建Spring配置文件**: 首先,我们需要在Spring的配置文件(如`...

    Apache CXF2+Spring2.5轻松实现WebService

    完成这些配置后,只需启动Spring容器,Apache CXF就会自动发布Web服务,并处理来自客户端的请求。客户端可以通过WSDL文档来发现和调用服务。 在实际项目中,可能还需要处理安全、事务、异常处理等问题。Apache CXF...

    cxf+spring发布webservice和restservice

    本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...

    cxf+spring webservice demo client

    【标题】:“cxf+spring webservice demo client” 在IT领域,Web服务是一种常见的系统间交互方式,它允许不同应用程序之间共享数据和服务。本示例是关于如何使用Apache CXF和Spring框架创建一个Web服务客户端的...

    webservice cxf 整合spring例子源代码

    4. **发布Web服务**:在Spring配置完成后,可以通过Spring启动CXF的Bus,使Web服务自动发布到指定的地址。这通常通过`&lt;jaxws:endpoint&gt;`标签的`address`属性完成。 5. **客户端调用**:在Spring环境中,也可以方便...

    Spring+CXF 发布WebService服务

    1. **配置Spring上下文**:首先,我们需要创建一个Spring配置文件,例如`spring-cxf.xml`,在这个文件中,我们会定义CXF的bean,如`JaxWsServerFactoryBean`,用于创建和发布WebService服务。 2. **定义WebService...

    spring+CXF实现WebService(http+https)

    通过Spring的ApplicationContext配置,我们可以管理CXF服务的生命周期,实现服务的发布和消费。 2. **创建WebService**: 使用CXF,首先需要定义服务接口,通常是一个Java接口,然后提供其实现。Spring会自动扫描...

    webservice-cxf-spring-jar.zip

    【压缩包子文件的文件名称列表】:尽管未提供具体的文件名,但通常情况下,"webservice-cxf-spring-jar"这样的命名可能包含CXF的核心库(如cxf-api.jar、cxf-rt-frontend-jaxws.jar、cxf-rt-transports-http.jar等)...

    cxf与spring发布WebService

    5. **发布WebService**:在Spring中,可以使用`&lt;jaxws:endpoint&gt;`标签来配置并发布CXF服务,该标签包含了服务的实现类、地址、绑定等信息。通过Spring的ApplicationContext,服务会被自动加载并启动。 6. **消费...

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...

    CXF2.7+Spring3 Java WebService 集成用例

    在本文中,我们将深入探讨如何将Apache CXF 2.7与Spring 3框架集成,以便在Java环境中创建和消费Web服务。这是一个重要的技术组合,因为它允许开发人员利用Spring的依赖注入和管理能力,以及CXF的强大Web服务支持。...

    webservice cxf+spring maven项目

    在CXF和Spring的结合下,创建Web服务主要涉及以下步骤: 1. 定义服务接口:使用Java接口定义Web服务的方法。 2. 创建服务实现:实现服务接口,包含实际的业务逻辑。 3. 配置CXF和Spring:在Spring配置文件中,声明...

    webservice(cxf)与spring整合源码+文档

    3. "ws_1231_cxf_spring_client":对应的客户端项目,展示了如何在Spring环境中创建Web服务客户端,调用由CXF提供的服务。这将涵盖如何设置客户端代理、发送请求和处理返回结果。 通过这些资料,学习者可以深入理解...

    webservice CXF结合Spring所需jar包

    3. **cxf-rt-transports-http-jetty.jar**: 如果你打算在本地运行Web服务,这个jar包提供了Jetty服务器的支持,可以在不依赖其他Web容器的情况下运行CXF服务。 4. **spring-beans.jar**: Spring的核心库,包含了...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    部署WebService服务(cxf,spring)

    Spring与CXF的集成使得开发者可以方便地在Spring环境中创建和管理Web服务。 要部署一个基于CXF和Spring的WebService服务,你需要遵循以下步骤: 1. **环境准备**:确保安装了Java Development Kit (JDK) 和Apache ...

    CXF+Spring+Hibernate实现WebService

    **WebService实现**:在CXF的帮助下,我们可以通过以下步骤实现一个WebService: 1. **定义服务接口**:首先,我们需要定义一个Java接口,包含要暴露给客户端的方法。 2. **创建服务实现**:然后,实现该接口,具体...

Global site tag (gtag.js) - Google Analytics