Spring中使用WebService

来源:互联网 发布:html2canvas.js api 编辑:程序博客网 时间:2024/06/09 14:20

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;}@Overridepublic 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;@WebServicepublic interface OrderProcess {@WebMethodOrder getMessById(int id) ;}

package com.wiseweb.ws;import com.wiseweb.bean.Order;public class OrderProcessImpl implements OrderProcess {public OrderProcessImpl() {System.out.println("OrderProcessImpl()");}@Overridepublic 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()");}@Overridepublic 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()...");}@Overridepublic 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]


0 0