zoukankan      html  css  js  c++  java
  • cxf

    一,cxf webService入门案例

    1,jar包

    注意版本 使用jdk6和apache-cxf-3.1.2,但cxf-3.1.2已经不支持jdk6,需要jdk7以上

    版本用错会报java.lang.UnsupportedClassVersionError: org/apache/cxf/transport/servlet/CXFServlet : Unsupported major.minor version 51.0 

    下载地址: 取lib下的jar

     http://www.apache.org/dyn/closer.lua/cxf/2.7.18/apache-cxf-2.7.18.zip

    2,新建web工程

    3,java代码

    1 package com.lxl.it.cxf.service;
    2 
    3 import javax.jws.WebService;
    4 
    5 @WebService
    6 public interface ITestCxfWs {
    7 String sayHi(String text);
    8 }
    ITestCxfWs接口
     1 package com.lxl.it.cxf.service.impl;
     2 
     3 import javax.jws.WebService;
     4 
     5 import com.lxl.it.cxf.service.ITestCxfWs;
     6 @WebService(endpointInterface="com.lxl.it.cxf.service.ITestCxfWs",serviceName="testCxfWs")
     7 public class TestCxfWs implements ITestCxfWs{
     8 
     9     @Override
    10     public String sayHi(String text) {
    11         return text;
    12     }
    13 
    14 }
    TestCxfWs实现类
     1 package com.lxl.it.cxf.service.test;
     2 
     3 import javax.xml.ws.Endpoint;
     4 
     5 import com.lxl.it.cxf.service.impl.TestCxfWs;
     6 
     7 public class WebServiceApp {
     8     public static void main(String[] args) {
     9         System.out.println("WebServiceApp satrt");
    10         TestCxfWs ws=new TestCxfWs();
    11         String address="http://localhost:8080/testCxfWs";
    12         Endpoint.publish(address, ws);
    13         System.out.println("WebServiceApp end");
    14     }
    15 }
    代码发webService

    4,xml配置 web.xml  spring配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="WebApp_ID" version="2.5">
     6     <display-name>TestWebService</display-name>
     7     <welcome-file-list>
     8         <welcome-file>index.html</welcome-file>
     9         <welcome-file>index.htm</welcome-file>
    10         <welcome-file>index.jsp</welcome-file>
    11         <welcome-file>default.html</welcome-file>
    12         <welcome-file>default.htm</welcome-file>
    13         <welcome-file>default.jsp</welcome-file>
    14     </welcome-file-list>
    15     <context-param>
    16         <param-name>contextConfigLocation</param-name>
    17         <param-value>/WEB-INF/applicationContext.xml</param-value>
    18     </context-param>
    19     <listener>
    20         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    21     </listener>
    22     <servlet>
    23         <servlet-name>CXFServlet</servlet-name>
    24         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    25         <load-on-startup>1</load-on-startup>
    26     </servlet>
    27     <servlet-mapping>
    28         <servlet-name>CXFServlet</servlet-name>
    29         <url-pattern>/ws/*</url-pattern>
    30     </servlet-mapping>
    31 </web-app>
    web.xml
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
     4     xsi:schemaLocation="
     5                        http://www.springframework.org/schema/beans
     6 
     7                        http://www.springframework.org/schema/beans/spring-beans.xsd
     8                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
     9 
    10     <import resource="classpath:META-INF/cxf/cxf.xml" />
    11     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    12     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    13 
    14     <jaxws:endpoint id="testCxfWs" implementor="com.lxl.it.cxf.service.impl.TestCxfWs"
    15         address="/testCxfWs" />
    16 
    17     <bean id="client" class="com.lxl.it.cxf.service.ITestCxfWs" factory-bean="clientFactory"
    18         factory-method="create" />
    19 
    20     <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    21         <property name="serviceClass" value="com.lxl.it.cxf.service.ITestCxfWs" />
    22         <property name="address"
    23 
    24             value="http://localhost:8080/TestWebService/webservice/testCxfWs" />
    25     </bean>
    26 </beans>
    spring

    二,cxf增加拦截器

    1,工程

    2,java代码

     1 package com.lxl.it.cxf.service.Interceptor;
     2 
     3 import java.lang.reflect.Method;
     4 import java.util.List;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 
     8 import org.apache.cxf.frontend.MethodDispatcher;
     9 import org.apache.cxf.interceptor.Fault;
    10 import org.apache.cxf.message.Exchange;
    11 import org.apache.cxf.message.Message;
    12 import org.apache.cxf.phase.AbstractPhaseInterceptor;
    13 import org.apache.cxf.phase.Phase;
    14 import org.apache.cxf.service.Service;
    15 import org.apache.cxf.service.model.BindingOperationInfo;
    16 import org.apache.cxf.transport.http.AbstractHTTPDestination;
    17 
    18 import com.lxl.it.utils.IpUtil;
    19 import com.lxl.it.utils.StringUtils;
    20 import com.lxl.it.utils.Tuple2;
    21 /**
    22  * 对webservice的请求ip地址进行限制的拦截器
    23  * 
    24  */
    25 public class IpAddressInInterceptor extends AbstractPhaseInterceptor<Message>{
    26     
    27     public IpAddressInInterceptor() {
    28         super(Phase.USER_LOGICAL);
    29     }
    30     @Override
    31     public void handleMessage(Message msg) throws Fault {
    32 
    33         String ip = "0.0.0.0";
    34         HttpServletRequest httpRequest = (HttpServletRequest) msg
    35         .get(AbstractHTTPDestination.HTTP_REQUEST);
    36         
    37         if (null != httpRequest) {
    38             ip = StringUtils.getIpFromRequest(httpRequest);
    39         }else{
    40             return;
    41         }
    42         
    43 
    44         Exchange exchange = msg.getExchange();
    45         Method paramMethod = ((MethodDispatcher) exchange.get(Service.class)
    46                 .get(MethodDispatcher.class.getName())).getMethod(exchange
    47                 .get(BindingOperationInfo.class));
    48         String method = paramMethod.toString();
    49         List<Tuple2<Long, Long>> ips =null;//这里是获取系统配置的ip白名单
    50         //ips=InterfaceMethodCache
    51 //                .getAuthorizedIp(method);
    52 //        if (ips == null || ips.isEmpty()) {
    53 //            // 然后用类名称查找配置
    54 //            method = paramMethod.getDeclaringClass().getName();
    55 //            ips = InterfaceMethodCache.getAuthorizedIp(method);
    56 //        }
    57         if (ips == null || ips.isEmpty()) {
    58             return;
    59         }
    60 
    61         if (!IpUtil.ipCheck(ip, ips)) {
    62             throw new Fault(new IllegalAccessException("method id[" + method
    63                     + "] & ip address[" + ip + "] is denied!"));
    64         }
    65     
    66         
    67     }
    68 
    69 }
    IpAddressInInterceptor
     1 package com.lxl.it.utils;
     2 
     3 import java.util.List;
     4 
     5 import org.slf4j.Logger;
     6 import org.slf4j.LoggerFactory;
     7 
     8 public class IpUtil {
     9     
    10     private static final Logger logger = LoggerFactory.getLogger(IpUtil.class);
    11 
    12     /**
    13      * 将IP转成整数
    14      * 
    15      * @param ip
    16      * @return
    17      */
    18     public static long ipToLong(String ip) {
    19         long res = 0;
    20         String[] ss = ip.split("\.");
    21         res = ((Long.valueOf(ss[0]) * 256 + Long.valueOf(ss[1])) * 256 + Long
    22                 .valueOf(ss[2])) * 256 + Long.valueOf(ss[3]);
    23         return res;
    24     }
    25 
    26     /**
    27      * 校验IP是否合法
    28      * 
    29      * @param ip
    30      * @param ips
    31      * @return
    32      */
    33     public static boolean ipCheck(String ip, List<Tuple2<Long, Long>> ips) {
    34         return ipCheck(ipToLong(ip), ips);
    35     }
    36 
    37     public static boolean ipCheck(long ip, List<Tuple2<Long, Long>> ips) {
    38         for (Tuple2<Long, Long> tuple : ips) {
    39             if ((ip >= tuple._1 && ip <= tuple._2) || ip == 0L)
    40                 return true;
    41         }
    42         return false;
    43     }
    44 
    45     public static boolean ipCheck(String ip, Tuple2<Long, Long> tuple) {
    46         return ipCheck(ipToLong(ip), tuple);
    47     }
    48 
    49     public static boolean ipCheck(long ip, Tuple2<Long, Long> tuple) {
    50         return (ip >= tuple._1 && ip <= tuple._2);
    51     }
    52 
    53     private static String getCheckword(String xml) {
    54         String checkword = null;
    55         try {
    56             if (xml != null) {
    57                 int sIndex = xml.indexOf("<checkword>");
    58                 int eIndex = xml.indexOf("</checkword>");
    59 
    60                 if (sIndex != -1 && eIndex != -1) {
    61                     checkword = xml.substring(sIndex + "<checkword>".length(),
    62                             eIndex);
    63                 }
    64             }
    65         } catch (Exception e) {
    66             // e.printStackTrace();
    67             logger.error("", e);
    68         }
    69         return checkword;
    70     }
    71 
    72 
    73 
    74 
    75 
    76 
    77     public static void main(String[] args) {
    78         // System.out.println(ipToLong("0.0.0.0"));
    79         // System.out.println(ipToLong("255.255.255.255"));
    80     }
    81 }
    IpUtil
      1 package com.lxl.it.utils;
      2 
      3 /**
      4  * Copyright (c) 2013, S.F. Express Inc. All rights reserved.
      5  */
      6 
      7 import java.io.ByteArrayOutputStream;
      8 import java.io.PrintWriter;
      9 import java.io.UnsupportedEncodingException;
     10 import java.lang.reflect.Field;
     11 import java.nio.charset.Charset;
     12 import java.util.ArrayList;
     13 import java.util.List;
     14 
     15 import javax.servlet.http.HttpServletRequest;
     16 
     17 import org.slf4j.Logger;
     18 import org.slf4j.LoggerFactory;
     19 
     20 public class StringUtils {
     21 
     22     private static Logger logger = LoggerFactory.getLogger(StringUtils.class);
     23 
     24     /*
     25      * 16进制数字字符集
     26      */
     27     private static String hexString = "0123456789ABCDEF";
     28 
     29     public static boolean isNotEmpty(String str) {
     30         return !isEmpty(str);
     31     }
     32 
     33     public static boolean isEmpty(String str) {
     34         return str == null || str.trim().length() == 0;
     35     }
     36 
     37     public static String toString(Object o) {
     38         if (o == null)
     39             return null;
     40         return o.toString();
     41     }
     42 
     43     // private static final String BR = "<br>
    ";
     44 
     45     public static String throwableToString(Throwable e) {
     46         ByteArrayOutputStream buf = new ByteArrayOutputStream();
     47         e.printStackTrace(new PrintWriter(buf, true));
     48         return buf.toString();
     49         // StringBuilder sb = new StringBuilder();
     50         // try {
     51         // throwableToString(e, sb);
     52         // } catch (Exception e1) {
     53         // sb.append("parse and print exception error.");
     54         // }
     55         // return sb.toString();
     56     }
     57 
     58     // @SuppressWarnings("unchecked")
     59     // private static void throwableToString(Throwable e, StringBuilder sb) {
     60     // if (e == null)
     61     // sb.append("#Exception:NULL");
     62     // else {
     63     // sb.append(BR).append(e.getClass().getName()).append(":").append(e.getMessage()).append(BR)
     64     // .append("#StackTrace:");
     65     // boolean isIterable = false;
     66     // if (e instanceof Iterable) {
     67     // try {
     68     // StringBuilder sb2 = new StringBuilder();
     69     // for (Throwable t : (Iterable<Throwable>) e)
     70     // throwableToString(t, sb2);
     71     // sb.append(sb2);
     72     // isIterable = true;
     73     // } catch (Exception e1) {
     74     // isIterable = false;
     75     // }
     76     // }
     77     // if (!isIterable) {
     78     // for (StackTraceElement ele : e.getStackTrace())
     79     // sb.append(BR).append(ele.toString());
     80     // }
     81     // }
     82     // }
     83 
     84     /**
     85      * 从request中获取ip地址
     86      * 
     87      * @param request
     88      *            请求
     89      * @return
     90      */
     91     public static String getIpFromRequest(HttpServletRequest request) {
     92         String ip = request.getHeader("x-forwarded-for");
     93         if (isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
     94             ip = request.getHeader("Proxy-Client-IP");
     95         }
     96         if (isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
     97             ip = request.getHeader("WL-Proxy-Client-IP");
     98         }
     99         if (isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
    100             ip = request.getRemoteAddr();
    101         }
    102         if (ip != null) {
    103             int idx = ip.indexOf(',');
    104             if (idx > 0) {
    105                 ip = ip.substring(0, idx);
    106             }
    107         }
    108         return ip;
    109     }
    110 
    111     /**
    112      * null和空字符串认为空
    113      * 
    114      * @param target
    115      * @return
    116      */
    117     public static boolean isBlank(String target) {
    118         return isEmpty(target);
    119     }
    120 
    121     /**
    122      * 按字节数截取字符串
    123      * 
    124      * @param orignal
    125      *            字符串
    126      * @param count
    127      *            需要截取的字节数
    128      * @return
    129      * @throws UnsupportedEncodingException
    130      */
    131     public static String substring(String orignal, int count)
    132             throws UnsupportedEncodingException {
    133         // 原始字符不为null,也不是空字符串
    134         if (!isEmpty(orignal)) {
    135             // 将原始字符串转换为UTF-8编码格式
    136             orignal = new String(orignal.getBytes(), "UTF-8");
    137             // 要截取的字节数大于0,且小于原始字符串的字节数
    138             if (count > 0 && count < orignal.getBytes("UTF-8").length) {
    139                 StringBuffer buff = new StringBuffer();
    140                 boolean lastCharIsChineses = false;
    141 
    142                 char c;
    143                 for (int i = 0; i < count; i++) {
    144                     c = orignal.charAt(i);
    145                     buff.append(c);
    146                     if (isChineseChar(c)) {
    147                         lastCharIsChineses = true;
    148                         // 遇到中文汉字,截取字节总数减2
    149                         --count;
    150                         --count;
    151                     } else {
    152                         lastCharIsChineses = false;
    153                     }
    154                 }
    155 
    156                 if (lastCharIsChineses) {
    157                     buff.deleteCharAt(buff.length() - 1);
    158                 }
    159 
    160                 return buff.toString();
    161             }
    162         }
    163         return orignal;
    164     }
    165 
    166     public static boolean isChineseChar(char c) {
    167         Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
    168         if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
    169                 || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
    170                 || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
    171                 || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
    172                 || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
    173                 || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
    174                 || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
    175             return true;
    176         }
    177         return false;
    178     }
    179 
    180     private static final int[] BYTES_COUNT = new int[] { 0x80, 0x40, 0x20,
    181             0x10, 8, 4 };
    182 
    183     private static final Charset utf8Charset = Charset.forName("utf-8");
    184 
    185     public static String oracleUtf8Sub(String str, int len)
    186             throws UnsupportedEncodingException {
    187         return oracleUtf8Sub(str, 0, len);
    188     }
    189 
    190     public static String oracleUtf8Sub(String str, int from, int len)
    191             throws UnsupportedEncodingException {
    192         if (str == null || len < 0 || from < 0 || from >= str.length())
    193             throw new IllegalArgumentException();
    194 
    195         if (from != 0)
    196             str = str.substring(from);
    197 
    198         byte[] bs = str.getBytes(utf8Charset);
    199 
    200         if (len >= bs.length)
    201             return str;
    202 
    203         int to = 0;
    204         int to_ = 0;
    205 
    206         while (to <= len) {
    207             to_ = to;
    208             byte b = bs[to];
    209             if (0 <= b && b < 128) {
    210                 to += 1;
    211             } else {
    212                 for (int i = 1; i <= 5; ++i) {
    213                     if ((b & BYTES_COUNT[i]) > 0)
    214                         continue;
    215                     if (i == 1)
    216                         throw new RuntimeException("Error utf8 decode for:"
    217                                 + str);
    218                     to += i;
    219                     break;
    220                 }
    221             }
    222         }
    223 
    224         return new String(bs, 0, to_, utf8Charset);
    225     }
    226 
    227     /**
    228      * 从含路由的文件名中提取单纯的文件名称
    229      * 
    230      * @param pathFileName
    231      *            含路径的文件名称
    232      * @return String
    233      */
    234     public static String getFileNameFromPath(String pathFileName) {
    235         String fileNameTemp = null;
    236         int lastSplitPos = 0;
    237 
    238         if (pathFileName.indexOf("/") > -1) {
    239             lastSplitPos = pathFileName.lastIndexOf("/");
    240             fileNameTemp = pathFileName.substring(lastSplitPos + 1,
    241                     pathFileName.length());
    242         } else if (pathFileName.indexOf("\") > -1) {
    243             lastSplitPos = pathFileName.lastIndexOf("\");
    244             fileNameTemp = pathFileName.substring(lastSplitPos + 1,
    245                     pathFileName.length());
    246         } else if (pathFileName.indexOf(":") > -1) {
    247             lastSplitPos = pathFileName.lastIndexOf(":");
    248             fileNameTemp = pathFileName.substring(lastSplitPos + 1,
    249                     pathFileName.length());
    250         } else {
    251             fileNameTemp = pathFileName;
    252         }
    253 
    254         return fileNameTemp;
    255     }
    256 
    257     public static String getFirstNodeTxt(String xmlStr, String nodeName) {
    258         String resultStr = null;
    259 
    260         if (StringUtils.isNotEmpty(xmlStr) && StringUtils.isNotEmpty(nodeName)) {
    261             int startIndex = xmlStr.indexOf("<" + nodeName + ">");
    262             int endIndex = xmlStr.indexOf("</" + nodeName + ">");
    263 
    264             if (startIndex != -1 && endIndex != -1) {
    265                 resultStr = xmlStr.substring(
    266                         startIndex + nodeName.length() + 2, endIndex);
    267             }
    268 
    269         }
    270 
    271         return resultStr;
    272     }
    273 
    274     public static String getHexTOString(String bytes) {
    275         ByteArrayOutputStream baos = new ByteArrayOutputStream(
    276                 bytes.length() / 2);
    277         // 将每2位16进制整数组装成一个字节
    278         for (int i = 0; i < bytes.length(); i += 2)
    279             baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString
    280                     .indexOf(bytes.charAt(i + 1))));
    281         return new String(baos.toByteArray());
    282     }
    283 
    284     public static String toString(StackTraceElement[] stesElements) {
    285         if (stesElements != null) {
    286             try {
    287                 StringBuilder sBuilder = new StringBuilder();
    288                 for (StackTraceElement ste : stesElements) {
    289                     sBuilder.append(' ').append(ste.toString()).append('
    ');
    290                 }
    291                 return sBuilder.toString();
    292             } catch (Exception e) {
    293                 logger.error("", e);
    294             }
    295         }
    296         return null;
    297     }
    298 
    299     /**
    300      * HTML转义
    301      * 
    302      * @param content
    303      * @return
    304      */
    305     public static String htmlEncode(String content) {
    306         if (content == null)
    307             return "";
    308 
    309         String html = content;
    310 
    311         html = html.replaceAll("&", "&amp;");
    312         html = html.replace("'", "&apos;");
    313         html = html.replace(""", "&quot;"); // "
    314         html = html.replace("	", "&nbsp;&nbsp;");// 替换跳格
    315         html = html.replace(" ", "&nbsp;");// 替换空格
    316         html = html.replace("<", "&lt;");
    317         html = html.replaceAll(">", "&gt;");
    318 
    319         return html;
    320     }
    321 
    322     /**
    323      * 输出某个对象的全部属性值
    324      * 
    325      * @param obj
    326      *            对象
    327      * @param fieldShow属性名称与属性值之间的分隔符
    328      * @param fieldEndChr属性结束符
    329      *            :各个属性之间的分隔符
    330      * @return
    331      */
    332     public static String outAllFields4Object(Object obj, String fieldShow,
    333             String fieldEndChr) {
    334         if (null == obj) {
    335             return null;
    336         } else {
    337             StringBuilder sbuilder = new StringBuilder();
    338 
    339             if (isEmpty(fieldShow)) {
    340                 fieldShow = "->";
    341             }
    342 
    343             if (isEmpty(fieldEndChr)) {
    344                 fieldEndChr = ";";
    345             }
    346 
    347             try {
    348                 Class<?> c = obj.getClass();
    349                 Field[] fields = c.getDeclaredFields();
    350 
    351                 sbuilder.append(obj.getClass()).append(":");
    352 
    353                 for (Field f : fields) {
    354                     f.setAccessible(true);
    355                     String field = f.toString().substring(
    356                             f.toString().lastIndexOf(".") + 1); // 取出属性名称
    357                     sbuilder.append(field).append(fieldShow)
    358                             .append(f.get(obj) == null ? "" : f.get(obj))
    359                             .append(fieldEndChr);
    360                 }
    361             } catch (IllegalArgumentException e) {
    362                 // TODO Auto-generated catch block
    363                 e.printStackTrace();
    364             } catch (IllegalAccessException e) {
    365                 // TODO Auto-generated catch block
    366                 e.printStackTrace();
    367             }
    368 
    369             return sbuilder.toString();
    370         }
    371 
    372     }
    373     /**
    374      * 输出某个对象的全部属性值
    375      * 
    376      * @param obj
    377      *            对象
    378      * @param fieldShow属性名称与属性值之间的分隔符
    379      * @param fieldEndChr属性结束符
    380      *            :各个属性之间的分隔符
    381      * @return
    382      */
    383     public static String outAllFields4ObjectAndSuper(Object obj, String fieldShow,
    384             String fieldEndChr) {
    385         if (null == obj) {
    386             return null;
    387         } else {
    388             StringBuilder sbuilder = new StringBuilder();
    389 
    390             if (isEmpty(fieldShow)) {
    391                 fieldShow = "->";
    392             }
    393 
    394             if (isEmpty(fieldEndChr)) {
    395                 fieldEndChr = ";";
    396             }
    397 
    398             try {
    399                 Class<?> c = obj.getClass();
    400                 List<Field> fields=new ArrayList<Field>();
    401                 fields=getClassField(c,fields);
    402 
    403                 sbuilder.append(obj.getClass()).append(":");
    404 
    405                 for (Field f : fields) {
    406                     f.setAccessible(true);
    407                     String field = f.toString().substring(
    408                             f.toString().lastIndexOf(".") + 1); // 取出属性名称
    409                     sbuilder.append(field).append(fieldShow)
    410                             .append(f.get(obj) == null ? "" : f.get(obj))
    411                             .append(fieldEndChr);
    412                 }
    413             } catch (IllegalArgumentException e) {
    414                 // TODO Auto-generated catch block
    415                 e.printStackTrace();
    416             } catch (IllegalAccessException e) {
    417                 // TODO Auto-generated catch block
    418                 e.printStackTrace();
    419             }
    420 
    421             return sbuilder.toString();
    422         }
    423 
    424     }
    425 
    426     /**
    427      * 获取类的所有属性,包括父类的
    428      * 
    429      * @param aClazz
    430      * @param fieldList
    431      * @return
    432      */
    433     private static List<Field> getClassField(Class aClazz, List<Field> fieldList) {
    434         Field[] declaredFields = aClazz.getDeclaredFields();
    435         for (Field field : declaredFields) {
    436             fieldList.add(field);
    437         }
    438 
    439         Class superclass = aClazz.getSuperclass();
    440         if (superclass != null) {// 简单的递归一下
    441             return getClassField(superclass, fieldList);
    442         }
    443         return fieldList;
    444     }
    445 
    446     /**
    447      * 将非打印字符替换为空格
    448      * 
    449      * @param str
    450      *            需处理的字符串
    451      * @param charset
    452      *            :字符串编码格式:UTF-8,GBK
    453      * @return
    454      * @throws UnsupportedEncodingException
    455      */
    456     public static String emptyNotPrintChar(String str, String charset)
    457             throws UnsupportedEncodingException {
    458 
    459         if (StringUtils.isEmpty(str)) {
    460             return "";
    461         }
    462 
    463         return new String(emptyNotPrintChar(str.getBytes(charset)), charset);
    464     }
    465 
    466     /**
    467      * 将非打印字符替换为空格
    468      * 
    469      * @param str
    470      *            需处理的字符串
    471      * @return
    472      * @throws UnsupportedEncodingException
    473      */
    474     public static String emptyNotPrintChar(String str) {
    475 
    476         if (StringUtils.isEmpty(str)) {
    477             return "";
    478         }
    479 
    480         return new String(emptyNotPrintChar(str.getBytes()));
    481     }
    482 
    483     /**
    484      * 将非打印字符替换为空格
    485      * 
    486      * @param bts
    487      *            需处理的字节数组
    488      * @return
    489      */
    490     private static byte[] emptyNotPrintChar(byte[] bts) {
    491         int btsLength = bts.length;
    492         byte[] newBytes = new byte[btsLength];
    493         for (int i = 0; i < btsLength; i++) {
    494 
    495             byte b = bts[i];
    496             if ((b >= 0 && b <= 31) || b == 127) {
    497                 b = 32;
    498             }
    499 
    500             newBytes[i] = b;
    501         }
    502 
    503         return newBytes;
    504     }
    505 
    506 //    public static void main(String[] args) throws UnsupportedEncodingException {
    507 //        String str = "qwertyuiop中华人民共和国123456789";
    508 //        String destStr = "";
    509 //
    510 //        destStr = StringUtils.emptyNotPrintChar(str, "UTF-8");
    511 //        System.out.println(destStr);
    512 //
    513 //        str = "上海杨浦区昆明路739号文通大厦15层 中青旅联科";
    514 //        destStr = "";
    515 //
    516 //        destStr = StringUtils.emptyNotPrintChar(str, "GBK");
    517 //        System.out.println(destStr);
    518 //    }
    519 }
    StringUtils
     1 package com.lxl.it.utils;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Tuple2<T1, T2> implements Serializable {
     6 
     7     private static final long serialVersionUID = -39962326066034337L;
     8 
     9     public T1 _1;
    10     public T2 _2;
    11 
    12     public Tuple2() {
    13     }
    14 
    15     public Tuple2(T1 _1, T2 _2) {
    16         super();
    17         this._1 = _1;
    18         this._2 = _2;
    19     }
    20 
    21     /**
    22      * 根据提供的参数,构造Tuple对象
    23      * 
    24      * @param _1
    25      * @param _2
    26      * @return
    27      */
    28     public static <E1, E2> Tuple2<E1, E2> apply(E1 _1, E2 _2) {
    29         Tuple2<E1, E2> res = new Tuple2<E1, E2>();
    30         res._1 = _1;
    31         res._2 = _2;
    32         return res;
    33     }
    34 
    35     @Override
    36     public String toString() {
    37         return "[" + _1 + ", " + _2 + "]";
    38     }
    39 
    40     @Override
    41     public int hashCode() {
    42         final int prime = 31;
    43         int result = 1;
    44         result = prime * result + ((_1 == null) ? 0 : _1.hashCode());
    45         result = prime * result + ((_2 == null) ? 0 : _2.hashCode());
    46         return result;
    47     }
    48 
    49     @Override
    50     public boolean equals(Object obj) {
    51         if (this == obj)
    52             return true;
    53         if (obj == null)
    54             return false;
    55         if (getClass() != obj.getClass())
    56             return false;
    57         Tuple2<?, ?> other = (Tuple2<?, ?>) obj;
    58         if (_1 == null) {
    59             if (other._1 != null)
    60                 return false;
    61         } else if (!_1.equals(other._1))
    62             return false;
    63         if (_2 == null) {
    64             if (other._2 != null)
    65                 return false;
    66         } else if (!_2.equals(other._2))
    67             return false;
    68         return true;
    69     }
    70 
    71 }
    Tuple2

    3,配置spring文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:jaxws="http://cxf.apache.org/jaxws"
     5     xmlns:cxf="http://cxf.apache.org/core"
     6     xsi:schemaLocation="
     7                        http://www.springframework.org/schema/beans
     8                        http://www.springframework.org/schema/beans/spring-beans.xsd
     9                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    10                        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
    11                        
    12                        
    13 
    14     <import resource="classpath:META-INF/cxf/cxf.xml" />
    15     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    16     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    17     <bean id="ipAddressInInterceptor"
    18         class="com.lxl.it.cxf.service.Interceptor.IpAddressInInterceptor" />
    19     <!-- 监听 -->
    20     <cxf:bus>
    21         <cxf:inInterceptors>
    22             <ref bean="ipAddressInInterceptor" />
    23         </cxf:inInterceptors>
    24     </cxf:bus>
    25     <jaxws:endpoint id="testCxfWs"
    26         implementor="com.lxl.it.cxf.service.impl.TestCxfWs" address="/testCxfWs" />
    27 
    28     <bean id="client" class="com.lxl.it.cxf.service.ITestCxfWs"
    29         factory-bean="clientFactory" factory-method="create" />
    30 
    31     <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    32         <property name="serviceClass" value="com.lxl.it.cxf.service.ITestCxfWs" />
    33         <property name="address"
    34 
    35             value="http://localhost:8080/TestWebService/webservice/testCxfWs" />
    36     </bean>
    37 
    38 
    39 </beans>
    spring

    注意:
       <!-- 监听 -->
     <cxf:bus>
      <cxf:inInterceptors>
       <ref bean="ipAddressInInterceptor" />
      </cxf:inInterceptors>
     </cxf:bus>

    上述监听配置用的cxf标签,需要再spring配置文件头部加上声明

    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:jaxws="http://cxf.apache.org/jaxws"
     xmlns:cxf="http://cxf.apache.org/core"
     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
                           http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
                          

  • 相关阅读:
    3Dtouch 的实际应用详解(tableView中的应用)
    使用UIScrollView的zoomscale实现图片捏合放大
    SVN命令使用详解
    参数传递
    cookie文件路径
    XML和HTML之间的差异
    cssSelector元素定位方法
    如何调用一个数据完整的firefox浏览器
    Android生命周期详解
    android 利用countDownLatch实现主线程与子线程之间的同步
  • 原文地址:https://www.cnblogs.com/jiaozi-li/p/5695591.html
Copyright © 2011-2022 走看看