KKSU
2024-11-21 80fd9e3da4b45285c29cdb380ce743202b0c2af4
feat(mall): 添加快递信息查询功能

- 新增 ApiCheckTraceInfoDto 类用于接收快递单号请求参数
- 在 CommonController 中添加 checkTraceInfo 方法处理快递信息查询请求
- 在 CommonService 中实现 checkTraceInfo 方法调用第三方 API 查询快递信息
- 新增 Client 类用于与第三方 API 进行交互
- 新增 BaseRequest、BaseResponse 等接口和类用于定义请求和响应规范- 新增多种数据类型转换器用于处理 API 数据
- 新增 JSON 相关工具类用于 JSON 数据解析和验证
54 files added
7 files modified
4164 ■■■■■ changed files
pom.xml 20 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/CommonController.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/ICommonService.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/BaseRequest.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/BaseResponse.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/BsApi.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/Client.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/HttpService.java 96 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/Param.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/Parser.java 278 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/Sign.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/Converter.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/ConverterUtil.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/XmlConverter.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/DateConverter.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/IntConverter.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/LongConverter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/impl/StringConverter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java 238 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java 214 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java 221 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java 74 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java 333 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java 107 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java 107 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java 98 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java 74 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java 333 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java 107 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java 107 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java 120 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java 118 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java 51 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java 360 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java 109 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 2 ●●● patch | view | raw | blame | history
pom.xml
@@ -40,16 +40,16 @@
            <artifactId>json</artifactId>
            <version>20230618</version>
        </dependency>
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-apache-httpclient</artifactId>
            <version>0.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-java</artifactId>
            <version>0.2.12</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.github.wechatpay-apiv3</groupId>-->
