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;
}