CXF接口服务端开发

来源:互联网 发布:24周胎儿四维彩超数据 编辑:程序博客网 时间:2024/06/06 02:52

spring配置文件

<?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:context="http://www.springframework.org/schema/context"       xmlns:jaxws="http://cxf.apache.org/jaxws"       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"       default-lazy-init="false" default-autowire="byName">    <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="pscCapacityWebService" class="com.jd.lms.ws.impl.PscSoapWebServiceImpl"/>        <bean id="logIn" class="org.apache.cxf.interceptor.LoggingInInterceptor" />    <bean id="logOut" class="org.apache.cxf.interceptor.LoggingOutInterceptor" />            <jaxws:server id="pscSoap" serviceClass="com.jd.lms.ws.PscSoapWebService" address="/pscCapacity">    <jaxws:serviceBean>        <!-- 要暴露的 bean 的引用 -->        <ref bean="pscCapacityWebService"/>    </jaxws:serviceBean>    <jaxws:inInterceptors>            <ref bean="logIn"/>            <bean class="com.jd.lms.ws.intercepter.CheckSOAPHeaderIntercepter"><property name="authHeader"><bean class="com.jd.common.ws.AuthHeader">  <property name="key" value="AuthenticationHeader" />   <property name="qName" value="http://lms.jd.com/" />   <property name="content" value="123456" />   <property name="seed" value="123456" />  </bean> </property></bean>        </jaxws:inInterceptors>        <jaxws:outInterceptors>            <ref bean="logOut"/>        </jaxws:outInterceptors></jaxws:server></beans>

提供服务的接口

package com.jd.lms.ws;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import com.jd.lms.domain.psc.webservice.PscCapacityWsParam;import com.jd.lms.domain.psc.webservice.PscCapacityWsResult;@WebService@SOAPBinding(style = Style.RPC)public interface PscSoapWebService {public PscCapacityWsResult queryArrangeNumByDate(@WebParam(name = "pscCapacityWsParam") PscCapacityWsParam pscCapacityWsParam);}

接口实现类

