`
zhaoruiqing
  • 浏览: 6141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

CXFSpring3例子

 
阅读更多

写一下关于CXF的例子,网上也有一些,综合了一下,以备忘首先是jar包的问题,这个问题我纠结了好几天,首先是jax等包的冲突问题,这个问题很多人都有解释,比如换1.6以上的jdk,或者通过

System.out.println(System.getProperty(“java.endorsed.dirs”)); 

 

其实就是得到对应的jdk路径,然后将jax 和jaxapi等冲突包扔进去。

不过在我开发过程中遇到无数次的提示,弄的我也挺郁闷,后来还是将项目路径下的jdk干掉才跑通,想了想估计是项目路径下的jdk优先权高?应该的吧。

以下是服务器端代码:

1、首先是 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>
	<listener>
		<listener-class>
		org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<servlet>
		 <display-name>CXF Servlet</display-name>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- CXFServlet Mapping -->
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 简单说就是配置了一个servlet去拦截请求

2、Spring 配置文件 application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://cxf.apache.org/jaxws 
     http://cxf.apache.org/schemas/jaxws.xsd">
<!--  命名空间-->


 <!-- Import Apache CXF Bean Definition -->
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<!--  基本的配置文件-->

<bean id="iSuimp" class="com.ws.cxf.imp.ISuimp">
		<property name="temp1" value="111"></property>
		<property name="temp2" value="444"></property>
</bean>

<!--2个参数无实际意义,就是为了测试注入用的 -->
	<jaxws:server id="iSuInterface" serviceClass="com.ws.cxf.ISuInterface" address="/ISuService">
		<jaxws:serviceBean>
			<ref bean="iSuimp"/>
		</jaxws:serviceBean>
	
	</jaxws:server>
<!-- 一个webservice选项,地址是xxxx/ISuService,因为是注入自然class为一个接口  wsdl不解释如何写-->
</beans>

 3、接口类

package com.ws.cxf;

import javax.jws.WebService;

@WebService
public interface ISuInterface {
	public String vote(String username);
}

 

就是写了一个注解而已

4、实现类

package com.ws.cxf.imp;

import javax.jws.WebService;

import com.ws.cxf.ISuInterface;
@WebService
public class ISuimp implements ISuInterface{
	private  String temp1;
	private  int  temp2;

	
	public String getTemp1() {
		return temp1;
	}


	public void setTemp1(String temp1) {
		this.temp1 = temp1;
	}


	public int getTemp2() {
		return temp2;
	}


	public void setTemp2(int temp2) {
		this.temp2 = temp2;
	}


	public String vote(String username) {
		return username.equals("1")?"相同":"不同";
	}

}

 

写变量的意思是为了测试能否注入如其他业务类才加入的。

以上为服务器端代码,重点在于application中的配置,引入的一些schema.

 

以下为客户端的代码:

为了提高通用性,毕竟我们不能保证每一家service提供jar包,见到网上很多都是用强制类型转换得到service对象的,觉得不太合适,所以还是采用了其他的方式(原理我还不甚理解),当然服务端与客户端在实际应用中应该属于不同项目,因此,还是需要将相应的jar包导入到客户端项目中,我当时想使用spring mvc来做一个客户端,可惜没弄成,总是jar包冲突,readwsdl时总是出错,看得出来也是版本冲突,不过那个我比较难解决,于是采用了servlet的方式来做。

web.xml只是一个servlet的拦截器(客户端xml应该与cxf无关,无需导入对应的schema)

 以下为客户端代码

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CxfServletClient extends HttpServlet{
	private static final long serialVersionUID = 1L;
	public void doPost(HttpServletRequest req, HttpServletResponse resp) {
		 JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); 

	        Client client = clientFactory.createClient("http://localhost:8000/CXF_Spring/ISuService?wsdl"); 

	        Object[] result;
			try {
				result = client.invoke("vote","1");
				 System.out.println(result[0]);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

	       
	}
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
}

 值得注意的是createClient("http://localhost:8000/CXF_Spring/ISuService?wsdl"); 这里要写的url为wsdl。。。可以用浏览器先测试一下能否出现wsdl再进行配置。

 

 

注:cxf也是使用soap协议,只能传递简单对象~~

分享到:
评论

相关推荐

    WebServiceDemo-CXFSpring

    【WebServiceDemo-CXFSpring】是一个使用Apache CXF框架结合Spring进行开发的Web服务示例。这个项目展示了如何通过Spring配置来发布和调用WebService。Apache CXF是一个开源的Java库,它允许开发者创建和消费各种Web...

    cxf_spring 相关 jar

    3. `cxf-rt-wsdl.jar`:CXF的WSDL处理模块,用于生成和解析WSDL文件。 4. `spring-beans.jar`:Spring框架的beans模块,包含DI和Bean定义的相关类。 5. `spring-context.jar`:Spring框架的上下文模块,提供了AOP、...

    CXF源码:CXF_Spring源码

    3. **服务发布与消费** 在Spring环境中,CXF服务可以通过以下方式发布: - 使用`@WebService`和`@EndpointImplementor`注解标记服务接口和实现,Spring会自动发现并发布服务。 - 通过XML配置,使用`...

    Spring整合CXF demo

    这个"Spring整合CXF demo"项目提供了一个直观的例子,帮助开发者理解如何在Spring环境中配置和使用CXF服务。 ### 1. Spring框架介绍 Spring是一个开源的Java平台,它提供了全面的应用程序开发框架,简化了Java EE...

    cxf一个入门实例,用最新的cxf2.2.4开发的

    2. **Spring集成**:项目中的"CXFSpring"可能指的是CXF与Spring框架的集成。Spring允许你管理对象(如CXF服务)的生命周期,并提供依赖注入,使得配置和测试更加简单。 3. **动态客户端**:CXF支持生成动态客户端...

    cxf+spring+web

    【压缩包子文件的文件名称列表】"cxfspring"可能是项目源代码或者配置文件的压缩包,解压后可能包含以下内容: 1. **源代码文件(.java)**: 包含CXF服务的实现,以及Spring配置文件。 2. **Spring配置文件(.xml)...

    cxf webservice demo

    3. **CXF_HELLO_ObjectSpringService**: 这个项目可能结合了CXF和Spring框架,展示了如何在Spring容器中配置和管理Web服务。Spring框架可以用来管理服务的生命周期,依赖注入,并提供事务管理等高级功能。 4. **CXF...

    利用spring security 给cxf的业务方法添加保护

    3. **授权配置**:在授权方面,Spring Security允许我们使用表达式语言(如`hasRole`、`hasPermission`等)定义访问控制规则。在`http.authorizeRequests()`方法内,我们可以设置哪些URL路径需要特定角色的权限。 4...

    CXF2.6 spring 提供rest服务输出xml或json等格式数据

    在这个例子中,`@Path`注解定义了服务的URL路径,`@GET`表示这是一个GET请求,`@Produces`指定了可以返回的媒体类型(XML和JSON)。在实现类中,你需要创建一个Person对象并转换为XML或JSON格式。CXF会自动处理这些...

Global site tag (gtag.js) - Google Analytics