List of usage examples for org.dom4j.io SAXReader SAXReader
public SAXReader()
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; }