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("请输入用户名和密码!")) ;
}
}
}
<?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>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);
}
}
<?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:
用户名与密码正确,通过验证! server :230
Client:
AddUserInterceptor()... Order [id=230, name=飞机, price=100000.0]
原文:http://blog.csdn.net/benjamin_whx/article/details/44035799