Spring中使用WebService

Server端和Client端的Web工程截图:

Server代码:

package com.wiseweb.bean;

public class Order {

	private int id ;
	private String name ;
	private double price ;

	public Order() {
		super();
	}

	public Order(int id, String name, double price) {
		super();
		this.id = id;
		this.name = name;
		this.price = price;
	}

	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;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Order [id=" + id + ", name=" + name + ", price=" + price + "]";
	}

}
package com.wiseweb.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

import com.wiseweb.bean.Order;

@WebService
public interface OrderProcess {
	@WebMethod
	Order getMessById(int id) ;
}
package com.wiseweb.ws;

import com.wiseweb.bean.Order;

public class OrderProcessImpl implements OrderProcess {

	public OrderProcessImpl() {
		System.out.println("OrderProcessImpl()");
	}

	@Override
	public Order getMessById(int id) {
		System.out.println("server :" + id);
		return new Order(id,"飞机",100000);
	}

}
package com.wiseweb.ws.interceptor;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Element;

public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage>{

	public CheckUserInterceptor() {
		super(Phase.PRE_PROTOCOL);
		System.out.println("CheckUserInterceptor.CheckUserInterceptor()");
	}

	@Override
	public void handleMessage(SoapMessage message) throws Fault {
		Header header = message.getHeader(new QName("wiseweb")) ;
		if(header != null) {
			Element element = (Element)header.getObject() ;
			String username = element.getElementsByTagName("username").item(0).getTextContent() ;
			String password = element.getElementsByTagName("password").item(0).getTextContent() ;
			if(username.equals("wuhaixu") && password.equals("123456")) {
				System.out.println("用户名与密码正确,通过验证!");
				return ;
			}else {
				throw new Fault(new RuntimeException("请输入正确的用户名和密码!")) ;
			}
		}else {
			throw new Fault(new RuntimeException("请输入用户名和密码!")) ;
		}
	}

}

beans.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:jaxws="http://cxf.apache.org/jaxws"
      xsi:schemaLocation="
   	http://www.springframework.org/schema/beans
  	 http://www.springframework.org/schema/beans/spring-beans.xsd
  	 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

      <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" />

      <jaxws:endpoint
        id="orderProcess"
        implementor="com.wiseweb.ws.OrderProcessImpl"
        address="/orderprocess">
        <jaxws:inInterceptors>
        	<bean class="com.wiseweb.ws.interceptor.CheckUserInterceptor">
        	</bean>
        </jaxws:inInterceptors>
      </jaxws:endpoint>
</beans>

Client:

package com.wiseweb.ws.interceptor;

import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage>{

	private String username ;
	private String password ;

	public AddUserInterceptor(String username, String password) {
		super(Phase.PRE_PROTOCOL);
		this.username = username ;
		this.password = password ;
		System.out.println("AddUserInterceptor()...");
	}

	@Override
	public void handleMessage(SoapMessage message) throws Fault {
		List<Header> headers = message.getHeaders() ;

		DocumentBuilder builder = null ;
		try {
			builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		Document document = builder.newDocument() ;
		Element root = document.createElement("wiseweb") ;
		Element username = document.createElement("username") ;
		username.setTextContent(this.username);
		Element password = document.createElement("password") ;
		password.setTextContent(this.password);
		root.appendChild(username) ;
		root.appendChild(password) ;
		headers.add(new Header(new QName("wiseweb"), root)) ;
	}

}
package com.wiseweb.ws.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wiseweb.ws.Order;
import com.wiseweb.ws.OrderProcess;

public class ClientTest {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]
		                     {"client-beans.xml"});
		OrderProcess orderProcess = (OrderProcess)context.getBean("orderClient") ;
		Order order = orderProcess.getMessById(230) ;
		System.out.println(order);
	}
}

Client-beans.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:jaxws="http://cxf.apache.org/jaxws"
      xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

   	<jaxws:client id="orderClient"
   		serviceClass="com.wiseweb.ws.OrderProcess"
   		address="http://localhost:8087/day02_ws_cxf_spring/orderprocess">
   		<jaxws:outInterceptors>
   			<bean class="com.wiseweb.ws.interceptor.AddUserInterceptor">
   				<constructor-arg name="username" value="wuhaixu" />
   				<constructor-arg name="password" value="1234567" />
   			</bean>
   		</jaxws:outInterceptors>
	</jaxws:client>
