加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService之CXF与Spring的整合

发布时间:2020-12-16 23:22:19 所属栏目:安全 来源:网络整理
导读:首先准备下载apache-cxf-2.4.4,解压之后拷贝lib文件夹的jar包倒进工程。 下面第一个例子没有与Spring整合的例子,用代码发布WebService: package com.ws.demo2;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import

首先准备下载apache-cxf-2.4.4,解压之后拷贝lib文件夹的jar包倒进工程。

下面第一个例子没有与Spring整合的例子,用代码发布WebService:

package com.ws.demo2;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;

/**JAXWS:  Java AND XML WebService 就是我们昨天说支持WSDL SOAP的WS服务
 *      特点: 支持注解,支持日志,支持Spring管理
 *      但是到目前为止: 我们的服务并没有发布到Tomcat中而且没有交给Spring管理
 */
@WebService(
		name="MyWebService1",// 真正的服务类的名称,portName="MyWebServicePort1",// 端口名称
		serviceName="MyWebServiceService1",// 服务名,默认是MyWebService+Service
		targetNamespace="a.b.c"        // 指定解析存储类的包名 
	)
public class MyWebService {

	public @WebResult(name="result1") String showName(@WebParam(name="name1") String name){
		System.out.println("name:"+name);
		return "你好:"+name;
	}
	/**
	 * 在main方法中发布自己的WebService
	 * @param args
	 */
	public static void main(String[] args) {
		String address="http://127.0.0.1:8888/hello";
		//Endpoint.publish(address,new MyWebService());
		// JAXWS:  Java AND XML WebService 就是我们昨天说支持WSDL SOAP的WS服务
		ServerFactoryBean factoryBean=new JaxWsServerFactoryBean();
		factoryBean.setAddress(address);
		// 指定端点,服务的实现类
		factoryBean.setServiceBean(new MyWebService());
		//给WS服务配置日志
		factoryBean.getInInterceptors().add(new LoggingInInterceptor());
		factoryBean.getInInterceptors().add(new LoggingOutInterceptor());
		factoryBean.create();
		System.out.println(address+"?wsdl");
	}
}

下面是CXF与Spring整合的例子:

首先准备一个实体类Student:

package com.ws.demo3;

public class Student {

	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

服务接口StudentService:

package com.ws.demo3;


import java.util.List;


import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(
<span style="white-space:pre">		</span>name="StudentService",?// 真正的服务类的名称,<span style="white-space:pre">		</span>portName="StudentServiceSOAP",?// 端口名称
<span style="white-space:pre">		</span>serviceName="StudentServiceWS" ?// 服务名,默认是MyWebService+Service
)
public interface StudentService {


<span style="white-space:pre">	</span>public void save(@WebParam(name="student") Student student);
<span style="white-space:pre">	</span>public ?@WebResult(name="student") ?List<Student> getStudentList();
}

实现类StudentServiceImpl:

package com.ws.demo3;

import java.util.ArrayList;
import java.util.List;

public class StudentServiceImpl implements StudentService {
	//模拟存储数据
	List<Student> studentList=new ArrayList<Student>();
	public void save(Student student) {
		// TODO Auto-generated method stub
		studentList.add(student);
	}

	public List<Student> getStudentList() {
		// TODO Auto-generated method stub
		return studentList;
	}

}

applicationContext配置与CXF的整合:

<?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
	">
	<!-- 此bean可以提供项目本身调用 -->
	<bean id="studentService" class="com.ws.demo3.StudentServiceImpl"/>
	<!-- bean 发布成 WS服务    address: 可以访问此ws服务名称,如果指定了serviceClass:则把注解统一放到接口中,实现类的可以删除
	全地址是: http://localhost:8080/ws/student-->
	<jaxws:server serviceClass="com.ws.demo3.StudentService" address="/student">
		<!-- 引用在Spring中已经配置好Bean,那么此bean既可以被本地访问又是WS Bean -->
		<jaxws:serviceBean>
			<ref bean="studentService"/>
		</jaxws:serviceBean>
		<!-- 配置输入日志 -->
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
		</jaxws:inInterceptors>
		<!-- 配置输出日志 -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
		</jaxws:outInterceptors>
	</jaxws:server>
</beans>

启动tomcat,发布该WEB项目,在浏览器的地址栏中输入http://127.0.0.1:8080/ws/ws,数显服务列表:


如何在使用WebService服务已在上一篇介绍了使用wsimport命令来导出java类。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读