Example usage for org.dom4j Document getRootElement

List of usage examples for org.dom4j Document getRootElement

Introduction

In this page you can find the example usage for org.dom4j Document getRootElement.

Prototype

Element getRootElement();

Source Link

Document

Returns the root Element for this document.

Usage

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

/**
 * ??//from w w w . j av a2  s  .  co  m
 * @param cityId ?
 * @return ??
 */
@Override
public String searchHotel(int cityId) {
    if (cityId <= 0)
        return "ER#CITYID IS " + cityId;

    //headerAPI?
    Cache cache = getCache();
    String cacheKey = ConfigData.OTA_HotelSearch_Request;
    net.sf.ehcache.Element cacheElement = cache.get(cacheKey);
    if (cacheElement != null) {
        Element headerElement = (Element) cacheElement.getValue();

        int accessCount = Integer.parseInt(headerElement.attributeValue("AccessCount"));
        int currentCount = Integer.parseInt(headerElement.attributeValue("CurrentCount")) + 1;
        logger.info("AccessCount=" + headerElement.attributeValue("AccessCount") + ", CurrentCount="
                + headerElement.attributeValue("CurrentCount") + ", ResetTime="
                + headerElement.attributeValue("ResetTime"));
        if (currentCount >= accessCount) {
            try {
                logger.info("Sleep for one minute.");
                Thread.sleep(60000);
            } catch (InterruptedException ex) {
                logger.warn(Thread.currentThread().getName() + " is interrupted.");
                return "ER#Thread.sleep is interrupted.";
            }
        }
    }

    HotelRequestBody request = new HotelRequestBody();
    request.createHotelRequestRQ();
    request.getHotelRequestRQ().getCriteria().getCriterion().getHotelRef().setHotelCityCode(cityId);
    String xml;

    try {
        JAXBContext jc = JAXBContext.newInstance(HotelRequestBody.class);

        Marshaller m = jc.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
        m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

        DocumentResult documentResult = new DocumentResult();
        m.marshal(request, documentResult);

        org.dom4j.Document document = documentResult.getDocument();
        org.dom4j.Element requestElement = document.getRootElement();
        Element ele = requestElement.element("OTA_HotelSearchRQ");
        ele.addNamespace("", "http://www.opentravel.org/OTA/2003/05");

        org.dom4j.Document doc1 = DocumentHelper.createDocument();

        org.dom4j.Element rootElement = createRequestHeaderElement(doc1, ConfigData.OTA_HotelSearch_Request);
        rootElement.add(requestElement);

        xml = doc1.asXML();
    } catch (JAXBException ex) {
        logger.error(ex.getMessage());
        return "ER";
    }

    if (serviceStopped)
        return "ER#Service stopped.";
    String response = execApiRequest(xml, ConfigData.OTA_HotelSearch_Url, "requestXML");
    //?
    SAXReader reader = new SAXReader();

    Document document;// ?XML
    try {
        document = reader.read(new StringReader(response));

        if (serviceStopped)
            return "ER#Service stopped.";
        response = processHotelSearchResponse(document);
    } catch (Exception ex) {
        logger.error(ex.getMessage());
        return "ER";
    }

    return response;
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

private String processHotelSearchResponse(Document document) {
    if (document == null)
        return "ER#Document is null.";

    Element rootElement = document.getRootElement();
    Element headerElement = rootElement.element("Header");
    if (!headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
        logger.error(document.asXML());//from   w  ww  . ja  va2s .  c o  m
        return "ER#ResultCode is not Success.";
    }

    //header?
    getCache().put(new net.sf.ehcache.Element(ConfigData.OTA_HotelSearch_Request, headerElement));

    List myNodes = document.selectNodes("/Response/HotelResponse/*");
    Element eleOtaHotelSearchRS = (Element) myNodes.get(0);

    XStream xs = createXStream();
    xs.alias("Response", HotelSearchResponse.class);
    xs.processAnnotations(HotelSearchResponse.class);

    Date date0 = DateUtil.getCurDateTime();
    String xml = eleOtaHotelSearchRS.asXML();
    HotelSearchResponse response = (HotelSearchResponse) xs.fromXML(xml);
    int spanMilliSeconds = DateUtil.getPastTime(date0);
    logger.info("xml -> object: " + spanMilliSeconds + "ms.");
    int total = response.getHotelInfos().size();
    if (total == 0) {
        //logger.info(xml);
        if (response.getSuccess() != null) {
            logger.info("There is no hotel.");
            return "OK#0 hotel";
        }
    }

    // return response;
    String rs;
    int saveCount = 0;
    int count = 0;
    for (HotelInfo hotelInfo : response.getHotelInfos()) {
        if (this.serviceStopped)
            break;

        cn.buk.hotel.entity.HotelInfo hotelInfo1 = ConvertUtil.convertHotelInfo(hotelInfo);

        int retCode = hotelDao.createHotelInfo(hotelInfo1);

        if (retCode == 1 || retCode == 2) {
            saveCount++;
        }

        count++;
        if (count % 100 == 0) {
            logger.info("Progress: " + count + " / " + total);
        }
    }

    if (saveCount > 0)
        rs = "OK#" + saveCount + " be saved";
    else
        rs = "ER";

    return rs;
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

/**
 * ?HotelRatePlanResponse//  w  w  w.  j  ava2s .c om
 * @param document ??
 * @return ??
 */
private String processHotelRatePlanResponse(final Document document, final int periodId,
        final List<String> hotelCodes) {
    if (document == null)
        return "ER#Document is null.";

    Element rootElement = document.getRootElement();
    Element headerElement = rootElement.element("Header");
    if (!headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
        //logger.error("ER#ResultCode is not Success.");
        logger.error(document.asXML());
        return "ER#ResultCode is not Success.";
    }

    DocumentDto documentDto = new DocumentDto();
    documentDto.setDocument(document);
    documentDto.setPeriodId(periodId);

    for (String hotelCode : hotelCodes)
        documentDto.getHotelCodes().add(hotelCode);

    try {
        logger.debug("Current ratePlanQueue\'s size: " + ratePlanQueue.size());
        logger.debug("put hotelCodes\'s size is " + hotelCodes.size());

        ratePlanQueue.put(documentDto);
        hotelRatePlanDaoExecutor.execute(new HotelRatePlanDaoThread());
    } catch (InterruptedException e) {
        logger.warn(Thread.currentThread().getName() + " is interrupted.");
        return "ER#RatePlanQueue.put is interrupted.";
    }

    return "OK#Document has been added to Queue.";
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

private String processHotelCacheChangeResponse(final Document document) {
    if (document == null)
        return "ER#Document is null.";

    Element rootElement = document.getRootElement();
    Element headerElement = rootElement.element("Header");
    if (!headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
        logger.error(document.asXML());/* w w w .j  a  v  a  2 s. c o m*/
        return "ER#ResultCode is not Success.";
    }

    //header?
    getCache().put(new net.sf.ehcache.Element(ConfigData.OTA_HotelCacheChange_Request, headerElement));

    DocumentDto documentDto = new DocumentDto();
    documentDto.setDocument(document);
    try {
        hotelCacheChangeDaoExecutor.execute(new HotelCacheChangeDaoThread());

        logger.debug("Current hotelCacheChangeQueue\'s size is " + hotelCacheChangeQueue.size());
        hotelCacheChangeQueue.put(documentDto);
    } catch (InterruptedException e) {
        logger.warn(Thread.currentThread().getName() + " is interrupted.");
        return "ER#HotelCacheChangeQueue.put is interrupted.";
    }

    return "OK#HotelCacheChange document has been added into queue.";
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

@Override
public synchronized String searchHotelDetail(List<String> hotelCodes, boolean returnXml) {
    if (hotelCodes == null || hotelCodes.size() == 0)
        return "ER#hotelcodes is null";

    //headerAPI?// ww w.  j a va 2 s.  co m
    net.sf.ehcache.Element cacheElement = getCache().get(ConfigData.OTA_HotelDetail_Request);
    if (cacheElement != null) {
        Element headerElement = (Element) cacheElement.getValue();
        int accessCount = Integer.parseInt(headerElement.attributeValue("AccessCount"));
        int currentCount = Integer.parseInt(headerElement.attributeValue("CurrentCount")) + 1;
        logger.info(ConfigData.OTA_HotelDetail_Request + " AccessCount="
                + headerElement.attributeValue("AccessCount") + ", CurrentCount="
                + headerElement.attributeValue("CurrentCount") + ", ResetTime="
                + headerElement.attributeValue("ResetTime"));
        if (currentCount >= accessCount) {
            try {
                logger.info("Sleep for one minute.");
                Thread.sleep(60000);
            } catch (InterruptedException ex) {
                logger.warn(Thread.currentThread().getName() + " is interrupted.");
                return "ER#SearchHotelDetail thread.sleep is interrupted.";
            }
        }
    }

    if (this.serviceStopped)
        return "ER#Service stopped.";

    HotelRequestBody request = new HotelRequestBody();
    request.createHotelDetailRequest();
    for (String hotelCode : hotelCodes) {
        if (this.serviceStopped)
            return "ER#Service stopped.";

        HotelDescriptiveInfo hotelDescriptiveInfo = new HotelDescriptiveInfo();
        hotelDescriptiveInfo.setHotelCode(hotelCode);

        cn.buk.hotel.entity.HotelInfo hotelInfo = hotelDao.getHotelDetailInfoByHotelCode(hotelCode);
        if (hotelInfo != null) {
            //if (hotelInfo.getGuestRooms().size() == 0) {
            hotelDescriptiveInfo.setHotelInfoFacilityInfo(new HotelInfoFacilityInfo());
            hotelDescriptiveInfo.getHotelInfoFacilityInfo().setSendGuestRooms(true);
            //}

            if (hotelInfo.getRefPoints().size() == 0) {
                hotelDescriptiveInfo.setHotelInfoAreaInfo(new HotelInfoAreaInfo());
                hotelDescriptiveInfo.getHotelInfoAreaInfo().setSendAttractions(true);
                hotelDescriptiveInfo.getHotelInfoAreaInfo().setSendRecreations(true);
            }

            if (hotelInfo.getMedias().size() == 0) {
                hotelDescriptiveInfo.setHotelInfoMultimedia(new HotelInfoMultimedia());
                hotelDescriptiveInfo.getHotelInfoMultimedia().setSendData(true);
            }
        }

        request.getHotelDetailRequest().getHotelDescriptiveInfos().add(hotelDescriptiveInfo);
    }

    String requestXml;

    try {
        JAXBContext jc = JAXBContext.newInstance(HotelRequestBody.class);

        Marshaller m = jc.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
        m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

        DocumentResult documentResult = new DocumentResult();
        m.marshal(request, documentResult);

        org.dom4j.Document document = documentResult.getDocument();
        org.dom4j.Element requestElement = document.getRootElement();

        Element ele = requestElement.element("OTA_HotelDescriptiveInfoRQ");
        ele.addNamespace("", "http://www.opentravel.org/OTA/2003/05");

        org.dom4j.Document doc1 = DocumentHelper.createDocument();

        if (this.serviceStopped)
            return "ER#Service stopped.";

        org.dom4j.Element rootElement = createRequestHeaderElement(doc1, ConfigData.OTA_HotelDetail_Request);
        rootElement.add(requestElement);

        requestXml = doc1.asXML();
    } catch (JAXBException e) {
        e.printStackTrace();
        return "ER#OTA_exception";
    }

    Date date0 = DateUtil.getCurDateTime();

    logger.debug(ConfigData.OTA_HotelDetail_Request + ": begin");
    logger.debug(requestXml);

    if (this.serviceStopped)
        return "ER#Service stopped.";
    String response = execApiRequest(requestXml, ConfigData.OTA_HotelDetail_Url, "requestXML");

    logger.debug(response);
    int apiElapsedTime = DateUtil.getPastTime(date0);
    logger.debug(ConfigData.OTA_HotelDetail_Request + ": end, " + apiElapsedTime + "ms");

    if (returnXml)
        return response;

    //?
    String rs;
    SAXReader reader = new SAXReader();
    Document document;// ?XML
    try {
        document = reader.read(new StringReader(response));
        Element headerElement = document.getRootElement().element("Header");

        //header?
        getCache().put(new net.sf.ehcache.Element(ConfigData.OTA_HotelDetail_Request, headerElement));

        if (!headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
            logger.error(requestXml);
            logger.error(document.asXML());
            return "ER#ResultCode is not Success.";
        }

        DocumentDto documentDto = new DocumentDto();
        documentDto.setDocument(document);

        if (hotelDetailQueue.size() == MAX_HOTEL_DETAIL_QUEUE) {
            logger.warn("hotelDetailQueue is full, thread will be blocked here.");
        }
        hotelDetailQueue.put(documentDto);
        hotelDetailDaoExecutor.execute(new HotelDetailDaoThread());

        rs = "OK#save to the queue.";
    } catch (InterruptedException ex) {
        return "ER#Interrupt occured.";
    } catch (Exception ex) {
        logger.error(ex.getMessage());
        return "ER#searchHotelDetail";
    }

    return rs;
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

@Override
public String searchHotelRatePlan(final String hotelCode, Date startDate, Date endDate,
        final boolean returnXml) {
    List<String> hotelCodes = new ArrayList<String>();
    hotelCodes.add(hotelCode);//from w w  w .  java2s .  c  o m
    String response = execSearchHotelRatePlan(hotelCodes, startDate, endDate);
    if (returnXml)
        return response;

    //?
    String rs = "rs";
    SAXReader reader = new SAXReader();
    Document document;// ?XML
    try {
        document = reader.read(new StringReader(response));
    } catch (DocumentException e) {
        logger.error(e.getMessage());
        return "ER#xml->document";
    }

    if (document == null)
        return "ER#Document is null.";

    Element rootElement = document.getRootElement();
    Element headerElement = rootElement.element("Header");
    if (!headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
        //logger.error("ER#ResultCode is not Success.");
        logger.error(document.asXML());
        return "ER#ResultCode is not Success.";
    }

    rs = processHotelRatePlanResponse(document, 0, hotelCodes);

    return rs;
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

private synchronized String doSearchHotelRatePlan(String requestXml) {

    logger.debug("doSearchHotelRatePlan begin..." + Thread.currentThread().getName());

    //headerAPI?/* w  w w.j ava  2s .  c o m*/
    String cacheKey = ConfigData.OTA_HotelRatePlan_Request;
    net.sf.ehcache.Element cacheElement = getCache().get(cacheKey);
    if (cacheElement != null) {
        Element headerElement = (Element) cacheElement.getValue();
        int accessCount = Integer.parseInt(headerElement.attributeValue("AccessCount"));
        int currentCount = Integer.parseInt(headerElement.attributeValue("CurrentCount")) + 1;
        logger.info(ConfigData.OTA_HotelRatePlan_Request + " AccessCount="
                + headerElement.attributeValue("AccessCount") + ", CurrentCount="
                + headerElement.attributeValue("CurrentCount") + ", ResetTime="
                + headerElement.attributeValue("ResetTime"));
        if (currentCount >= accessCount) {
            try {
                logger.info("Sleep for one minute.");
                Thread.sleep(60000);
            } catch (InterruptedException ex) {
                logger.warn(Thread.currentThread().getName() + " is interrupted.");
                return "ER#DoSearchHotelRatePlan thread.sleep is interrupted.";
            }
        }
    }
    if (this.serviceStopped)
        return "ER#Service is stopped.";

    Date date0 = DateUtil.getCurDateTime();

    String response = execApiRequest(requestXml, ConfigData.OTA_HotelRatePlan_Url, "requestXML");

    int apiElapsedTime = DateUtil.getPastTime(date0);
    if (apiElapsedTime > 1000)
        logger.debug(ConfigData.OTA_HotelRatePlan_Request + " API: " + apiElapsedTime + "ms");

    //?
    try {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new StringReader(response));
        Element rootElement = document.getRootElement();
        Element headerElement = rootElement.element("Header");
        if (headerElement.attribute("ResultCode").getValue().equalsIgnoreCase("Success")) {
            //header?
            logger.debug("put headerElement to cache by key " + ConfigData.OTA_HotelRatePlan_Request);
            getCache().put(new net.sf.ehcache.Element(ConfigData.OTA_HotelRatePlan_Request, headerElement));
        } else {
            logger.error(response);
            logger.error("ResultCode is not Success.");
        }
    } catch (Exception e) {
        logger.error(e.getMessage());
    }

    logger.debug("doSearchHotelRatePlan end..." + Thread.currentThread().getName());

    return response;
}

From source file:cn.buk.api.service.CtripHotelServiceImpl.java

License:LGPL

private String createXml4HotelRequestBody(HotelRequestBody request, String requestType) throws JAXBException {
    JAXBContext jc = JAXBContext.newInstance(HotelRequestBody.class);

    Marshaller m = jc.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    m.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
    m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

    DocumentResult documentResult = new DocumentResult();
    m.marshal(request, documentResult);//from   w  ww . j av  a  2  s .  c  om

    org.dom4j.Document document = documentResult.getDocument();
    org.dom4j.Element requestElement = document.getRootElement();

    org.dom4j.Document doc1 = DocumentHelper.createDocument();

    org.dom4j.Element rootElement = createRequestHeaderElement(doc1, requestType);
    rootElement.add(requestElement);

    return doc1.asXML();
}

From source file:cn.com.sunjiesh.wechat.helper.WechatMessageConvertDocumentHelper.java

/**
 * ???XML/*from  w  ww. j  a  v a  2  s  .c  o  m*/
 *
 * @param messageResponse ?
 * @return XML
 */
public static Document textMessageResponseToDocument(WechatReceiveReplayTextMessageResponse messageResponse) {

    final String toUserName = messageResponse.getToUserName();
    final String fromUserName = messageResponse.getFromUserName();
    final String msgType = messageResponse.getMsgType();

    Document respDoc = initRespDoc(toUserName, fromUserName, msgType);

    Element contentEle = respDoc.getRootElement().addElement("Content");
    contentEle.setText(messageResponse.getContent());

    return respDoc;
}

From source file:cn.com.sunjiesh.wechat.helper.WechatMessageConvertDocumentHelper.java

/**
 * ??XML// w  ww. jav a  2 s.c o  m
 * @param messageResponse
 * @return
 */
public static Document imageMessageResponseToDocumnet(WechatReceiveReplayImageMessageResponse messageResponse) {
    final String toUserName = messageResponse.getToUserName();
    final String fromUserName = messageResponse.getFromUserName();
    final String msgType = messageResponse.getMsgType();

    Document respDoc = initRespDoc(toUserName, fromUserName, msgType);
    Element imageEle = respDoc.getRootElement().addElement("Image");
    Element mediaIdEle = imageEle.addElement("MediaId");
    mediaIdEle.setText(messageResponse.getMediaId());
    return respDoc;
}