package com.jd.lms.ws.impl;import javax.annotation.Resource;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.jd.lms.domain.psc.webservice.PscCapacityWsParam;import com.jd.lms.domain.psc.webservice.PscCapacityWsResult;import com.jd.lms.service.psc.PscCapacityService;import com.jd.lms.ws.PscSoapWebService;@WebService@SOAPBinding(style = Style.RPC)public class PscSoapWebServiceImpl implements PscSoapWebService{private static final Log log = LogFactory.getLog(PscSoapWebServiceImpl.class);private static final String QUERYBOOKNUMBYTIME_START="queryBookNumByTime开始";private static final String QUERYBOOKNUMBYTIME_END="queryBookNumByTime结束";@Resourceprivate PscCapacityService pscCapacityService;/** 根据天,时间段获取预约量 * 2013-6-6 * @param pscCapacityWsParam * @return */public PscCapacityWsResult queryArrangeNumByDate(@WebParam(name = "pscCapacityWsParam") PscCapacityWsParam pscCapacityWsParam){log.info(QUERYBOOKNUMBYTIME_START);PscCapacityWsResult result = new PscCapacityWsResult();try {if(null==pscCapacityWsParam.getDeliverCenterId()||null==pscCapacityWsParam.getBranchId()||null==pscCapacityWsParam.getWareHouseId()||null==pscCapacityWsParam.getArrangeDate()||null==pscCapacityWsParam.getActivityCode()){result.setResultCode(2);}else{result = pscCapacityService.queryArrangeInfo(pscCapacityWsParam);if(result.equals(null)){result.setResultCode(0);}else{//成功返回1result.setResultCode(1);}}} catch (Exception ex) {log.error(ex.getMessage(), ex);result.setResultCode(0);}log.info(QUERYBOOKNUMBYTIME_END);return result;}}

安全验证拦截器

package com.jd.lms.ws.intercepter;import javax.xml.namespace.QName;import org.apache.commons.lang.StringUtils;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.apache.log4j.Logger;import org.w3c.dom.Element;import com.jd.common.ws.AuthHeader;public class CheckSOAPHeaderIntercepter extends AbstractPhaseInterceptor<SoapMessage> {private Logger logger = Logger.getLogger(getClass());private AuthHeader authHeader;public CheckSOAPHeaderIntercepter() {super(Phase.PRE_PROTOCOL);getAfter().add(SAAJInInterceptor.class.getName());}public void handleMessage(SoapMessage message) throws Fault {if (authHeader == null) {throw new IllegalArgumentException("authHeader must set!");}org.apache.cxf.binding.soap.SoapHeader soapHeader = (org.apache.cxf.binding.soap.SoapHeader) message.getHeader(new QName(authHeader.getqName(), authHeader.getKey()));if (soapHeader == null) {throw new IllegalArgumentException("Token null! ");}Element ei = (Element) soapHeader.getObject();String token = null;try {org.w3c.dom.Node node = ei.getFirstChild().getFirstChild();if (node != null) {token = node.getTextContent();} else {token = "";}} catch (Exception e) {logger.error("token:" + token);throw new IllegalArgumentException("Token wrong! ");}boolean b = checkTokenValue(token);if (!b) {throw new IllegalArgumentException("Token wrong! ");}}private boolean checkTokenValue(String token) {String tmp = authHeader.getTokenValue();if (StringUtils.isEmpty(tmp)) {return true;}if (StringUtils.isEmpty(token)) {return false;}return tmp.equals(token);}public void setAuthHeader(AuthHeader authHeader) {this.authHeader = authHeader;}}


客户端调用测试类


package com.jd.common.ws;import org.apache.cxf.binding.soap.SoapHeader;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;import javax.xml.namespace.QName;import java.util.List;/** * token��֤ * User: sunbingwei * Date: 2010-5-22 * Time: 18:01:15 */public class SOAPHeaderIntercepter extends AbstractSoapInterceptor {    private AuthHeader authHeader;    public SOAPHeaderIntercepter(){super(Phase.WRITE);}    public void handleMessage(SoapMessage soapMessage) throws Fault {        List headers=soapMessage.getHeaders();headers.add(getHeader());    }    private Object getHeader() {QName qName=new QName(authHeader.getqName(), authHeader.getKey(), "");Document document= DOMUtils.createDocument();Element element=document.createElementNS(authHeader.getqName(), authHeader.getKey());Element token = document.createElement(authHeader.getToken());token.setTextContent(authHeader.getTokenValue());element.appendChild(token);SoapHeader header=new SoapHeader(qName, element);return(header);}    public AuthHeader getAuthHeader() {        return authHeader;    }    public void setAuthHeader(AuthHeader authHeader) {        this.authHeader = authHeader;    }}

package com.jd.common.ws;import org.apache.commons.codec.binary.Base64;import org.apache.commons.lang.StringUtils;/** * jd token��֤head��ɷ�ʽ * User: sunbingwei * Date: 2010-5-22 * Time: 18:23:18 */public class AuthHeader {    private final static String QNAME ="http://www.360buy.com/";     private String KEY = "AuthenticationHeader";    private String TOKEN = "Token";    private  String qName ;    private String key ;    private String token ;    private String content;    private String seed;    public AuthHeader(){}    public String getTokenValue(){        if(StringUtils.isNotEmpty( content )) {            if(StringUtils.isNotEmpty(seed)){                byte[] bb = MD5Util.md5( content + "-" + seed );                return new String(Base64.encodeBase64(bb));            } else {                return content;            }        }        return "";    }    public String getqName() {        if( StringUtils.isEmpty(qName) ){            qName = QNAME;        }        return qName;    }    public void setqName(String qName) {        this.qName = qName;    }    public String getKey() {        if( StringUtils.isEmpty(key) ){            key = KEY;        }        return key;    }    public void setKey(String key) {        this.key = key;    }    public String getToken() {        if( StringUtils.isEmpty(token) ){            token = TOKEN;        }        return token;    }    public void setToken(String token) {        this.token = token;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    public String getSeed() {        return seed;    }    public void setSeed(String seed) {        this.seed = seed;    }}


package com.jd.lms.test.psc;import java.util.ArrayList;import java.util.List;import javax.xml.ws.handler.Handler;import org.apache.cxf.interceptor.Interceptor;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.apache.cxf.message.Message;import com.jd.common.ws.AuthHeader;import com.jd.common.ws.SOAPHeaderIntercepter;import com.jd.lms.rpc.generated.psc.PscCapacityWsParam;import com.jd.lms.rpc.generated.psc.PscCapacityWsResult;import com.jd.lms.rpc.generated.psc.PscSoapWebService;import com.jd.lms.ws.intercepter.CheckSOAPHeaderIntercepter;public class TestPsc {public static void main(String[] args) {        //调用WebServiceSOAPHeaderIntercepter ci = new SOAPHeaderIntercepter();        AuthHeader authHeader = new AuthHeader();        authHeader.setContent("123456");        authHeader.setKey("AuthenticationHeader");        authHeader.setqName("http://lms.jd.com/");        authHeader.setSeed("123456");        ci.setAuthHeader(authHeader);JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();        factory.setServiceClass(PscSoapWebService.class);        factory.setAddress("http://ws.lms.jd.com/services/pscCapacity");        List<Interceptor<? extends Message>> interceptors = new ArrayList();        interceptors.add(ci);        factory.setOutInterceptors(interceptors);        factory.setInInterceptors(interceptors);                        PscSoapWebService service = (PscSoapWebService) factory.create();                System.out.println("#############Client getUserByName##############");        PscCapacityWsParam pscCapacityWsParam = new PscCapacityWsParam();        pscCapacityWsParam.setBranchId(611);        pscCapacityWsParam.setDeliverCenterId(9);        pscCapacityWsParam.setWareHouseId(5);        pscCapacityWsParam.setArrangeDate("2013-06-20");        pscCapacityWsParam.setActivityCode("PCORDER");                PscCapacityWsResult result=service.queryArrangeNumByDate(pscCapacityWsParam);        System.out.print(result.getResultCode());        System.out.print(result.getActivityCode());                    }}
	
				
		
原创粉丝点击