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()); }}
- CXF接口服务端开发
- 运用CXF开发webService接口服务端和客户端
- 基于CXF框架下的SOAP Webservice服务端接口开发
- CXF WebService 服务端开发
- webservice+cxf接口开发
- CXF开发WebServices接口
- cxf框架webService接口服务端详细配置
- 使用Apache CXF开发WebServices服务端
- CXF 在Spring中开发服务端步骤
- CXF学习01---开发服务端与客户端
- 使用CXF 开发SOAP webservice 服务端实例
- CXF开发服务端(Server)和客户端(Client)
- cxf开发webservice服务端和客户端
- webservice结合CXF服务端及客户端开发
- CXF-01:使用CXF开发Web Service服务端
- CXF开发WebService服务器端接口
- 客户端axis调用cxf服务端webservice接口问题
- 服务端(接口,后台)开发规范
- 临界区的硬件互斥方案
- C与C++的互相调用(extern "C"的深层探索)
- swing 编程的一些总结
- 敬语小知识
- Android中的Handler机制
- CXF接口服务端开发
- android:在Gallery中放webview,实现滚动查看网页
- 三个故事说穿了许多人
- mktemp :建立暂存/临时文件
- 头文件&&博客地址
- 防止头文件和全局变量重复定义
- HDU1258:Sum It Up
- 结合源码浅析solr facet
- rails stylesheet_link_tag 创建一个html中的css标签