CXF webService应用---服务端

1.配置cxf   xml

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

2.添加Interceptor 可验证用户名密码,ip..等等--前置监听器

public class CxfUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
   
    private Logger log = LoggerFactory.getLogger(CxfUserInterceptor.class);

    private static ThreadLocal<Map<String, String>> reqHeaderLocal = new ThreadLocal<Map<String, String>>();

    public CxfUserInterceptor() {
        super(Phase.PRE_INVOKE);
    }

    /**
     * 拦截器过滤方法。
     */
    public void handleMessage(SoapMessage message) throws Fault {
        if (reqHeaderLocal.get() == null) {
            reqHeaderLocal.set(new HashMap<String, String>());
        }
        String accountNodeStr = null, passwordNodeStr = null;
        QName qnameCredentials = new QName("SoapHeader");
        if (message.hasHeader(qnameCredentials)) {
            // 取得请求验证的数据
            Header header = message.getHeader(qnameCredentials);
            Element elementOrderCredential = (Element) header.getObject();
            Node accountNode = elementOrderCredential.getFirstChild();
            Node passwordNode = elementOrderCredential.getLastChild();
            if (accountNode != null) {
                accountNodeStr = accountNode.getTextContent();
            }
            if (passwordNode != null) {
                passwordNodeStr = passwordNode.getTextContent();
            }
            //这里验证用户名密码
            //......................
           
        } else {
            throw new Fault(new IllegalAccessException("WebService request paramter no head!"));
        }
       
    }

3.配置拦截器

<bean id="cxfUserInterceptor"  
		class="com.tima.webservice.impl.util.CxfUserInterceptor" />

4.发布方法

@WebService(targetNamespace = "http://user.api.webservice.tima.com/")
public interface SysOrgAndUserHandleService {

	 public static final String NAMESPACE = "http://user.api.webservice.tima.com/";
	
	 
	
	 @WebMethod
	 @WebResult(targetNamespace = NAMESPACE)
	public String sysDemension( @WebParam(targetNamespace = NAMESPACE) String xml,@WebParam(targetNamespace = NAMESPACE) String method);
	}

	
接口实现:
	 
@WebService(endpointInterface = "com.tima.webservice.api.SysOrgAndUserHandleService", serviceName = "SysOrgAndUserHandleService", targetNamespace = "http://user.api.webservice.tima.com/")
public class SysOrgAndUserHandleServiceImpl implements
		SysOrgAndUserHandleService {
		
        @Override
	public String sysDemension(String xml,String method) {
		log.info("WebService:sysDemension接收参数:"+xml+",Method:"+method);
		//方法具体实现。。。。。。
	}
}

5.后置监听器

public class AfterInterceptor extends AbstractSoapInterceptor {
	
	public AfterInterceptor(){
		super(Phase.SETUP);
	}

	@Override
	public void handleMessage(SoapMessage msg) throws Fault {
		// do same thing......
	}

}

6.xml 配置接口

<bean id="SysOrgAndUserHandleServiceImpl" class="com.tima.webservice.impl.SysOrgAndUserHandleServiceImpl"/>
	
	<jaxws:endpoint id="SysOrgAndUserHandleService"	
					implementor="#SysOrgAndUserHandleServiceImpl" 
					implementorClass="com.tima.webservice.impl.SysOrgAndUserHandleServiceImpl"	
					address="/SysOrgAndUserHandleService" >
		
		<jaxws:inInterceptors>  
			<ref bean="cxfUserInterceptor" />  
		</jaxws:inInterceptors>
		<jaxws:outInterceptors>
			<ref bean="afterInterceptor" /> 
		</jaxws:outInterceptors>
		
	</jaxws:endpoint>

7.附加:

/**
	 * XML 转换 String 返回 对象List集合
	 * @param element
	 * @param map
	 */
	@SuppressWarnings("unchecked")
	public static void xmlConvertMap(Element element,List<Map<String, Object>> list) {
		List<DefaultElement> listEl = new ArrayList<DefaultElement>();
		//当根节点有数据的时候
		if (!CollectionUtils.isEmpty(element.attributes())) {
			listEl.add((DefaultElement)element);
		}
		listEl.addAll(element.elements());
		for (DefaultElement def : listEl) {
			Map<String, Object> map = new HashMap<String, Object>();
			List<DefaultAttribute> listAtt = def.attributes();
			for (DefaultAttribute att : listAtt) {
				map.put(att.getName(), att.getValue());
			}
			list.add(map);
			//xmlConvertMap(def,list);
		}
	}
	
	
	 /**
     * 将一个 Map 对象转化为一个 JavaBean
     * @param type 要转化的类型
     * @param map 包含属性值的 map
     * @return 转化出来的 JavaBean 对象
     */
    @SuppressWarnings("rawtypes")
	public static Object convertMapToBean(Class type, Map map) {
        Object obj = null;
		try {
			obj = convertMapExt(type, map);
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (IntrospectionException e) {
			e.printStackTrace();
		}
        return obj;
    }

    


    /**
     * map转换为对象
     * @param type
     * @param map
     * @return
     * @throws IntrospectionException
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     */
	@SuppressWarnings("rawtypes")
	private static Object convertMapExt(Class type, Map map)
			throws IntrospectionException, InstantiationException,
			IllegalAccessException, InvocationTargetException {
		BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
        Object obj = type.newInstance(); // 创建 JavaBean 对象
        // 给 JavaBean 对象的属性赋值
        PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor descriptor : propertyDescriptors) {  
            String propertyName = descriptor.getName();
           
            if (map.containsKey(propertyName)) {
            	String typeCls = descriptor.getPropertyType().getName();
                Object value = map.get(propertyName);
                if (typeCls.equals("java.lang.Long")) {
                	descriptor.getWriteMethod().invoke(obj, Long.parseLong(value.toString()));
                }
                else if (typeCls.equals("java.util.Date")) {
                	descriptor.getWriteMethod().invoke(obj, DateUtil.parseDate(value.toString()));
                }
                else if (typeCls.equals("java.lang.Integer")) {
                	descriptor.getWriteMethod().invoke(obj, Integer.parseInt(value.toString()));
                }
                else if (typeCls.equals("java.lang.Double")) {
                	descriptor.getWriteMethod().invoke(obj, Double.parseDouble(value.toString()));
                }
                else if (typeCls.equals("java.lang.Float")) {
                	descriptor.getWriteMethod().invoke(obj, Float.parseFloat(value.toString()));
                }
                else if (typeCls.equals("java.lang.Short")) {
                	descriptor.getWriteMethod().invoke(obj, Short.parseShort(value.toString()));
                }
                else {
                	descriptor.getWriteMethod().invoke(obj,value.toString());
                }
                
            }
        }
		return obj;
	}


转载于:https://my.oschina.net/tima/blog/423394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值