</beans>

把Server端的项目部署并运行,运行Client端。结果为:

Server:

用户名与密码正确,通过验证!
server :230

Client:

AddUserInterceptor()...
Order [id=230, name=飞机, price=100000.0]
时间: 2024-10-14 06:03:10

Spring中使用WebService的相关文章

在spring中使用webservice(Restful风格)

我们一般都会用webservice来做远程调用,大概有两种方式,其中一种方式rest风格的简单明了. 记录下来作为笔记: 开发服务端: 具体的语法就不讲什么了,这个网上太多了,而且只要看一下代码基本上都懂,下面是直接贴代码: package com.web.webservice.rs; import java.util.Iterator; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import

java web项目(spring项目)中集成webservice ,实现对外开放接口

什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring兼容性较好的cxf来实现 cxf 的  jar下载地址: http://cxf.apache.org/download.html 选择zip格式下载,解压后的lib目录下的jar 需要最少的jar如下: cxf-2.3.3.jargeronimo-annotation_1.0_spec-1.1.1.

在java web项目中集成webservice

公司要求在项目中加入webservice服务,因为项目中使用了spring框架,所以在这里使用与spring兼容性较好的cxf来实现 cxf所需jar包 spring的jar包就不贴了 一:创建webservice服务器 1)创建一个服务接口 package com.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IHelloWorld { public S

spring+resteasy开发webservice服务

有一段时间没有更新博客,主要是最近一段时间自己比较迷茫,一直在思考自己以后的路该怎么走.希望大家也可以给我一些建议,谢谢!好了,回归正题,今天给大家带来的是spring+resteay开发webservice服务,不知道大家是否在这之前接触过webservice,我之前所了解的webservice是使用cxf还有axis2开发的,但是我觉得实现起来比较麻烦,而且不灵活,今天给大家介绍一种比较灵活的提供webservice服务的技术:resteasy.下面我重点讲解的resteasy常用的一些知识

cxf+spring+数字签名开发webservice(二)

场景         上一章中的webservice接口,因为现场正式环境的项目与外部单位网络不通,是通过前置机与外部进行数据交换,所以我们将webservice部署在前置机,在使用HttpURLConnection与正式服务器上进行数       据传递.这里可以使用的技术挺多的,如:java的rmi,Hessian,spring的HttpInvoker等,下面是使用HttpURLConnection的代码(实际情况是最后选择了spring的HttpInvoker): HttpURLConne

SCA与spring集成(在spring中开发SOA)

客户端调用与Tuscany SCA相同 服务端的配置如下: sca.composite <?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://myWebServer"name="myWebService">

Spring中文文档-第一部分

一. Spring 框架概述 Spring是为了构建企业应用的轻量级框架.然而,Spring是模块化的,允许你只是使用其中的一部分,不需要引入其他的.你可以在任何web框架上使用IoC容器,也可以只使用Hibernate集成代码或JDBC抽象层.Spring框架支持声明式事务管理.通过RMI远程访问.WebService和持久化数据.它还提供全功能的MVC框架,和将AOP应用到你的系统上. Spring设计为非侵入式的,意味着你的逻辑代码不依赖与框架本身. 1. 开始使用Spring 学习Spr

你真的了解JAVA中与Webservice相关的规范和实现吗?

非常多人在项目中使用Webservice,仅仅是知道怎样公布Webservice,怎样调用Webservice,但真要论其来龙去脉,还真不一定清楚. 一切一切还要从我们伟大的sun公司规范说起. JAVA 中共同拥有三种WebService 规范,各自是JAXM&SAAJ.JAX-WS(JAX-RPC).JAX-RS. 以下来分别简要的介绍一下这三个规范.针对JDK 1.6以下版本号,新的还没研究过 (1.)JAX-WS: JAX-WS(Java API For XML-WebService),

cxf整合到spring中

项目中一般都是通过spring来进行管理,因此,绝大多数框架最终都将整合的spring中,cxf也不例外. 下面就讲解如何配置cxf,将其整合到spring中.(例子中web项目通过maven来进行管理,建立的mav项目为WebService_CXF) 一.pom.xml文件添加依赖jar包 1)添加spring支持     2)添加cxf支持 配置如下: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi