WebService服务

服务类

@Service
@WebService(endpointInterface = "com.api.service.IOperatingIndexWebService", serviceName = "OperatingIndexService")
public class OperatingIndexWebServiceImpl implements IOperatingIndexWebService {

    @Autowired
    private IOperatingIndexService operatingIndexService;

    @Resource
    private WebServiceContext wsContext;


    @Override
    @InvokeLog(value = "webservice[OperatingIndexService.getKPIValue]", printArgs = true)
    public String getKPIValue(String xmlParam) {
        StringBuilder sb = new StringBuilder();

//      获取请求服务的信息
//      MessageContext mc = wsContext.getMessageContext();
//        Map requestHeaderNames = (Map)mc.get(SOAPMessageContext.HTTP_REQUEST_HEADERS);  
//        Set set = requestHeaderNames.keySet();  
//        for(Object key:set){  
//            System.out.println(key+"   "+requestHeaderNames.get(key));  
//        }  
        try {
            // 判断传过来的xml是否为空
            if (StringUtils.isNotBlank(xmlParam)) {
                // 解析传过来的xml
                RequestXmlHeader header = WebServiceXmlUtil.xml2Bean(xmlParam);
                // 判断区域ID是否是电商的ID
                if (StringUtils.equals(header.getCorporationCode(), OperatingIndexConstants.AREA_ID)) {
                    String time = header.getTime();
                    List<OperatingIndexBean> api = header.getApi();
                    sb.append(OperatingIndexConstants.XML_TITLE
                    + "<return><status>success</status><message>成功</message><Corporation id=\"")
                    .append(OperatingIndexConstants.AREA_ID).append("\">");
                    // 拿到所有指标名称
                    for (int i = 0; i < api.size(); i++) {
                        String name = api.get(i).getName();
                        // 日登陆人员名单 和 在线人员名单,目前拿不到值传空
                        if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_LOGIN_ROLL)
                                || StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_ONLINE_ROLL)) {
                            sb.setLength(0);
                            sb.append(OperatingIndexConstants.XML_TITLE).append("<LOGINUSER></LOGINUSER>");
                            return StringEscapeUtils.unescapeXml(sb.toString());
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_USER_REG_NUM)) {
                            // 注册用户数
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_ONLINE_NUM)) {
                            // 在线用户数
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_DAY_LOGIN_NUM)) {
                            // 日登陆人数
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_VISIT_COUNT)) {
                            // 累计访问人数
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_SESSION_NUM)) {
                            // 页面会话连接数
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_RESPONSE_TIME)) {
                            // 系统服务响应时长
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name,OperatingIndexConstants.BUSINESS_SYSTEM_RUNNING_TIME)) {
                            // 系统运行健康时长
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_DATA_TABLE_SPACE)) {
                            // 业务应用系统占用表空间大小
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else if (StringUtils.equals(name, OperatingIndexConstants.BUSINESS_SYSTEM_DB_TIME)) {
                            // 数据库平均响应时长
                            String operatingIndexNum = operatingIndexService.getOperatingIndexNum(name, time);
                            sb.append("<api name=\"").append(name).append("\"><value>")
                            .append(operatingIndexNum == null ? "" : operatingIndexNum).append("</value></api>");
                        } else {
                            // 当指标名称传错的时候
                            sb.setLength(0);
                            sb.append(OperatingIndexConstants.XML_TITLE
                                    + "<return><status>failure</status><message>失败</message><reason>指标名称错误</reason></return>");
                            break;
                        }
                    }
                    sb.append("</Corporation></return>");
                } else {
                    sb.append(OperatingIndexConstants.XML_TITLE
                            + "<return><status>failure</status><message>失败</message><reason>电商ID或标签名称错误</reason></return>");
                }
            } else {
                sb.append(OperatingIndexConstants.XML_TITLE
                        + "<return><status>failure</status><message>失败</message><reason>传入xml为空</reason></return>");
            }
        } catch (Exception e) {
            sb.setLength(0);
            sb.append(OperatingIndexConstants.XML_TITLE
                    + "<return><status>failure</status><message>失败</message><reason>webservice[OperatingIndexService]接口调用异常</reason></return>");
            e.printStackTrace();
        }
        return sb.toString();
    }


    @Override
    @InvokeLog(value = "webservice[OperatingIndexService.getStatus]", printArgs = true)
    public String getStatus() {
        StringBuilder sb = new StringBuilder();
        sb.append(1);
        return sb.toString();
    }
}

WebServiceXmlUtil

public class WebServiceXmlUtil {

    /**
     * 抽取包头,抽取出requestXml中的corporationCode、time、api,映射到RequestXmlHeader对象并返回
     * xml格式:
     * <info>
     *      <!--传入的地域代码可以为一个或多个-->
     *      <corporationCode>地域代码</CorporationCode>
     *      <!--传入的指标名称可以为一个或多个--> 
     *      <time>时间值</Time>
     *      <api name="指标名称"></api>
     * </info>
     *
     * @param requestXml
     * @return
     */
    public static RequestXmlHeader xml2Bean(String requestXml) {
        Document doc = null;
        try {
            doc = DocumentHelper.parseText(requestXml);
            //获取根节点
            Element root = doc.getRootElement();
            //获取根节点下的所有元素
            List<Element> children = root.elements();
            if (CollectionUtils.isEmpty(children)) {
                throw new CodeSourceException("0104");
            }

            RequestXmlHeader header = new RequestXmlHeader();

            List<OperatingIndexBean> list = new ArrayList<OperatingIndexBean>();
            for (Element element : children) {
                OperatingIndexBean operatingIndexBean = new OperatingIndexBean();
                String name = element.getName();
                if (name.equals("CorporationCode")) {
                    header.setCorporationCode(element.getTextTrim());
                } else if (name.equals("Time")) {
                    header.setTime(element.getTextTrim());
                } else if (name.equals("api")) {
                    Attribute attr = element.attribute("name");
                    operatingIndexBean.setName(attr.getValue());
                    list.add(operatingIndexBean);
                }
            }
            header.setApi(list);
            return header;
        } catch (Exception e) {
            throw new CodeSourceException("0104", e);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Amen_Wu/article/details/81263003