<!--            <artifactId>wechatpay-apache-httpclient</artifactId>-->
<!--            <version>0.4.7</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.github.wechatpay-apiv3</groupId>-->
<!--            <artifactId>wechatpay-java</artifactId>-->
<!--            <version>0.2.12</version>-->
<!--        </dependency>-->
        <!--        图片压缩-->
        <dependency>
            <groupId>net.coobird</groupId>
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -40,4 +41,14 @@
        registration.excludePathPatterns("/configuration/security");
        registration.excludePathPatterns("/swagger-resources");
    }
    @Override
    public void addCorsMappings( CorsRegistry registry) {
        // 跨域请求配置
        registry.addMapping("/**")//允许请求路径
                .allowedOrigins("*")//表示允许所有网址发起跨域请求
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")//表示允许跨域请求的方法
                .maxAge(3600)//表示在3600秒内不需要再发送预校验请求
                .allowCredentials(true);//允许客户端携带验证信息,即允许携带cookie
    }
}
src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
@@ -31,7 +31,7 @@
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String headerToken = request.getHeader("token");
        String headerToken = request.getHeader("Token");
        if (StringUtils.isBlank(headerToken)) {
            responseUnAuth(response);
            return false;
src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
@@ -5,11 +5,13 @@
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.*;
import cc.mrbird.febs.mall.dto.AccountAndCodeDto;
import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
import cc.mrbird.febs.mall.dto.Base64UploadDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.service.ICommonService;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -210,4 +212,16 @@
        }
        return new FebsResponse().fail().message("验证码错误");
    }
    @ApiOperation(value = "获取快递信息接口")
    @PostMapping(value = "/checkTraceInfo")
    public FebsResponse checkTraceInfo(@RequestBody ApiCheckTraceInfoDto checkTraceInfoDto) {
        KdTraceQueryRsp traceQueryRsp = commonService.checkTraceInfo(checkTraceInfoDto);
        boolean result = traceQueryRsp.isResult();
        if (result) {
            return new FebsResponse().success().data(traceQueryRsp);
        }
        return new FebsResponse().fail().message("请检查您的快递单号是否输入正确。");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java
New file
@@ -0,0 +1,15 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class ApiCheckTraceInfoDto {
    @NotBlank(message = "快递单号不能为空")
    @ApiModelProperty(value = "快递单号", example = "60850007041815")
    private String traceNo;
}
src/main/java/cc/mrbird/febs/mall/service/ICommonService.java
@@ -1,8 +1,9 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
import cc.mrbird.febs.mall.entity.AppVersion;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.vo.CashOutSettingVo;
import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
import java.util.List;
@@ -21,4 +22,5 @@
    void addDataDic(String type, String key, Object value, String description, boolean isJson);
    KdTraceQueryRsp checkTraceInfo(ApiCheckTraceInfoDto checkTraceInfoDto);
}
src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
import cc.mrbird.febs.mall.entity.AppVersion;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.mapper.AppVersionMapper;
@@ -9,10 +10,15 @@
import cc.mrbird.febs.mall.service.ICommonService;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.best.javaSdk.Client;
import com.best.javaSdk.kdTraceQuery.request.KdTraceQueryReq;
import com.best.javaSdk.kdTraceQuery.request.MailNos;
import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
@@ -83,4 +89,25 @@
        dic.setDescription(description);
        dataDictionaryCustomMapper.insert(dic);
    }
    @Override
    public KdTraceQueryRsp checkTraceInfo(ApiCheckTraceInfoDto checkTraceInfoDto) {
        String url = "http://open-sgp.800best.com/api-server/m9api/api/process";
        String partnerID = "71";
        String partnerKey = "G95DIM64";
        String format = "JSON";
        Client client = new Client(url, partnerID, partnerKey, format);
        KdTraceQueryReq tdTraceQueryReq = new KdTraceQueryReq();
        MailNos mailNos = new MailNos();
        List<String> mailNo = new ArrayList<>();
        mailNo.add(checkTraceInfoDto.getTraceNo());
        mailNos.setMailNo(mailNo);
        tdTraceQueryReq.setMailNos(mailNos);
        tdTraceQueryReq.setLangType("zh-CN");
        KdTraceQueryRsp kdTraceQueryRsp = client.executed(tdTraceQueryReq);
        return kdTraceQueryRsp;
    }
}
src/main/java/com/best/javaSdk/BaseRequest.java
New file
@@ -0,0 +1,7 @@
package com.best.javaSdk;
public interface BaseRequest {
    public String obtainServiceType();
    BaseResponse makeResponse(String rsp, String format);
}
src/main/java/com/best/javaSdk/BaseResponse.java
New file
@@ -0,0 +1,4 @@
package com.best.javaSdk;
public interface BaseResponse {
}
src/main/java/com/best/javaSdk/BsApi.java
New file
@@ -0,0 +1,32 @@
package com.best.javaSdk;
import cn.hutool.json.JSONUtil;
import com.best.javaSdk.kdTraceQuery.request.KdTraceQueryReq;
import com.best.javaSdk.kdTraceQuery.request.MailNos;
import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
import java.util.ArrayList;
import java.util.List;
public class BsApi {
    public static void main(String[] args) {
        String url = "http://open-sgp.800best.com/api-server/m9api/api/process";
        String partnerID = "71";
        String partnerKey = "G95DIM64";
        String format = "JSON";
        Client client = new Client(url, partnerID, partnerKey, format);
        KdTraceQueryReq tdTraceQueryReq = new KdTraceQueryReq();
        MailNos mailNos = new MailNos();
        List<String> mailNo = new ArrayList<>();
        mailNo.add("JT689574278404");
        mailNos.setMailNo(mailNo);
        tdTraceQueryReq.setMailNos(mailNos);
        tdTraceQueryReq.setLangType("zh-CN");
        KdTraceQueryRsp kdTraceQueryRsp = client.executed(tdTraceQueryReq);
        System.out.println(JSONUtil.parseObj(kdTraceQueryRsp));
    }
}
src/main/java/com/best/javaSdk/Client.java
New file
@@ -0,0 +1,49 @@
package com.best.javaSdk;
import java.util.HashMap;
import java.util.Map;
public class Client {
    private String url;
    private String partnerID;
    private String partnerKey;
    private String messageFormat;
    public Client(String url, String partnerID, String partnerKey, String messageFormat){
        this.url = url;
        this.messageFormat = messageFormat;
        this.partnerID = partnerID;
        this.partnerKey = partnerKey;
    }
    public <T extends BaseResponse> T executed(BaseRequest baseRequest) {
        String response = "";
        Map<String, String> params = new HashMap<>();
        Map<String, String> headers = new HashMap<>();
        Param param = new Param();
        param.setPartnerID(partnerID);
        param.setServiceType(baseRequest.obtainServiceType());
        param.setBizData(makeBizData(baseRequest));
        param.setPartnerKey(partnerKey);
        params.put("partnerID", param.getPartnerID());
        params.put("serviceType", param.getServiceType());
        params.put("bizData", param.getBizData());
        params.put("sign", Sign.makeSign(param));
        try {
            response = HttpService.sendPost(url, params, headers);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response == null ? null : (T) baseRequest.makeResponse(response, messageFormat);
    }
    private String makeBizData(BaseRequest baseRequest) {
        if("xml".equalsIgnoreCase(this.messageFormat)) {
            return Parser.coverObject2Xml(baseRequest);
        }
        return  Parser.convertObject2Json(baseRequest);
    }
}
src/main/java/com/best/javaSdk/HttpService.java
New file
@@ -0,0 +1,96 @@
package com.best.javaSdk;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Map;
public class HttpService {
    public static String sendPost(String url, Map<String, String> paramMap, Map<String, String> headerMap) throws Exception {
        StringBuffer buffer = new StringBuffer(); //用来拼接参数
        StringBuffer result = new StringBuffer(); //用来接受返回值
        //创建URL
        URL httpUrl = new URL(url);
        //建立连接
        URLConnection connection = httpUrl.openConnection();
        connection.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        connection.setRequestProperty("connection", "keep-alive");
        connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        if (headerMap != null && !headerMap.isEmpty()) {
            for (Map.Entry<String, String> entry : headerMap.entrySet()) {
                connection.setRequestProperty(entry.getKey(),  URLEncoder.encode(entry.getValue(), "utf-8"));
            }
        }
        PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
        String request = "";
        if(paramMap != null && !paramMap.isEmpty()){
            for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8")).append("&");
            }
            //去掉最后一个&并urlencode
            request = buffer.toString().substring(0, buffer.toString().length() - 1);
        }
        printWriter.print(request);
        printWriter.flush();
        connection.connect();
        //接受连接返回参数
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            result.append(line);
        }
        bufferedReader.close();
        return result.toString();
    }
    public static String sendPost(String url, Map<String, String> paramMap, Map<String, String> headerMap, String body) throws Exception {
        StringBuffer buffer = new StringBuffer(); //用来拼接参数
        StringBuffer result = new StringBuffer(); //用来接受返回值
        String request = "";
        if(paramMap != null && !paramMap.isEmpty()){
            for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8")).append("&");
            }
            //去掉最后一个&并urlencode
            request = buffer.toString().substring(0, buffer.toString().length() - 1);
        }
        //创建URL
        URL httpUrl = new URL(url + "?" + request);
        //建立连接
        URLConnection connection =  httpUrl.openConnection();
        connection.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        connection.setRequestProperty("connection", "keep-alive");
        connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        if (headerMap != null && !headerMap.isEmpty()) {
            for (Map.Entry<String, String> entry : headerMap.entrySet()) {
                connection.setRequestProperty(entry.getKey(),  URLEncoder.encode(entry.getValue(), "utf-8"));
            }
        }
        PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
        printWriter.print(body);
        printWriter.flush();
        connection.connect();
        //接受连接返回参数
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            result.append(line);
        }
        bufferedReader.close();
        return result.toString();
    }
}
src/main/java/com/best/javaSdk/Param.java
New file
@@ -0,0 +1,56 @@
package com.best.javaSdk;
public class Param {
    private String partnerID;
    private String serviceType;
    private String bizData;
    private String partnerKey;
    private String sign;
    public String getPartnerID()
    {
        return this.partnerID;
    }
    public void setPartnerID(String value)
    {
        this.partnerID = value;
    }
    public String getServiceType()
    {
        return this.serviceType;
    }
    public void setServiceType(String value)
    {
        this.serviceType = value;
    }
    public String getBizData()
    {
        return this.bizData;
    }
    public void setBizData(String value)
    {
        this.bizData = value;
    }
    public String getPartnerKey()
    {
        return this.partnerKey;
    }
    public void setPartnerKey(String value)
    {
        this.partnerKey = value;
    }
    public String getSign()
    {
        return this.sign;
    }
    public void setSign(String value)
    {
        this.sign = value;
    }
}
src/main/java/com/best/javaSdk/Parser.java
New file
@@ -0,0 +1,278 @@
package com.best.javaSdk;
import com.best.javaSdk.converter.Converter;
import com.best.javaSdk.converter.impl.*;
import com.best.javaSdk.converter.util.jsonReader.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
public class Parser {
    private static Map<Class, Converter> converterMap;
    static {
        converterMap = new HashMap<>();
        converterMap.put(String.class, new StringConverter());
        converterMap.put(int.class, new IntConverter());
        converterMap.put(Integer.class, new IntConverter());
        converterMap.put(float.class, new FloatConverter());
        converterMap.put(Float.class, new FloatConverter());
        converterMap.put(double.class, new DoubleConverter());
        converterMap.put(Double.class, new DoubleConverter());
        converterMap.put(long.class, new LongConverter());
        converterMap.put(Long.class, new LongConverter());
        converterMap.put(boolean.class, new BooleanConverter());
        converterMap.put(Boolean.class, new BooleanConverter());
        converterMap.put(Date.class, new DateConverter());
    }
    public static String coverObject2Xml(Object o) {
        StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        Class cls = o.getClass();
        String className = cls.getName();
        className = className.substring(className.lastIndexOf(".") + 1);
        if (className.endsWith("Req")) {
            sb.append(appendXmlNode("request", object2XmlConvert(o)));
        } else {
            sb.append(appendXmlNode("response", object2XmlConvert(o)));
        }
        return sb.toString();
    }
    public static String object2XmlConvert(Object o) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            Class cls = o.getClass();
            if (cls.getName().startsWith("java.lang")) {
                return o.toString();
            }
            Field[] props = cls.getDeclaredFields();
            for (Field prop : props) {
                prop.setAccessible(true);
                String propName = prop.getName();
                Class propType = prop.getType();
                Object propValue = prop.get(o);
                StringBuilder stb = new StringBuilder();
                if(propValue == null) {
                    continue;
                }
                if(converterMap.containsKey(propType)) {
                    stb = new StringBuilder(converterMap.get(propType).xmlReverse(propValue, prop));
                } else if (propType.getName().equals("java.util.List")) {
                    List valueList = (List) propValue;
                    for (Object value : valueList) {
                        stb.append(appendXmlNode(propName, object2XmlConvert(value)));
                    }
                } else {
                    stb = new StringBuilder(appendXmlNode(propName, object2XmlConvert(propValue)));
                }
                stringBuilder.append(stb);
            }
        } catch (Exception e) {
            return "parser error : " + e.getMessage();
        }
        return stringBuilder.toString();
    }
    public static String appendXmlNode(String nodeName, String nodeValue) {
        StringBuilder sb = new StringBuilder();
        return sb.append("<").append(nodeName).append(">").append(nodeValue).append("</").append(nodeName).append(">").toString();
    }
    public static <T> T coverXml2Object(String xml, Class<T> clazz) {
        if(xml == null || "".equals(xml)) {
            return null;
        }
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new InputSource(new StringReader(xml)));
            Element root = doc.getDocumentElement();
            NodeList nodeList = root.getChildNodes();
            return handelNodes(nodeList, clazz);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static <T> T handelNodes(NodeList nodeList, Class<T> clazz) {
        try {
            if (nodeList == null) {
                return null;
            }
            if (clazz.getName().startsWith("java.lang")) {
                return (T)nodeList.item(0).getNodeValue();
            }
            T obj = clazz.newInstance();
            Map<Field, List<Object>> listChildMap = new HashMap<>();
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                String nodeName = node.getNodeName();
                short nodeType = node.getNodeType();
                if (nodeType == 3 || nodeType == 4) {
                    continue;
                }
                if(!node.hasChildNodes()) {
                    continue;
                }
                Field[] fields = clazz.getDeclaredFields();
                if(!isContainProp(fields, nodeName)) {
                    continue;
                }
                Field field = clazz.getDeclaredField(nodeName);
                field.setAccessible(true);
                Class<?> fieldType = field.getType();
                if (fieldType.getName().equals("java.util.List")) {
                    Type type = field.getGenericType();
                    if(type instanceof ParameterizedType) {
                        ParameterizedType pt = (ParameterizedType) type;
                        Class genericClazz = (Class) pt.getActualTypeArguments()[0];
                        Object listChildObj = handelNodes(node.getChildNodes(), genericClazz);
                        if (listChildMap.get(field) == null) {
                            List<Object> objectList = new ArrayList<>();
                            objectList.add(listChildObj);
                            listChildMap.put(field, objectList);
                        } else {
                            listChildMap.get(field).add(listChildObj);
                        }
                    }
                } else {
                    Converter converter = converterMap.get(fieldType);
                    if (converter == null) {
                        field.set(obj, handelNodes(node.getChildNodes(), fieldType));
                        continue;
                    }
                    Object convert = converter.convertXml(node, field);
                    if (convert != null) {
                        field.set(obj, convert);
                    }
                }
            }
            for (Field field : listChildMap.keySet()) {
                field.set(obj, listChildMap.get(field));
            }
            return obj;
        } catch (InstantiationException | IllegalAccessException | NoSuchFieldException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static <T> T convertJson2Object(String str, Class<T> clazz) {
        try {
            JSONReader reader = new JSONValidatingReader(new ExceptionErrorListener());
            Object rootObj = reader.read(str);
            return convertJson2Object(rootObj, clazz);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private static <T> T convertJson2Object(Object object, Class<T> clazz) throws Exception {
        T t = clazz.newInstance();
        if (object instanceof Map<?, ?>) {
            Map<?, ?> rootJson = (Map<?, ?>) object;
            for (Object obj : rootJson.keySet()) {
                String itemName = obj.toString();
                Object itemValue = rootJson.get(obj);
                Field[] fields = clazz.getDeclaredFields();
                if (!isContainProp(fields, itemName)) {
                    continue;
                }
                Field field = clazz.getDeclaredField(itemName);
                field.setAccessible(true);
                Class<?> fieldType = field.getType();
                Object value;
                Converter converter = converterMap.get(fieldType);
                if (converter == null && itemValue instanceof Map<?, ?>) {
                    value = convertJson2Object(itemValue, fieldType);
                } else if (itemValue instanceof ArrayList<?> && fieldType.equals(List.class)) {
                    value = handlerListJson((ArrayList<?>) itemValue, field);
                } else if (converter != null) {
                    if (itemValue == null) {
                        value = null;
                    } else {
                        value = converter.convertJson(itemValue, field);
                    }
                } else {
                    continue;
                }
                if (value != null) {
                    field.set(t, value);
                }
            }
        }
        return t;
    }
    private static List handlerListJson(ArrayList<?> value, Field field) throws Exception {
        List list = new ArrayList<>();
        Type type = field.getGenericType();
        if(type instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) type;
            Class genericClazz = (Class) pt.getActualTypeArguments()[0];
            Converter converter = converterMap.get(genericClazz);
            for (Object object : value) {
                if (object instanceof Map<?, ?>) {
                    list.add(convertJson2Object(object, genericClazz));
                }else {
                    list.add(converter.convertJson(object, field));
                }
            }
        }
        return list;
    }
    public static String convertObject2Json(Object object) {
        try {
            JSONWriter jsonWriter = new JSONWriter();
            return jsonWriter.write(object);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private static boolean isContainProp(Field[] fields, String nodeName) {
        if(fields == null || fields.length < 0) {
            return false;
        }
        if(nodeName == null || "".equals(nodeName)) {
            return false;
        }
        for(Field field : fields) {
            if(field.getName().equals(nodeName)) {
                return true;
            }
        }
        return false;
    }
}
src/main/java/com/best/javaSdk/Sign.java
New file
@@ -0,0 +1,53 @@
package com.best.javaSdk;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Sign {
    public static String makeSign(Param param){
        String signString = makeSignString(param);
        String sign = "";
        try {
            sign = digestEncrypte(signString.getBytes("utf-8"), "MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return sign;
    }
    public static String makeBase64Sign(Param param){
        String signString = makeSignString(param);
        String sign = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(signString.getBytes("utf-8"));
            byte[] b = md.digest();
            sign = (new sun.misc.BASE64Encoder()).encode(b);
        }catch (Throwable e) {
            e.printStackTrace();
        }
        return sign;
    }
    private static String makeSignString(Param param) {
        String signString = param.getBizData() + param.getPartnerKey();        return signString;
    }
    public static String digestEncrypte(byte[] plainText, String algorithm) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        MessageDigest md = MessageDigest.getInstance(algorithm);
        md.update(plainText);
        byte[] b = md.digest();
        StringBuilder output = new StringBuilder(32);
        for (int i = 0; i < b.length; i++) {
            String temp = Integer.toHexString(b[i] & 0xff);
            if (temp.length() < 2) {
                output.append("0");
            }
            output.append(temp);
        }
        return output.toString();
    }
}
src/main/java/com/best/javaSdk/converter/Converter.java
New file
@@ -0,0 +1,15 @@
package com.best.javaSdk.converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public interface Converter {
    Object convertXml(Node node, Field field);
    String xmlReverse(Object propValue, Field prop);
    Object convertJson(Object value, Field field);
}
src/main/java/com/best/javaSdk/converter/ConverterUtil.java
New file
@@ -0,0 +1,12 @@
package com.best.javaSdk.converter;
public class ConverterUtil {
    public static Object convert(Class<?> type, String value){
        if(type.isAssignableFrom(int.class)){
            return Integer.parseInt(value);
        }else if(type.isAssignableFrom(double.class)){
            return Double.valueOf(value);
        }
        return value;
    }
}
src/main/java/com/best/javaSdk/converter/XmlConverter.java
New file
@@ -0,0 +1,12 @@
package com.best.javaSdk.converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public interface XmlConverter {
    Object convert(Node node, Field field);
    String reverse(Object propValue, Field prop);
}
src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java
New file
@@ -0,0 +1,25 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class BooleanConverter implements Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return Boolean.parseBoolean(firstChild.getNodeValue());
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return Boolean.parseBoolean(value.toString());
    }
}
src/main/java/com/best/javaSdk/converter/impl/DateConverter.java
New file
@@ -0,0 +1,47 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public class DateConverter implements Converter {
    private static DateFormat format;
    static {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    }
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        try {
            return format.parse(firstChild.getNodeValue().toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        try {
            return format.parse(value.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java
New file
@@ -0,0 +1,25 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class DoubleConverter implements Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return Double.valueOf(firstChild.getNodeValue());
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return Double.valueOf(value.toString());
    }
}
src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java
New file
@@ -0,0 +1,25 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class FloatConverter implements Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return Float.valueOf(firstChild.getNodeValue());
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return Float.valueOf(value.toString());
    }
}
src/main/java/com/best/javaSdk/converter/impl/IntConverter.java
New file
@@ -0,0 +1,24 @@
package com.best.javaSdk.converter.impl;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class IntConverter implements com.best.javaSdk.converter.Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return Integer.parseInt(firstChild.getNodeValue());
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return Integer.parseInt(value.toString());
    }
}
src/main/java/com/best/javaSdk/converter/impl/LongConverter.java
New file
@@ -0,0 +1,25 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class LongConverter implements Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return Long.valueOf(firstChild.getNodeValue());
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return Long.valueOf(value.toString());
    }
}
src/main/java/com/best/javaSdk/converter/impl/StringConverter.java
New file
@@ -0,0 +1,25 @@
package com.best.javaSdk.converter.impl;
import com.best.javaSdk.converter.Converter;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
public class StringConverter implements Converter {
    @Override
    public Object convertXml(Node node, Field field) {
        Node firstChild = node.getFirstChild();
        return firstChild.getNodeValue();
    }
    @Override
    public String xmlReverse(Object propValue, Field prop) {
        String propName = prop.getName();
        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
    }
    @Override
    public Object convertJson(Object value, Field field) {
        return value.toString();
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java
New file
@@ -0,0 +1,41 @@
package com.best.javaSdk.converter.util.jsonReader;
public class BufferErrorListener implements JSONErrorListener {
    protected StringBuffer buffer;
    private String input;
    public BufferErrorListener(StringBuffer buffer) {
        this.buffer = buffer;
    }
    public BufferErrorListener() {
        this(new StringBuffer());
    }
    public void start(String input) {
        this.input = input;
        buffer.setLength(0);
    }
    public void error(String type, int col) {
        buffer.append("expected ");
        buffer.append(type);
        buffer.append(" at column ");
        buffer.append(col);
        buffer.append("\n");
        buffer.append(input);
        buffer.append("\n");
        indent(col-1, buffer);
        buffer.append("^");
    }
    private void indent(int n, StringBuffer ret) {
        for (int i = 0; i< n; ++i) {
            ret.append(' ');
        }
    }
    public void end() {
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java
New file
@@ -0,0 +1,9 @@
package com.best.javaSdk.converter.util.jsonReader;
public class ExceptionErrorListener extends BufferErrorListener {
    public void error(String type, int col) {
        super.error(type, col);
        throw new IllegalArgumentException(buffer.toString());
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java
New file
@@ -0,0 +1,7 @@
package com.best.javaSdk.converter.util.jsonReader;
public interface JSONErrorListener {
    void start(String text);
    void error(String message, int column);
    void end();
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java
New file
@@ -0,0 +1,238 @@
package com.best.javaSdk.converter.util.jsonReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 不能直接使用JSONReader,请用JSONValidatingReader,所以这里改为abstract修饰。
 */
public abstract class JSONReader {
    private static final Object OBJECT_END = new Object();
    private static final Object ARRAY_END = new Object();
    private static final Object COLON = new Object();
    private static final Object COMMA = new Object();
    public static final int FIRST = 0;
    public static final int CURRENT = 1;
    public static final int NEXT = 2;
    private static Map<Character, Character> escapes = new HashMap<Character, Character>();
    static {
        escapes.put(Character.valueOf('"'), Character.valueOf('"'));
        escapes.put(Character.valueOf('\\'), Character.valueOf('\\'));
        escapes.put(Character.valueOf('/'), Character.valueOf('/'));
        escapes.put(Character.valueOf('b'), Character.valueOf('\b'));
        escapes.put(Character.valueOf('f'), Character.valueOf('\f'));
        escapes.put(Character.valueOf('n'), Character.valueOf('\n'));
        escapes.put(Character.valueOf('r'), Character.valueOf('\r'));
        escapes.put(Character.valueOf('t'), Character.valueOf('\t'));
    }
    private CharacterIterator it;
    private char c;
    private Object token;
    private StringBuffer buf = new StringBuffer();
    private char next() {
        c = it.next();
        return c;
    }
    private void skipWhiteSpace() {
        while (Character.isWhitespace(c)) {
            next();
        }
    }
    /**
     * 2
     * @param ci
     * @param start
     * @return
     */
    public Object read(CharacterIterator ci, int start) {
        it = ci;
        switch (start) {
        case FIRST:
            c = it.first();
            break;
        case CURRENT:
            c = it.current();
            break;
        case NEXT:
            c = it.next();
            break;
        }
        return read();
    }
    public Object read(CharacterIterator it) {
        return read(it, NEXT);
    }
    /**
     * 1
     * @param string
     * @return
     */
    public Object read(String string) {
        return read(new StringCharacterIterator(string), FIRST);
    }
    /**
     * 3
     * @return
     */
    private Object read() {
        skipWhiteSpace();
        char ch = c;
        next();
        switch (ch) {
            case '"': token = string(); break;
            case '[': token = array(); break;
            case ']': token = ARRAY_END; break;
            case ',': token = COMMA; break;
            case '{': token = object(); break;
            case '}': token = OBJECT_END; break;
            case ':': token = COLON; break;
            case 't':
                next(); next(); next(); // assumed r-u-e
                token = Boolean.TRUE;
                break;
            case'f':
                next(); next(); next(); next(); // assumed a-l-s-e
                token = Boolean.FALSE;
                break;
            case 'n':
                next(); next(); next(); // assumed u-l-l
                token = null;
                break;
            default:
                c = it.previous();
                if (Character.isDigit(c) || c == '-') {
                    token = number();
                }
        }
        // System.out.println("token: " + token); // enable this line to see the token stream
        return token;
    }
    private Object object() {
        Map<Object, Object> ret = new HashMap<Object, Object>();
        Object key = read();
        while (token != OBJECT_END) {
            read(); // should be a colon
            if (token != OBJECT_END) {
                ret.put(key, read());
                if (read() == COMMA) {
                    key = read();
                }
            }
        }
        return ret;
    }
    private Object array() {
        List<Object> ret = new ArrayList<Object>();
        Object value = read();
        while (token != ARRAY_END) {
            ret.add(value);
            if (read() == COMMA) {
                value = read();
            }
        }
        return ret;
    }
    private Object number() {
        int length = 0;
        boolean isFloatingPoint = false;
        buf.setLength(0);
        if (c == '-') {
            add();
        }
        length += addDigits();
        if (c == '.') {
            add();
            length += addDigits();
            isFloatingPoint = true;
        }
        if (c == 'e' || c == 'E') {
            add();
            if (c == '+' || c == '-') {
                add();
            }
            addDigits();
            isFloatingPoint = true;
        }
        String s = buf.toString();
        return isFloatingPoint ? (length < 17) ? (Object)Double.valueOf(s) : new BigDecimal(s) : (length < 19) ? (Object)Long.valueOf(s) : new BigInteger(s);
    }
    private int addDigits() {
        int ret;
        for (ret = 0; Character.isDigit(c); ++ret) {
            add();
        }
        return ret;
    }
    private Object string() {
        buf.setLength(0);
        while (c != '"') {
            if (c == '\\') {
                next();
                if (c == 'u') {
                    add(unicode());
                } else {
                    Object value = escapes.get(Character.valueOf(c));
                    if (value != null) {
                        add(((Character) value).charValue());
                    }
                }
            } else {
                add();
            }
        }
        next();
        return buf.toString();
    }
    private void add(char cc) {
        buf.append(cc);
        next();
    }
    private void add() {
        add(c);
    }
    private char unicode() {
        int value = 0;
        for (int i = 0; i < 4; ++i) {
            switch (next()) {
            case '0': case '1': case '2': case '3': case '4':
            case '5': case '6': case '7': case '8': case '9':
                value = (value << 4) + c - '0';
                break;
            case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                value = (value << 4) + c - 'k';
                break;
            case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                value = (value << 4) + c - 'K';
                break;
            }
        }
        return (char) value;
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java
New file
@@ -0,0 +1,23 @@
package com.best.javaSdk.converter.util.jsonReader;
public class JSONValidatingReader extends JSONReader {
    public static final Object INVALID = new Object();
    private JSONValidator validator;
    public JSONValidatingReader(JSONValidator validator) {
        this.validator = validator;
    }
    public JSONValidatingReader(ExceptionErrorListener listener) {
        this(new JSONValidator(listener));
    }
/*    public JSONValidatingReader() {
        this(new StdoutStreamErrorListener());
    }*/
    public Object read(String string) {
        if (!validator.validate(string)) return INVALID;
        return super.read(string);
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java
New file
@@ -0,0 +1,56 @@
package com.best.javaSdk.converter.util.jsonReader;
public class JSONValidatingWriter extends JSONWriter {
    private JSONValidator validator;
    public JSONValidatingWriter(JSONValidator validator, boolean emitClassName) {
        super(emitClassName);
        this.validator = validator;
    }
    public JSONValidatingWriter(JSONValidator validator) {
        this.validator = validator;
    }
    public JSONValidatingWriter(JSONErrorListener listener, boolean emitClassName) {
        this(new JSONValidator(listener), emitClassName);
    }
    public JSONValidatingWriter(JSONErrorListener listener) {
        this(new JSONValidator(listener));
    }
    public JSONValidatingWriter() {
        this(new StdoutStreamErrorListener());
    }
    public JSONValidatingWriter(boolean emitClassName) {
        this(new StdoutStreamErrorListener(), emitClassName);
    }
    private String validate(String text) {
        validator.validate(text);
        return text;
    }
    public String write(Object object) {
        return validate(super.write(object));
    }
    public String write(long n) {
        return validate(super.write(n));
    }
    public String write(double d) {
        return validate(super.write(d));
    }
    public String write(char c) {
        return validate(super.write(c));
    }
    public String write(boolean b) {
        return validate(super.write(b));
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java
New file
@@ -0,0 +1,214 @@
package com.best.javaSdk.converter.util.jsonReader;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
public class JSONValidator {
    private JSONErrorListener listener;
    private CharacterIterator it;
    private char c;
    private int col;
    public JSONValidator(JSONErrorListener listener) {
        this.listener = listener;
    }
    public boolean validate(String input) {
        input = input.trim();
        listener.start(input);
        boolean ret = valid(input);
        listener.end();
        return ret;
    }
    private boolean valid(String input) {
        if ("".equals(input)) return true;
        boolean ret = true;
        it = new StringCharacterIterator(input);
        c = it.first();
        col = 1;
        if (!value()) {
            ret = error("value", 1);
        } else {
            skipWhiteSpace();
            if (c != CharacterIterator.DONE) {
                ret = error("end", col);
            }
        }
        return ret;
    }
    private boolean value() {
        return
            literal("true") ||
            literal("false") ||
            literal("null") ||
            string() ||
            number() ||
            object() ||
            array();
    }
    private boolean literal(String text) {
        CharacterIterator ci = new StringCharacterIterator(text);
        char t = ci.first();
        if (c != t) return false;
        int start = col;
        boolean ret = true;
        for (t = ci.next(); t != CharacterIterator.DONE; t = ci.next()) {
            if (t != nextCharacter()) {
                ret = false;
                break;
            }
        }
        nextCharacter();
        if (!ret) error("literal " + text, start);
        return ret;
    }
    private boolean array() {
        return aggregate('[', ']', false);
    }
    private boolean object() {
        return aggregate('{', '}', true);
    }
    private boolean aggregate(char entryCharacter, char exitCharacter, boolean prefix) {
        if (c != entryCharacter) return false;
        nextCharacter();
        skipWhiteSpace();
        if (c == exitCharacter) {
            nextCharacter();
            return true;
        }
        for(;;) {
            if (prefix) {
                int start = col;
                if (!string()) return error("string", start);
                skipWhiteSpace();
                if (c != ':') return error("colon", col);
                nextCharacter();
                skipWhiteSpace();
            }
            if (value()) {
                skipWhiteSpace();
                if (c == ',') {
                    nextCharacter();
                } else if (c == exitCharacter) {
                    break;
                } else {
                    return error("comma or " + exitCharacter, col);
                }
            } else {
                return error("value", col);
            }
            skipWhiteSpace();
        }
        nextCharacter();
        return true;
    }
    private boolean number() {
        if (!Character.isDigit(c) && c != '-') return false;
        int start = col;
        if (c == '-') nextCharacter();
        if (c == '0') {
            nextCharacter();
        } else if (Character.isDigit(c)) {
            while(Character.isDigit(c)) nextCharacter();
        } else {
            return error("number", start);
        }
        if (c == '.') {
            nextCharacter();
            if (Character.isDigit(c)) {
                while(Character.isDigit(c)) nextCharacter();
            } else {
                return error("number", start);
            }
        }
        if (c == 'e' || c == 'E') {
            nextCharacter();
            if (c == '+' || c=='-') {
                nextCharacter();
            }
            if (Character.isDigit(c)) {
                while(Character.isDigit(c)) nextCharacter();
            } else {
                return error("number", start);
            }
        }
        return true;
    }
    private boolean string() {
        if (c != '"') return false;
        int start = col;
        boolean escaped = false;
        for (nextCharacter(); c != CharacterIterator.DONE; nextCharacter()) {
            if (!escaped && c == '\\') {
                escaped = true;
            } else if (escaped) {
                if (!escape()) {
                    return false;
                }
                escaped = false;
            } else if (c == '"') {
                nextCharacter();
                return true;
            }
        }
        return error("quoted string", start);
    }
    private boolean escape() {
        int start = col-1;
        if ("\\\"/bfnrtu".indexOf(c) < 0) {
            return error("escape sequence \\\",\\\\,\\/,\\b,\\f,\\n,\\r,\\t or \\uxxxx", start);
        }
        if (c == 'u') {
            if (!ishex(nextCharacter()) || !ishex(nextCharacter()) ||
                    !ishex(nextCharacter()) || !ishex(nextCharacter())) {
                return error("unicode escape sequence \\uxxxx", start);
            }
        }
        return true;
    }
    private boolean ishex(char d) {
        return "0123456789abcdefABCDEF".indexOf(c) >= 0;
    }
    private char nextCharacter() {
        c = it.next();
        ++col;
        return c;
    }
    private void skipWhiteSpace() {
        while (Character.isWhitespace(c)) {
            nextCharacter();
        }
    }
    private boolean error(String type, int col) {
        if (listener != null) listener.error(type, col);
        return false;
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java
New file
@@ -0,0 +1,221 @@
package com.best.javaSdk.converter.util.jsonReader;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.CharacterIterator;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.StringCharacterIterator;
import java.util.*;
public class JSONWriter {
    private StringBuffer buf = new StringBuffer();
    private Stack<Object> calls = new Stack<Object>();
    private boolean emitClassName = true;
    private DateFormat format;
    public JSONWriter(boolean emitClassName) {
        this.emitClassName = emitClassName;
    }
    public JSONWriter() {
        this(false);
    }
    public JSONWriter(DateFormat format) {
        this(false);
        this.format = format;
    }
    public String write(Object object) {
        buf.setLength(0);
        value(object);
        return buf.toString();
    }
    public String write(long n) {
        return String.valueOf(n);
    }
    public String write(double d) {
        return String.valueOf(d);
    }
    public String write(char c) {
        return "\"" + c + "\"";
    }
    public String write(boolean b) {
        return String.valueOf(b);
    }
    private void value(Object object) {
        if (object == null || cyclic(object)) {
            add(null);
        } else {
            calls.push(object);
            if (object instanceof Class<?>) string(object);
            else if (object instanceof Boolean) bool(((Boolean) object).booleanValue());
            else if (object instanceof Number) add(object);
            else if (object instanceof String) string(object);
            else if (object instanceof Character) string(object);
            else if (object instanceof Map<?, ?>) map((Map<?, ?>)object);
            else if (object.getClass().isArray()) array(object);
            else if (object instanceof Iterator<?>) array((Iterator<?>)object);
            else if (object instanceof Collection<?>) array(((Collection<?>)object).iterator());
            else if (object instanceof Date) date((Date)object);
            else bean(object);
            calls.pop();
        }
    }
    private boolean cyclic(Object object) {
        Iterator<Object> it = calls.iterator();
        while (it.hasNext()) {
            Object called = it.next();
            if (object == called) return true;
        }
        return false;
    }
    private void bean(Object object) {
        add("{");
        BeanInfo info;
        boolean addedSomething = false;
        try {
            info = Introspector.getBeanInfo(object.getClass());
            PropertyDescriptor[] props = info.getPropertyDescriptors();
            for (int i = 0; i < props.length; ++i) {
                PropertyDescriptor prop = props[i];
                String name = prop.getName();
                Method accessor = prop.getReadMethod();
                if ((emitClassName || !"class".equals(name)) && accessor != null) {
                    if (!accessor.isAccessible()) accessor.setAccessible(true);
                    Object value = accessor.invoke(object, (Object[])null);
                    if (value == null) continue;
                    if (addedSomething) add(',');
                    add(name, value);
                    addedSomething = true;
                }
            }
            Field[] ff = object.getClass().getFields();
            for (int i = 0; i < ff.length; ++i) {
                Field field = ff[i];
                Object value = field.get(object);
                if (value == null) continue;
                if (addedSomething) add(',');
                add(field.getName(), value);
                addedSomething = true;
            }
        } catch (IllegalAccessException iae) {
            iae.printStackTrace();
        } catch (InvocationTargetException ite) {
            ite.getCause().printStackTrace();
            ite.printStackTrace();
        } catch (IntrospectionException ie) {
            ie.printStackTrace();
        }
        add("}");
    }
    private void add(String name, Object value) {
        add('"');
        add(name);
        add("\":");
        value(value);
    }
    private void map(Map<?, ?> map) {
        add("{");
        Iterator<?> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<?, ?> e = (Map.Entry<?, ?>) it.next();
            value(e.getKey());
            add(":");
            value(e.getValue());
            if (it.hasNext()) add(',');
        }
        add("}");
    }
    private void array(Iterator<?> it) {
        add("[");
        while (it.hasNext()) {
            value(it.next());
            if (it.hasNext()) add(",");
        }
        add("]");
    }
    private void array(Object object) {
        add("[");
        int length = Array.getLength(object);
        for (int i = 0; i < length; ++i) {
            value(Array.get(object, i));
            if (i < length - 1) add(',');
        }
        add("]");
    }
    private void bool(boolean b) {
        add(b ? "true" : "false");
    }
    private void date(Date date) {
        if (this.format == null) {
            this.format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            this.format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        }
        add("\"");
        add(format.format(date));
        add("\"");
    }
    private void string(Object obj) {
        add('"');
        CharacterIterator it = new StringCharacterIterator(obj.toString());
        for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
            if (c == '"') add("\\\"");
            else if (c == '\\') add("\\\\");
            else if (c == '/') add("\\/");
            else if (c == '\b') add("\\b");
            else if (c == '\f') add("\\f");
            else if (c == '\n') add("\\n");
            else if (c == '\r') add("\\r");
            else if (c == '\t') add("\\t");
            else if (Character.isISOControl(c)) {
                unicode(c);
            } else {
                add(c);
            }
        }
        add('"');
    }
    private void add(Object obj) {
        buf.append(obj);
    }
    private void add(char c) {
        buf.append(c);
    }
    static char[] hex = "0123456789ABCDEF".toCharArray();
    private void unicode(char c) {
        add("\\u");
        int n = c;
        for (int i = 0; i < 4; ++i) {
            int digit = (n & 0xf000) >> 12;
            add(hex[digit]);
            n <<= 4;
        }
    }
}
src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java
New file
@@ -0,0 +1,8 @@
package com.best.javaSdk.converter.util.jsonReader;
public class StdoutStreamErrorListener extends BufferErrorListener {
    public void end() {
        System.out.print(buffer.toString());
    }
}
src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java
New file
@@ -0,0 +1,44 @@
package com.best.javaSdk.kdCancelOrderNotify.request;
import com.best.javaSdk.BaseRequest;
import com.best.javaSdk.BaseResponse;
import com.best.javaSdk.Parser;
public class KdCancelOrderNotifyReq implements BaseRequest {
    private String txLogisticId;
    private String reason;
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getReason()
    {
        return this.reason;
    }
    public void setReason(String value)
    {
        this.reason = value;
    }
    public String obtainServiceType() {
        return "KD_CANCEL_ORDER_NOTIFY";
    }
    public BaseResponse makeResponse(String rsp, String format) {
        if ("xml".equalsIgnoreCase(format)) {
            return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCancelOrderNotify.response.KdCancelOrderNotifyRsp.class);
        }
        return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCancelOrderNotify.response.KdCancelOrderNotifyRsp.class);
    }
}
src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java
New file
@@ -0,0 +1,53 @@
package com.best.javaSdk.kdCancelOrderNotify.response;
import com.best.javaSdk.BaseResponse;
public class KdCancelOrderNotifyRsp implements BaseResponse {
    private boolean result;
    private String remark;
    private String errorCode;
    private String errorDescription;
    public boolean getResult()
    {
        return this.result;
    }
    public void setResult(boolean value)
    {
        this.result = value;
    }
    public String getRemark()
    {
        return this.remark;
    }
    public void setRemark(String value)
    {
        this.remark = value;
    }
    public String getErrorCode()
    {
        return this.errorCode;
    }
    public void setErrorCode(String value)
    {
        this.errorCode = value;
    }
    public String getErrorDescription()
    {
        return this.errorDescription;
    }
    public void setErrorDescription(String value)
    {
        this.errorDescription = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java
New file
@@ -0,0 +1,74 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
public class Item {
    private long itemCount;
    private long itemWeight;
    private long itemLength;
    private long itemWidth;
    private long itemHeight;
    private String itemName;
    public long getItemCount()
    {
        return this.itemCount;
    }
    public void setItemCount(long value)
    {
        this.itemCount = value;
    }
    public long getItemWeight()
    {
        return this.itemWeight;
    }
    public void setItemWeight(long value)
    {
        this.itemWeight = value;
    }
    public long getItemLength()
    {
        return this.itemLength;
    }
    public void setItemLength(long value)
    {
        this.itemLength = value;
    }
    public long getItemWidth()
    {
        return this.itemWidth;
    }
    public void setItemWidth(long value)
    {
        this.itemWidth = value;
    }
    public long getItemHeight()
    {
        return this.itemHeight;
    }
    public void setItemHeight(long value)
    {
        this.itemHeight = value;
    }
    public String getItemName()
    {
        return this.itemName;
    }
    public void setItemName(String value)
    {
        this.itemName = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java
New file
@@ -0,0 +1,20 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Item;
import java.util.List;
public class Items {
    private List<Item> item;
    public List<Item>  getItem()
    {
        return this.item;
    }
    public void setItem(List<Item>  value)
    {
        this.item = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java
New file
@@ -0,0 +1,333 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Sender;
import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Receiver;
import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Items;
import com.best.javaSdk.BaseRequest;
import com.best.javaSdk.BaseResponse;
import com.best.javaSdk.Parser;
public class KdCreateWaybillOrderNotifyReq implements BaseRequest {
    private long piece;
    private double length;
    private double width;
    private double height;
    private String customerName;
    private String txLogisticId;
    private String mailNo;
    private String tradeNo;
    private String serviceType;
    private long sendStartTime;
    private long sendEndTime;
    private String recSite;
    private double goodsValue;
    private double itemsValue;
    private double insuranceValue;
    private String special;
    private String bankCardOwner;
    private String bankCode;
    private String bankCardNo;
    private String remark;
    private Sender sender;
    private Receiver receiver;
    private Items items;
    private double itemsWeight;
    private String certificateType;
    private String certificateNo;
    private String deliverySite;
    private String deliveryType;
    public long getPiece()
    {
        return this.piece;
    }
    public void setPiece(long value)
    {
        this.piece = value;
    }
    public double getLength()
    {
        return this.length;
    }
    public void setLength(double value)
    {
        this.length = value;
    }
    public double getWidth()
    {
        return this.width;
    }
    public void setWidth(double value)
    {
        this.width = value;
    }
    public double getHeight()
    {
        return this.height;
    }
    public void setHeight(double value)
    {
        this.height = value;
    }
    public String getCustomerName()
    {
        return this.customerName;
    }
    public void setCustomerName(String value)
    {
        this.customerName = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getTradeNo()
    {
        return this.tradeNo;
    }
    public void setTradeNo(String value)
    {
        this.tradeNo = value;
    }
    public String getServiceType()
    {
        return this.serviceType;
    }
    public void setServiceType(String value)
    {
        this.serviceType = value;
    }
    public long getSendStartTime()
    {
        return this.sendStartTime;
    }
    public void setSendStartTime(long value)
    {
        this.sendStartTime = value;
    }
    public long getSendEndTime()
    {
        return this.sendEndTime;
    }
    public void setSendEndTime(long value)
    {
        this.sendEndTime = value;
    }
    public String getRecSite()
    {
        return this.recSite;
    }
    public void setRecSite(String value)
    {
        this.recSite = value;
    }
    public double getGoodsValue()
    {
        return this.goodsValue;
    }
    public void setGoodsValue(double value)
    {
        this.goodsValue = value;
    }
    public double getItemsValue()
    {
        return this.itemsValue;
    }
    public void setItemsValue(double value)
    {
        this.itemsValue = value;
    }
    public double getInsuranceValue()
    {
        return this.insuranceValue;
    }
    public void setInsuranceValue(double value)
    {
        this.insuranceValue = value;
    }
    public String getSpecial()
    {
        return this.special;
    }
    public void setSpecial(String value)
    {
        this.special = value;
    }
    public String getBankCardOwner()
    {
        return this.bankCardOwner;
    }
    public void setBankCardOwner(String value)
    {
        this.bankCardOwner = value;
    }
    public String getBankCode()
    {
        return this.bankCode;
    }
    public void setBankCode(String value)
    {
        this.bankCode = value;
    }
    public String getBankCardNo()
    {
        return this.bankCardNo;
    }
    public void setBankCardNo(String value)
    {
        this.bankCardNo = value;
    }
    public String getRemark()
    {
        return this.remark;
    }
    public void setRemark(String value)
    {
        this.remark = value;
    }
    public Sender getSender()
    {
        return this.sender;
    }
    public void setSender(Sender value)
    {
        this.sender = value;
    }
    public Receiver getReceiver()
    {
        return this.receiver;
    }
    public void setReceiver(Receiver value)
    {
        this.receiver = value;
    }
    public Items getItems()
    {
        return this.items;
    }
    public void setItems(Items value)
    {
        this.items = value;
    }
    public double getItemsWeight()
    {
        return this.itemsWeight;
    }
    public void setItemsWeight(double value)
    {
        this.itemsWeight = value;
    }
    public String getCertificateType()
    {
        return this.certificateType;
    }
    public void setCertificateType(String value)
    {
        this.certificateType = value;
    }
    public String getCertificateNo()
    {
        return this.certificateNo;
    }
    public void setCertificateNo(String value)
    {
        this.certificateNo = value;
    }
    public String getDeliverySite()
    {
        return this.deliverySite;
    }
    public void setDeliverySite(String value)
    {
        this.deliverySite = value;
    }
    public String getDeliveryType()
    {
        return this.deliveryType;
    }
    public void setDeliveryType(String value)
    {
        this.deliveryType = value;
    }
    public String obtainServiceType() {
        return "KD_CREATE_WAYBILL_ORDER_NOTIFY";
    }
    public BaseResponse makeResponse(String rsp, String format) {
        if ("xml".equalsIgnoreCase(format)) {
            return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderNotify.response.KdCreateWaybillOrderNotifyRsp.class);
        }
        return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderNotify.response.KdCreateWaybillOrderNotifyRsp.class);
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java
New file
@@ -0,0 +1,107 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
public class Receiver {
    private String name;
    private String postCode;
    private String mobile;
    private String prov;
    private String city;
    private String county;
    private String address;
    private String email;
    private String country;
    public String getName()
    {
        return this.name;
    }
    public void setName(String value)
    {
        this.name = value;
    }
    public String getPostCode()
    {
        return this.postCode;
    }
    public void setPostCode(String value)
    {
        this.postCode = value;
    }
    public String getMobile()
    {
        return this.mobile;
    }
    public void setMobile(String value)
    {
        this.mobile = value;
    }
    public String getProv()
    {
        return this.prov;
    }
    public void setProv(String value)
    {
        this.prov = value;
    }
    public String getCity()
    {
        return this.city;
    }
    public void setCity(String value)
    {
        this.city = value;
    }
    public String getCounty()
    {
        return this.county;
    }
    public void setCounty(String value)
    {
        this.county = value;
    }
    public String getAddress()
    {
        return this.address;
    }
    public void setAddress(String value)
    {
        this.address = value;
    }
    public String getEmail()
    {
        return this.email;
    }
    public void setEmail(String value)
    {
        this.email = value;
    }
    public String getCountry()
    {
        return this.country;
    }
    public void setCountry(String value)
    {
        this.country = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java
New file
@@ -0,0 +1,107 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
public class Sender {
    private String name;
    private String postCode;
    private String mobile;
    private String prov;
    private String city;
    private String county;
    private String address;
    private String email;
    private String country;
    public String getName()
    {
        return this.name;
    }
    public void setName(String value)
    {
        this.name = value;
    }
    public String getPostCode()
    {
        return this.postCode;
    }
    public void setPostCode(String value)
    {
        this.postCode = value;
    }
    public String getMobile()
    {
        return this.mobile;
    }
    public void setMobile(String value)
    {
        this.mobile = value;
    }
    public String getProv()
    {
        return this.prov;
    }
    public void setProv(String value)
    {
        this.prov = value;
    }
    public String getCity()
    {
        return this.city;
    }
    public void setCity(String value)
    {
        this.city = value;
    }
    public String getCounty()
    {
        return this.county;
    }
    public void setCounty(String value)
    {
        this.county = value;
    }
    public String getAddress()
    {
        return this.address;
    }
    public void setAddress(String value)
    {
        this.address = value;
    }
    public String getEmail()
    {
        return this.email;
    }
    public void setEmail(String value)
    {
        this.email = value;
    }
    public String getCountry()
    {
        return this.country;
    }
    public void setCountry(String value)
    {
        this.country = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java
New file
@@ -0,0 +1,19 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.response;
import java.util.List;
public class ChildMailNo {
    private List<String> mailNo;
    public List<String>  getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(List<String>  value)
    {
        this.mailNo = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java
New file
@@ -0,0 +1,98 @@
package com.best.javaSdk.kdCreateWaybillOrderNotify.response;
import com.best.javaSdk.kdCreateWaybillOrderNotify.response.ChildMailNo;
import com.best.javaSdk.BaseResponse;
public class KdCreateWaybillOrderNotifyRsp implements BaseResponse {
    private ChildMailNo childMailNo;
    private boolean result;
    private String txLogisticId;
    private String mailNo;
    private String triSortCode;
    private String packRule;
    private String errorCode;
    private String errorDescription;
    public ChildMailNo getChildMailNo()
    {
        return this.childMailNo;
    }
    public void setChildMailNo(ChildMailNo value)
    {
        this.childMailNo = value;
    }
    public boolean getResult()
    {
        return this.result;
    }
    public void setResult(boolean value)
    {
        this.result = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getTriSortCode()
    {
        return this.triSortCode;
    }
    public void setTriSortCode(String value)
    {
        this.triSortCode = value;
    }
    public String getPackRule()
    {
        return this.packRule;
    }
    public void setPackRule(String value)
    {
        this.packRule = value;
    }
    public String getErrorCode()
    {
        return this.errorCode;
    }
    public void setErrorCode(String value)
    {
        this.errorCode = value;
    }
    public String getErrorDescription()
    {
        return this.errorDescription;
    }
    public void setErrorDescription(String value)
    {
        this.errorDescription = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java
New file
@@ -0,0 +1,74 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
public class Item {
    private long itemCount;
    private long itemWeight;
    private long itemLength;
    private long itemWidth;
    private long itemHeight;
    private String itemName;
    public long getItemCount()
    {
        return this.itemCount;
    }
    public void setItemCount(long value)
    {
        this.itemCount = value;
    }
    public long getItemWeight()
    {
        return this.itemWeight;
    }
    public void setItemWeight(long value)
    {
        this.itemWeight = value;
    }
    public long getItemLength()
    {
        return this.itemLength;
    }
    public void setItemLength(long value)
    {
        this.itemLength = value;
    }
    public long getItemWidth()
    {
        return this.itemWidth;
    }
    public void setItemWidth(long value)
    {
        this.itemWidth = value;
    }
    public long getItemHeight()
    {
        return this.itemHeight;
    }
    public void setItemHeight(long value)
    {
        this.itemHeight = value;
    }
    public String getItemName()
    {
        return this.itemName;
    }
    public void setItemName(String value)
    {
        this.itemName = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java
New file
@@ -0,0 +1,20 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Item;
import java.util.List;
public class Items {
    private List<Item> item;
    public List<Item>  getItem()
    {
        return this.item;
    }
    public void setItem(List<Item>  value)
    {
        this.item = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java
New file
@@ -0,0 +1,333 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Sender;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Receiver;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Items;
import com.best.javaSdk.BaseRequest;
import com.best.javaSdk.BaseResponse;
import com.best.javaSdk.Parser;
public class KdCreateWaybillOrderPdfNotifyReq implements BaseRequest {
    private String customerName;
    private String txLogisticId;
    private String mailNo;
    private String tradeNo;
    private String serviceType;
    private long sendStartTime;
    private long sendEndTime;
    private String recSite;
    private long piece;
    private double goodsValue;
    private double length;
    private double itemsValue;
    private double width;
    private double insuranceValue;
    private double height;
    private String special;
    private String bankCardOwner;
    private String bankCode;
    private String bankCardNo;
    private String remark;
    private Sender sender;
    private Receiver receiver;
    private Items items;
    private double itemsWeight;
    private String certificateType;
    private String certificateNo;
    private String deliveryType;
    private String deliverySite;
    public String getCustomerName()
    {
        return this.customerName;
    }
    public void setCustomerName(String value)
    {
        this.customerName = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getTradeNo()
    {
        return this.tradeNo;
    }
    public void setTradeNo(String value)
    {
        this.tradeNo = value;
    }
    public String getServiceType()
    {
        return this.serviceType;
    }
    public void setServiceType(String value)
    {
        this.serviceType = value;
    }
    public long getSendStartTime()
    {
        return this.sendStartTime;
    }
    public void setSendStartTime(long value)
    {
        this.sendStartTime = value;
    }
    public long getSendEndTime()
    {
        return this.sendEndTime;
    }
    public void setSendEndTime(long value)
    {
        this.sendEndTime = value;
    }
    public String getRecSite()
    {
        return this.recSite;
    }
    public void setRecSite(String value)
    {
        this.recSite = value;
    }
    public long getPiece()
    {
        return this.piece;
    }
    public void setPiece(long value)
    {
        this.piece = value;
    }
    public double getGoodsValue()
    {
        return this.goodsValue;
    }
    public void setGoodsValue(double value)
    {
        this.goodsValue = value;
    }
    public double getLength()
    {
        return this.length;
    }
    public void setLength(double value)
    {
        this.length = value;
    }
    public double getItemsValue()
    {
        return this.itemsValue;
    }
    public void setItemsValue(double value)
    {
        this.itemsValue = value;
    }
    public double getWidth()
    {
        return this.width;
    }
    public void setWidth(double value)
    {
        this.width = value;
    }
    public double getInsuranceValue()
    {
        return this.insuranceValue;
    }
    public void setInsuranceValue(double value)
    {
        this.insuranceValue = value;
    }
    public double getHeight()
    {
        return this.height;
    }
    public void setHeight(double value)
    {
        this.height = value;
    }
    public String getSpecial()
    {
        return this.special;
    }
    public void setSpecial(String value)
    {
        this.special = value;
    }
    public String getBankCardOwner()
    {
        return this.bankCardOwner;
    }
    public void setBankCardOwner(String value)
    {
        this.bankCardOwner = value;
    }
    public String getBankCode()
    {
        return this.bankCode;
    }
    public void setBankCode(String value)
    {
        this.bankCode = value;
    }
    public String getBankCardNo()
    {
        return this.bankCardNo;
    }
    public void setBankCardNo(String value)
    {
        this.bankCardNo = value;
    }
    public String getRemark()
    {
        return this.remark;
    }
    public void setRemark(String value)
    {
        this.remark = value;
    }
    public Sender getSender()
    {
        return this.sender;
    }
    public void setSender(Sender value)
    {
        this.sender = value;
    }
    public Receiver getReceiver()
    {
        return this.receiver;
    }
    public void setReceiver(Receiver value)
    {
        this.receiver = value;
    }
    public Items getItems()
    {
        return this.items;
    }
    public void setItems(Items value)
    {
        this.items = value;
    }
    public double getItemsWeight()
    {
        return this.itemsWeight;
    }
    public void setItemsWeight(double value)
    {
        this.itemsWeight = value;
    }
    public String getCertificateType()
    {
        return this.certificateType;
    }
    public void setCertificateType(String value)
    {
        this.certificateType = value;
    }
    public String getCertificateNo()
    {
        return this.certificateNo;
    }
    public void setCertificateNo(String value)
    {
        this.certificateNo = value;
    }
    public String getDeliveryType()
    {
        return this.deliveryType;
    }
    public void setDeliveryType(String value)
    {
        this.deliveryType = value;
    }
    public String getDeliverySite()
    {
        return this.deliverySite;
    }
    public void setDeliverySite(String value)
    {
        this.deliverySite = value;
    }
    public String obtainServiceType() {
        return "KD_CREATE_WAYBILL_ORDER_PDF_NOTIFY";
    }
    public BaseResponse makeResponse(String rsp, String format) {
        if ("xml".equalsIgnoreCase(format)) {
            return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.KdCreateWaybillOrderPdfNotifyRsp.class);
        }
        return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.KdCreateWaybillOrderPdfNotifyRsp.class);
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java
New file
@@ -0,0 +1,107 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
public class Receiver {
    private String name;
    private String postCode;
    private String mobile;
    private String prov;
    private String city;
    private String county;
    private String address;
    private String email;
    private String country;
    public String getName()
    {
        return this.name;
    }
    public void setName(String value)
    {
        this.name = value;
    }
    public String getPostCode()
    {
        return this.postCode;
    }
    public void setPostCode(String value)
    {
        this.postCode = value;
    }
    public String getMobile()
    {
        return this.mobile;
    }
    public void setMobile(String value)
    {
        this.mobile = value;
    }
    public String getProv()
    {
        return this.prov;
    }
    public void setProv(String value)
    {
        this.prov = value;
    }
    public String getCity()
    {
        return this.city;
    }
    public void setCity(String value)
    {
        this.city = value;
    }
    public String getCounty()
    {
        return this.county;
    }
    public void setCounty(String value)
    {
        this.county = value;
    }
    public String getAddress()
    {
        return this.address;
    }
    public void setAddress(String value)
    {
        this.address = value;
    }
    public String getEmail()
    {
        return this.email;
    }
    public void setEmail(String value)
    {
        this.email = value;
    }
    public String getCountry()
    {
        return this.country;
    }
    public void setCountry(String value)
    {
        this.country = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java
New file
@@ -0,0 +1,107 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
public class Sender {
    private String name;
    private String postCode;
    private String mobile;
    private String prov;
    private String city;
    private String county;
    private String address;
    private String email;
    private String country;
    public String getName()
    {
        return this.name;
    }
    public void setName(String value)
    {
        this.name = value;
    }
    public String getPostCode()
    {
        return this.postCode;
    }
    public void setPostCode(String value)
    {
        this.postCode = value;
    }
    public String getMobile()
    {
        return this.mobile;
    }
    public void setMobile(String value)
    {
        this.mobile = value;
    }
    public String getProv()
    {
        return this.prov;
    }
    public void setProv(String value)
    {
        this.prov = value;
    }
    public String getCity()
    {
        return this.city;
    }
    public void setCity(String value)
    {
        this.city = value;
    }
    public String getCounty()
    {
        return this.county;
    }
    public void setCounty(String value)
    {
        this.county = value;
    }
    public String getAddress()
    {
        return this.address;
    }
    public void setAddress(String value)
    {
        this.address = value;
    }
    public String getEmail()
    {
        return this.email;
    }
    public void setEmail(String value)
    {
        this.email = value;
    }
    public String getCountry()
    {
        return this.country;
    }
    public void setCountry(String value)
    {
        this.country = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java
New file
@@ -0,0 +1,19 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response;
import java.util.List;
public class ChildMailNo {
    private List<String> mailNo;
    public List<String>  getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(List<String>  value)
    {
        this.mailNo = value;
    }
}
src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java
New file
@@ -0,0 +1,120 @@
package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response;
import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.ChildMailNo;
import java.util.List;
import com.best.javaSdk.BaseResponse;
public class KdCreateWaybillOrderPdfNotifyRsp implements BaseResponse {
    private ChildMailNo childMailNo;
    private boolean result;
    private String txLogisticId;
    private String mailNo;
    private String errorCode;
    private String errorDescription;
    private String pdfStream;
    private String triSortCode;
    private List<String> pdfStreamList;
    private String packRule;
    public ChildMailNo getChildMailNo()
    {
        return this.childMailNo;
    }
    public void setChildMailNo(ChildMailNo value)
    {
        this.childMailNo = value;
    }
    public boolean getResult()
    {
        return this.result;
    }
    public void setResult(boolean value)
    {
        this.result = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getErrorCode()
    {
        return this.errorCode;
    }
    public void setErrorCode(String value)
    {
        this.errorCode = value;
    }
    public String getErrorDescription()
    {
        return this.errorDescription;
    }
    public void setErrorDescription(String value)
    {
        this.errorDescription = value;
    }
    public String getPdfStream()
    {
        return this.pdfStream;
    }
    public void setPdfStream(String value)
    {
        this.pdfStream = value;
    }
    public String getTriSortCode()
    {
        return this.triSortCode;
    }
    public void setTriSortCode(String value)
    {
        this.triSortCode = value;
    }
    public List<String>  getPdfStreamList()
    {
        return this.pdfStreamList;
    }
    public void setPdfStreamList(List<String>  value)
    {
        this.pdfStreamList = value;
    }
    public String getPackRule()
    {
        return this.packRule;
    }
    public void setPackRule(String value)
    {
        this.packRule = value;
    }
}
src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java
New file
@@ -0,0 +1,44 @@
package com.best.javaSdk.kdTraceQuery.request;
import com.best.javaSdk.BaseRequest;
import com.best.javaSdk.BaseResponse;
import com.best.javaSdk.Parser;
public class KdTraceQueryReq implements BaseRequest {
    private MailNos mailNos;
    private String langType;
    public MailNos getMailNos()
    {
        return this.mailNos;
    }
    public void setMailNos(MailNos value)
    {
        this.mailNos = value;
    }
    public String getLangType()
    {
        return this.langType;
    }
    public void setLangType(String value)
    {
        this.langType = value;
    }
    public String obtainServiceType() {
        return "KD_TRACE_QUERY";
    }
    public BaseResponse makeResponse(String rsp, String format) {
        if ("xml".equalsIgnoreCase(format)) {
            return Parser.coverXml2Object(rsp, com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp.class);
        }
        return Parser.convertJson2Object(rsp, com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp.class);
    }
}
src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java
New file
@@ -0,0 +1,12 @@
package com.best.javaSdk.kdTraceQuery.request;
import lombok.Data;
import java.util.List;
@Data
public class MailNos {
    private List<String> mailNo;
}
src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java
New file
@@ -0,0 +1,19 @@
package com.best.javaSdk.kdTraceQuery.response;
import com.best.javaSdk.BaseResponse;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class KdTraceQueryRsp implements BaseResponse {
    @ApiModelProperty(value = "请求结果", example = "60850007041815")
    private boolean result;
    @ApiModelProperty(value = "快递物流详情", example = "60850007041815")
    private List<TraceLogs> traceLogs;
}
src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java
New file
@@ -0,0 +1,118 @@
package com.best.javaSdk.kdTraceQuery.response;
public class Trace {
    private String receiverType;
    private String receiverName;
    private String receiverSignature;
    private String receiverImage;
    private String packageStatusCode;
    private String statusCodeDesc;
    private String operateTime;
    private String currentCity;
    private String nextCity;
    private String remark;
    public String getReceiverType()
    {
        return this.receiverType;
    }
    public void setReceiverType(String value)
    {
        this.receiverType = value;
    }
    public String getReceiverName()
    {
        return this.receiverName;
    }
    public void setReceiverName(String value)
    {
        this.receiverName = value;
    }
    public String getReceiverSignature()
    {
        return this.receiverSignature;
    }
    public void setReceiverSignature(String value)
    {
        this.receiverSignature = value;
    }
    public String getReceiverImage()
    {
        return this.receiverImage;
    }
    public void setReceiverImage(String value)
    {
        this.receiverImage = value;
    }
    public String getPackageStatusCode()
    {
        return this.packageStatusCode;
    }
    public void setPackageStatusCode(String value)
    {
        this.packageStatusCode = value;
    }
    public String getStatusCodeDesc()
    {
        return this.statusCodeDesc;
    }
    public void setStatusCodeDesc(String value)
    {
        this.statusCodeDesc = value;
    }
    public String getOperateTime()
    {
        return this.operateTime;
    }
    public void setOperateTime(String value)
    {
        this.operateTime = value;
    }
    public String getCurrentCity()
    {
        return this.currentCity;
    }
    public void setCurrentCity(String value)
    {
        this.currentCity = value;
    }
    public String getNextCity()
    {
        return this.nextCity;
    }
    public void setNextCity(String value)
    {
        this.nextCity = value;
    }
    public String getRemark()
    {
        return this.remark;
    }
    public void setRemark(String value)
    {
        this.remark = value;
    }
}
src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java
New file
@@ -0,0 +1,51 @@
package com.best.javaSdk.kdTraceQuery.response;
public class TraceLogs {
    private String mailNo;
    private String txLogisticId;
    private double weight;
    private Traces traces;
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public double getWeight()
    {
        return this.weight;
    }
    public void setWeight(double value)
    {
        this.weight = value;
    }
    public Traces getTraces()
    {
        return this.traces;
    }
    public void setTraces(Traces value)
    {
        this.traces = value;
    }
}
src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java
New file
@@ -0,0 +1,19 @@
package com.best.javaSdk.kdTraceQuery.response;
import java.util.List;
public class Traces {
    private List<Trace> trace;
    public List<Trace>  getTrace()
    {
        return this.trace;
    }
    public void setTrace(List<Trace>  value)
    {
        this.trace = value;
    }
}
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java
New file
@@ -0,0 +1,56 @@
package com.best.javaSdk.kdUpdateOrderNotify.request;
import com.best.javaSdk.kdUpdateOrderNotify.request.Params;
import com.best.javaSdk.BaseRequest;
import com.best.javaSdk.BaseResponse;
import com.best.javaSdk.Parser;
public class KdUpdateOrderNotifyReq implements BaseRequest {
    private String txLogisticId;
    private Params params;
    private boolean pdfStream;
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public Params getParams()
    {
        return this.params;
    }
    public void setParams(Params value)
    {
        this.params = value;
    }
    public boolean getPdfStream()
    {
        return this.pdfStream;
    }
    public void setPdfStream(boolean value)
    {
        this.pdfStream = value;
    }
    public String obtainServiceType() {
        return "KD_UPDATE_ORDER_NOTIFY";
    }
    public BaseResponse makeResponse(String rsp, String format) {
        if ("xml".equalsIgnoreCase(format)) {
            return Parser.coverXml2Object(rsp, com.best.javaSdk.kdUpdateOrderNotify.response.KdUpdateOrderNotifyRsp.class);
        }
        return Parser.convertJson2Object(rsp, com.best.javaSdk.kdUpdateOrderNotify.response.KdUpdateOrderNotifyRsp.class);
    }
}
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java
New file
@@ -0,0 +1,360 @@
package com.best.javaSdk.kdUpdateOrderNotify.request;
public class Params {
    private String mailNo;
    private String deliveryType;
    private String deliverySite;
    private long sendStartTime;
    private long sendEndTime;
    private String recSite;
    private double itemsValue;
    private double insuranceValue;
    private String senderName;
    private String senderPostCode;
    private String senderMobile;
    private String senderProv;
    private String senderCity;
    private String senderCounty;
    private String senderAddress;
    private String senderEmail;
    private String senderCountry;
    private String receiverName;
    private String receiverPostCode;
    private String receiverMobile;
    private String receiverProv;
    private String receiverCity;
    private String receiverCounty;
    private String receiverAddress;
    private String receiverEmail;
    private String receiverCountry;
    private long piece;
    private double itemsWeight;
    private double length;
    private double width;
    private double height;
    private String remark;
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public String getDeliveryType()
    {
        return this.deliveryType;
    }
    public void setDeliveryType(String value)
    {
        this.deliveryType = value;
    }
    public String getDeliverySite()
    {
        return this.deliverySite;
    }
    public void setDeliverySite(String value)
    {
        this.deliverySite = value;
    }
    public long getSendStartTime()
    {
        return this.sendStartTime;
    }
    public void setSendStartTime(long value)
    {
        this.sendStartTime = value;
    }
    public long getSendEndTime()
    {
        return this.sendEndTime;
    }
    public void setSendEndTime(long value)
    {
        this.sendEndTime = value;
    }
    public String getRecSite()
    {
        return this.recSite;
    }
    public void setRecSite(String value)
    {
        this.recSite = value;
    }
    public double getItemsValue()
    {
        return this.itemsValue;
    }
    public void setItemsValue(double value)
    {
        this.itemsValue = value;
    }
    public double getInsuranceValue()
    {
        return this.insuranceValue;
    }
    public void setInsuranceValue(double value)
    {
        this.insuranceValue = value;
    }
    public String getSenderName()
    {
        return this.senderName;
    }
    public void setSenderName(String value)
    {
        this.senderName = value;
    }
    public String getSenderPostCode()
    {
        return this.senderPostCode;
    }
    public void setSenderPostCode(String value)
    {
        this.senderPostCode = value;
    }
    public String getSenderMobile()
    {
        return this.senderMobile;
    }
    public void setSenderMobile(String value)
    {
        this.senderMobile = value;
    }
    public String getSenderProv()
    {
        return this.senderProv;
    }
    public void setSenderProv(String value)
    {
        this.senderProv = value;
    }
    public String getSenderCity()
    {
        return this.senderCity;
    }
    public void setSenderCity(String value)
    {
        this.senderCity = value;
    }
    public String getSenderCounty()
    {
        return this.senderCounty;
    }
    public void setSenderCounty(String value)
    {
        this.senderCounty = value;
    }
    public String getSenderAddress()
    {
        return this.senderAddress;
    }
    public void setSenderAddress(String value)
    {
        this.senderAddress = value;
    }
    public String getSenderEmail()
    {
        return this.senderEmail;
    }
    public void setSenderEmail(String value)
    {
        this.senderEmail = value;
    }
    public String getSenderCountry()
    {
        return this.senderCountry;
    }
    public void setSenderCountry(String value)
    {
        this.senderCountry = value;
    }
    public String getReceiverName()
    {
        return this.receiverName;
    }
    public void setReceiverName(String value)
    {
        this.receiverName = value;
    }
    public String getReceiverPostCode()
    {
        return this.receiverPostCode;
    }
    public void setReceiverPostCode(String value)
    {
        this.receiverPostCode = value;
    }
    public String getReceiverMobile()
    {
        return this.receiverMobile;
    }
    public void setReceiverMobile(String value)
    {
        this.receiverMobile = value;
    }
    public String getReceiverProv()
    {
        return this.receiverProv;
    }
    public void setReceiverProv(String value)
    {
        this.receiverProv = value;
    }
    public String getReceiverCity()
    {
        return this.receiverCity;
    }
    public void setReceiverCity(String value)
    {
        this.receiverCity = value;
    }
    public String getReceiverCounty()
    {
        return this.receiverCounty;
    }
    public void setReceiverCounty(String value)
    {
        this.receiverCounty = value;
    }
    public String getReceiverAddress()
    {
        return this.receiverAddress;
    }
    public void setReceiverAddress(String value)
    {
        this.receiverAddress = value;
    }
    public String getReceiverEmail()
    {
        return this.receiverEmail;
    }
    public void setReceiverEmail(String value)
    {
        this.receiverEmail = value;
    }
    public String getReceiverCountry()
    {
        return this.receiverCountry;
    }
    public void setReceiverCountry(String value)
    {
        this.receiverCountry = value;
    }
    public long getPiece()
    {
        return this.piece;
    }
    public void setPiece(long value)
    {
        this.piece = value;
    }
    public double getItemsWeight()
    {
        return this.itemsWeight;
    }
    public void setItemsWeight(double value)
    {
        this.itemsWeight = value;
    }
    public double getLength()
    {
        return this.length;
    }
    public void setLength(double value)
    {
        this.length = value;
    }
    public double getWidth()
    {
        return this.width;
    }
    public void setWidth(double value)
    {
        this.width = value;
    }
    public double getHeight()
    {
        return this.height;
    }
    public void setHeight(double value)
    {
        this.height = value;
    }
    public String getRemark()
    {
        return this.remark;
    }
    public void setRemark(String value)
    {
        this.remark = value;
    }
}
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java
New file
@@ -0,0 +1,19 @@
package com.best.javaSdk.kdUpdateOrderNotify.response;
import java.util.List;
public class ChildMailNo {
    private List<String> mailNo;
    public List<String>  getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(List<String>  value)
    {
        this.mailNo = value;
    }
}
src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java
New file
@@ -0,0 +1,109 @@
package com.best.javaSdk.kdUpdateOrderNotify.response;
import com.best.javaSdk.kdUpdateOrderNotify.response.ChildMailNo;
import java.util.List;
import com.best.javaSdk.BaseResponse;
public class KdUpdateOrderNotifyRsp implements BaseResponse {
    private boolean result;
    private String triSortCode;
    private String txLogisticId;
    private String mailNo;
    private ChildMailNo childMailNo;
    private String packRule;
    private String errorCode;
    private String errorDescription;
    private List<String> pdfStreamList;
    public boolean getResult()
    {
        return this.result;
    }
    public void setResult(boolean value)
    {
        this.result = value;
    }
    public String getTriSortCode()
    {
        return this.triSortCode;
    }
    public void setTriSortCode(String value)
    {
        this.triSortCode = value;
    }
    public String getTxLogisticId()
    {
        return this.txLogisticId;
    }
    public void setTxLogisticId(String value)
    {
        this.txLogisticId = value;
    }
    public String getMailNo()
    {
        return this.mailNo;
    }
    public void setMailNo(String value)
    {
        this.mailNo = value;
    }
    public ChildMailNo getChildMailNo()
    {
        return this.childMailNo;
    }
    public void setChildMailNo(ChildMailNo value)
    {
        this.childMailNo = value;
    }
    public String getPackRule()
    {
        return this.packRule;
    }
    public void setPackRule(String value)
    {
        this.packRule = value;
    }
    public String getErrorCode()
    {
        return this.errorCode;
    }
    public void setErrorCode(String value)
    {
        this.errorCode = value;
    }
    public String getErrorDescription()
    {
        return this.errorDescription;
    }
    public void setErrorDescription(String value)
    {
        this.errorDescription = value;
    }
    public List<String>  getPdfStreamList()
    {
        return this.pdfStreamList;
    }
    public void setPdfStreamList(List<String>  value)
    {
        this.pdfStreamList = value;
    }
}
src/main/resources/application.yml
@@ -5,7 +5,7 @@
spring:
  profiles:
    active: test
    active: dev
  servlet:
    multipart: