Example usage for org.dom4j.io SAXReader SAXReader

List of usage examples for org.dom4j.io SAXReader SAXReader

Introduction

In this page you can find the example usage for org.dom4j.io SAXReader SAXReader.

Prototype

public SAXReader() 

Source Link

Usage

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

License:LGPL

@Override
public String importHotelSearchRS(String filename) {
    String rs;/*from   w w w .ja v a  2s. c o  m*/
    SAXReader reader = new SAXReader();

    logger.info("filename: " + filename);

    File file = new File(filename);
    if (!file.exists())
        return null;

    Document document;// ?XML
    try {
        document = reader.read(file);
    } catch (DocumentException e) {
        e.printStackTrace();
        return "error";
    }

    rs = processHotelSearchResponse(document);

    return rs;
}

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?/* w ww.  j av a 2 s.  c  o 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 List<String> hotelCodes, final int periodId, final boolean returnXml) {
    if (hotelCodes == null || hotelCodes.size() == 0)
        return "ER#hotelcodes is null or empty.";

    int minDay = (periodId - 1) * 28;
    int maxDay = periodId * 28;
    if (maxDay > 90)
        maxDay = 90;//from w w w.  j av a  2  s  .  co  m

    if (minDay >= this.maxDaysOfHotelRate)
        return "ER#Exceed the max day of rate!";
    if (maxDay > this.maxDaysOfHotelRate)
        maxDay = this.maxDaysOfHotelRate;

    Date startDate = DateUtil.add(DateUtil.getCurDate(), minDay);
    Date endDate = DateUtil.add(DateUtil.getCurDate(), maxDay);

    String response = execSearchHotelRatePlan(hotelCodes, startDate, endDate);
    if (this.serviceStopped)
        return "ER#EXIT";

    //?
    String 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";
    }

    try {
        rs = processHotelRatePlanResponse(document, periodId, hotelCodes);
    } catch (Exception ex) {
        logger.error(ex.getMessage());
        logger.debug(response);
        return "ER#processHotelRatePlanResponse";
    }

    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 .  j  a  v  a 2 s.c  om*/
    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?/*from  w  ww .ja v  a 2s .  c  om*/
    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

@Override
public String importHotelRatePlanResponse(String filename) {
    String rs;/*from  w w  w.  j  a  v a2s  .co  m*/
    SAXReader reader = new SAXReader();

    logger.info("filename: " + filename);

    File file = new File(filename);
    if (!file.exists())
        return null;

    Document document;// ?XML
    try {
        document = reader.read(file);
    } catch (DocumentException e) {
        e.printStackTrace();
        return "error";
    }

    rs = processHotelRatePlanResponse(document, 1, new ArrayList<String>());

    return rs;
}

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

License:LGPL

@Override
public String importHotelCacheChangeResponse(String filename) {
    String rs;//ww  w  .ja  v a 2  s .  c  o m
    SAXReader reader = new SAXReader();

    logger.info("filename: " + filename);

    File file = new File(filename);
    if (!file.exists())
        return null;

    Document document;// ?XML
    try {
        document = reader.read(file);
    } catch (DocumentException e) {
        e.printStackTrace();
        return "error";
    }

    rs = processHotelCacheChangeResponse(document);

    return rs;
}

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

License:LGPL

/**
 * ??/*from   w  w  w  .jav  a  2  s . c o m*/
 * @param hotelCode
 * @param checkInDate
 * @param checkOutDate
 * @param ratePlanCode
 * @param roomQuantity
 * @param guestCount
 * @param lateArrivalTime
 * @return
 */
@Override
public String checkHotelAvail(String hotelCode, Date checkInDate, Date checkOutDate, String ratePlanCode,
        int roomQuantity, int guestCount, Date lateArrivalTime, boolean returnXml) {
    HotelRequestBody request = new HotelRequestBody();

    //
    if (checkInDate.getTime() < DateUtil.getCurDate().getTime())
        checkInDate = DateUtil.getCurDate();
    if (checkInDate.getTime() >= checkOutDate.getTime())
        checkOutDate = DateUtil.add(checkInDate, 1);
    if (lateArrivalTime.getTime() <= DateUtil.getCurDateTime().getTime())
        lateArrivalTime = DateUtil.addMinutes(DateUtil.getCurDateTime(), 5);

    request.createHotelAvailRequest();
    HotelAvailRequestSegment hotelAvailRequestSegment = new HotelAvailRequestSegment();
    request.getHotelAvailRequest().getHotelAvailRequestSegments().add(hotelAvailRequestSegment);

    HotelSearchCriterion criterion = hotelAvailRequestSegment.getHotelSearchCriteria().getCriterion();
    criterion.getHotelRef().setHotelCode(hotelCode);
    criterion.getHotelStayDateRange().setStartDate(DateUtil.formatDate(checkInDate, "yyyy-MM-dd"));
    criterion.getHotelStayDateRange().setEndDate(DateUtil.formatDate(checkOutDate, "yyyy-MM-dd"));

    HotelRatePlanCandidate ratePlanCandidate = new HotelRatePlanCandidate();
    criterion.getRatePlanCandidates().add(ratePlanCandidate);
    ratePlanCandidate.setRatePlanCode(ratePlanCode);

    RoomStayCandidate roomStayCandidate = new RoomStayCandidate();
    criterion.getRoomStayCandidates().add(roomStayCandidate);
    roomStayCandidate.setQuantity(roomQuantity);

    roomStayCandidate.getRoomGuestCount().getGuestCount().setCount(guestCount);
    roomStayCandidate.getRoomGuestCount().setPerRoom(false);

    criterion.getHotelLateArrivalTime()
            .setLateArrivalTime(DateUtil.formatDate(lateArrivalTime, "yyyy-MM-dd'T'HH:mm:ss"));

    String xml;

    try {
        xml = createXml4HotelRequestBody(request, ConfigData.OTA_HotelAvail_Request);
    } catch (JAXBException ex) {
        ex.printStackTrace();
        logger.error(ex.getMessage());
        return "ER";
    }

    logger.debug(xml);

    //        return xml;

    if (serviceStopped)
        return "ER#Service stopped.";
    String response = execApiRequest(xml, ConfigData.OTA_HotelAvail_Url, "requestXML");

    logger.debug(response);

    if (returnXml)
        return response;

    //?
    SAXReader reader = new SAXReader();

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

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

    return response;

}

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

License:LGPL

@Override
public String importHotelAvailResponse(String xml_file) {
    String rs;/* w  w  w . j a  v  a 2 s . c om*/
    SAXReader reader = new SAXReader();

    logger.info("filename: " + xml_file);

    File file = new File(xml_file);
    if (!file.exists())
        return null;

    Document document;// ?XML
    try {
        document = reader.read(file);
    } catch (DocumentException e) {
        e.printStackTrace();
        return "error";
    }

    rs = processHotelAvailResponse(document);

    return rs;
}

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

License:LGPL

private List<HotelAvailResponseRoomStay> processHotelAvailResponse(String responseXml) {
    List<HotelAvailResponseRoomStay> roomStays = new ArrayList<HotelAvailResponseRoomStay>();

    //?/*w ww  .  jav a  2s . co m*/
    SAXReader reader = new SAXReader();
    Document document;// ?XML
    try {
        document = reader.read(new StringReader(responseXml));

        //?????
        Map uris = new HashMap();
        uris.put("ns", "http://www.opentravel.org/OTA/2003/05");
        XPath xpath = document.createXPath("//ns:RoomStays/*");
        xpath.setNamespaceURIs(uris);
        List myNodes = xpath.selectNodes(document);

        if (myNodes.size() == 0) {
            logger.warn("ER#There is nothing.");
            return roomStays;
        }

        XStream xs = createXStream();
        xs.alias("RoomStay", HotelAvailResponseRoomStay.class);
        xs.processAnnotations(HotelAvailResponseRoomStay.class);

        String xml;

        for (Iterator it = myNodes.iterator(); it.hasNext();) {
            //if (serviceStopped) break;

            Element element = (Element) it.next();

            xml = element.asXML();
            HotelAvailResponseRoomStay roomStay = (HotelAvailResponseRoomStay) xs.fromXML(xml);
            roomStays.add(roomStay);
        }

    } catch (Exception ex) {
        logger.error(ex.getMessage());
    }

    return roomStays;
}