0% found this document useful (0 votes)
10 views7 pages

Back UPBOokingservice

The document contains code for a HotelBookingService class that handles booking hotel rooms through a SOAP web service. It takes a booking request as input, constructs the SOAP request, sends it to the web service, processes the response, and returns a booking result model containing details of the confirmed booking. Key steps include marshalling the request to XML, sending it via HTTP POST, unmarshalling the response to get booking details to populate the result model.

Uploaded by

Issam Souissi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views7 pages

Back UPBOokingservice

The document contains code for a HotelBookingService class that handles booking hotel rooms through a SOAP web service. It takes a booking request as input, constructs the SOAP request, sends it to the web service, processes the response, and returns a booking result model containing details of the confirmed booking. Key steps include marshalling the request to XML, sending it via HTTP POST, unmarshalling the response to get booking details to populate the result model.

Uploaded by

Issam Souissi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

package com.worldsoft.wega.

services;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

import org.springframework.stereotype.Service;
import org.w3c.dom.Document;

import com.worldsoft.wega.domain.juniper.www.webservice._2007.HotelBooking;
import com.worldsoft.wega.domain.juniper.www.webservice._2007.HotelBookingResponse;
import com.worldsoft.wega.dto.BookRequest;
import com.worldsoft.wega.dto.BookedRoom;
import com.worldsoft.wega.dto.BookingResultModel;
import com.worldsoft.wega.dto.PersonModel;

@Service
public class HotelBookingService {

public BookingResultModel hotelbooking(BookRequest bookRequest) {

HotelBookingResponse res = new HotelBookingResponse();


HotelBooking model = new HotelBooking(bookRequest);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm");
File folderRq = new File(System.getProperty("user.dir") + File.separator +
"HotelRQ");
if (!folderRq.exists()) {
folderRq.mkdir();
}

File request = new File(System.getProperty("user.dir") + File.separator +


"HotelRQ" + File.separator
+bookRequest.getGds().getIdEntite()
+"-"+bookRequest.getGds().getIdTiers()+"-JP-"+ format.format(new Date()) + "-
booking" + ".xml");

File folderRs = new File(System.getProperty("user.dir") + File.separator +


"HotelRS");
if (!folderRs.exists()) {
folderRs.mkdir();
}
File response = new File(System.getProperty("user.dir") + File.separator
+ "HotelRS" + File.separator
+bookRequest.getGds().getIdEntite()
+"-"+bookRequest.getGds().getIdTiers()+"-JP-"+ format.format(new Date()) + "-
bookingRS" + ".xml");

try {

MessageFactory messageFactory = MessageFactory.newInstance();


SOAPMessage soapMessage = messageFactory.createMessage();
Document document =
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

Marshaller marshaller =
JAXBContext.newInstance(model.getClass()).createMarshaller();
marshaller.marshal(model, document);

soapMessage.getSOAPBody().addDocument(document);

SOAPPart sp = soapMessage.getSOAPPart();
SOAPEnvelope envelope = sp.getEnvelope();
SOAPHeader header= soapMessage.getSOAPHeader();
SOAPBody body = envelope.getBody();

envelope.removeNamespaceDeclaration("SOAP-ENV");

envelope.addNamespaceDeclaration("soapenv","http://schemas.xmlsoap.org/soap/
envelope/" );
header.detachNode();

envelope.setPrefix("soapenv");
body.setPrefix("soapenv");

TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapMessage.getSOAPPart().getContent();
StreamResult requette = new StreamResult(request);
transformer.transform(sourceContent, requette);

java.io.StringWriter sw = new java.io.StringWriter();


StreamResult result = new StreamResult(sw);
transformer.transform(sourceContent, result);
String xmlString = sw.toString();
JAXB.marshal(model, sw);

URL url = new


URL(bookRequest.getGds().getUrl()+"/booktransactions.asmx");

HttpURLConnection httpsURLConnection = (HttpURLConnection)


url.openConnection();
httpsURLConnection.setDoInput(true);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setRequestProperty("Content-Type","text/xml");

httpsURLConnection.setRequestProperty("SOAPAction","http://www.juniper.es/
webservice/2007/HotelBooking");
httpsURLConnection.setRequestMethod("POST");
httpsURLConnection.setRequestProperty("Accept-Encoding","deflate");

DataOutputStream wr = new
DataOutputStream(httpsURLConnection.getOutputStream());
wr.writeBytes(xmlString);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new
InputStreamReader(httpsURLConnection.getInputStream()));
String inputLine;
StringBuffer responce = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
responce.append(inputLine);
}
in.close();

String responceS=responce.toString();

responceS=responceS.replace("<soap:Envelope
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body>", "");
responceS=responceS.replace("</soap:Body></soap:Envelope>","");

httpsURLConnection.disconnect();
BufferedWriter bwr = new BufferedWriter(new FileWriter(response));
bwr.write(responce.toString());
bwr.flush();
bwr.close();
transformer = transformerFactory.newTransformer();
java.io.StringWriter swres = new java.io.StringWriter();
StreamResult result11 = new StreamResult(swres);
transformer.transform(sourceContent, result11);

StringReader reader = new StringReader(responceS);


JAXBContext jaxbContext =
JAXBContext.newInstance(HotelBookingResponse.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

res = (HotelBookingResponse)unmarshaller.unmarshal(reader);
BookingResultModel resultToSend = new BookingResultModel();
if(res.getBookingRS().getErrors() != null) {
resultToSend.setSuccess(false);

resultToSend.setError(res.getBookingRS().getErrors().getError().get(0).getText());
}else {
resultToSend.setSuccess(true);

resultToSend.setVoucherRef(res.getBookingRS().getReservations().getReservation().ge
t(0).getLocator());
resultToSend.setBookingId(res.getBookingRS().getReservations().getReservation().get
(0).getLocator());

resultToSend.setPnrNumber(res.getBookingRS().getReservations().getReservation().get
(0).getLocator());
resultToSend.setCheckIn(bookRequest.getHotel().getCheckIn());
resultToSend.setCheckOut(bookRequest.getHotel().getCheckOut());
resultToSend.setHotelName(bookRequest.getHotel().getName());
resultToSend.setHotelAdress(bookRequest.getHotel().getAdress());
resultToSend.setGds("JP");
switch
(res.getBookingRS().getReservations().getReservation().get(0).getStatus().getValue(
)) {
case "PAG":
resultToSend.setStatus("CNF");
resultToSend.setDt_voucher(new Date().toString());

break;
case "CON":
resultToSend.setStatus("CNF");
resultToSend.setDt_voucher(new Date().toString());
break;

case "PRE":
resultToSend.setStatus("PNDN");
break;

case "PDI":
resultToSend.setStatus("PNDN");
break;

default:
break;
}

ArrayList<BookedRoom> bookedRooms = new ArrayList<>();

BookedRoom firstbookedRoomToAdd = new BookedRoom();

firstbookedRoomToAdd.setRoomType((bookRequest.getHotel().getRooms().get(0).getName(
)));

firstbookedRoomToAdd.setMealType(bookRequest.getHotel().getRooms().get(0).getMeals(
));

firstbookedRoomToAdd.setNbAdult(bookRequest.getHotel().getRooms().get(0).getNbAdult
s());

firstbookedRoomToAdd.setNbChildren(bookRequest.getHotel().getRooms().get(0).getNbCh
ildren());
firstbookedRoomToAdd.setNbInfant(bookRequest.getHotel().getRooms().get(0).getNbInfa
nt());

ArrayList<PersonModel> paxes = new ArrayList<>();

if(bookRequest.getBookingModel().getRooms().get(0).getNbAdult() != 0 ||
bookRequest.getBookingModel().getRooms().get(0).getAdult().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(0).getAdult().isEmpty()) {
for(int i =
0;i<bookRequest.getBookingModel().getRooms().get(0).getAdult().size();i++) {
PersonModel adult = new
PersonModel(bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getCi
vilite(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getFirstName(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getLastName(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getType(),

bookRequest.getBookingModel().getRooms().get(0).getAdult().get(i).getAge());
paxes.add(adult);
}

if(bookRequest.getBookingModel().getRooms().get(0).getNbChildren() != 0 ||
bookRequest.getBookingModel().getRooms().get(0).getChildren().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(0).getChildren().isEmpty()) {

for(int j =
0;j<bookRequest.getBookingModel().getRooms().get(0).getChildren().size();j++) {
PersonModel children = new
PersonModel(bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).ge
tCivilite(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getFirstName()
,

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getLastName(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getType(),

bookRequest.getBookingModel().getRooms().get(0).getChildren().get(j).getAge());
paxes.add(children);
}
}
firstbookedRoomToAdd.setPaxes(paxes);
bookedRooms.add(firstbookedRoomToAdd);
if
(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations()!=null && !
bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().isEmpty()) {
for (int i = 0; i <
bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().size(); i++) {
BookedRoom roomToAdd = new BookedRoom();

roomToAdd.setRoomType((bookRequest.getHotel().getRooms().get(0).getRoomsCombination
s().get(i).getName()));

roomToAdd.setMealType(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations
().get(i).getMeals());

roomToAdd.setNbAdult(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations(
).get(i).getNbAdults());
roomToAdd.setNbChildren(

bookRequest.getHotel().getRooms().get(0).getRoomsCombinations().get(i).getNbChildre
n());

roomToAdd.setNbInfant(bookRequest.getHotel().getRooms().get(0).getRoomsCombinations
().get(i).getNbInfant());
ArrayList<PersonModel> paxesComb = new
ArrayList<>();

if(bookRequest.getBookingModel().getRooms().get(i+1).getNbAdult() != 0 ||
bookRequest.getBookingModel().getRooms().get(i+1).getAdult().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(i+1).getAdult().isEmpty()) {
for(int j =
0;j<bookRequest.getBookingModel().getRooms().get(i+1).getAdult().size();j++) {
PersonModel adult = new
PersonModel(bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).get
Civilite(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getFirstName(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getLastName(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getType(),

bookRequest.getBookingModel().getRooms().get(i+1).getAdult().get(j).getAge());
paxesComb.add(adult);
}

if(bookRequest.getBookingModel().getRooms().get(i+1).getNbChildren() != 0 ||
bookRequest.getBookingModel().getRooms().get(i+1).getChildren().size() > 0
|| !
bookRequest.getBookingModel().getRooms().get(i+1).getChildren().isEmpty()) {

for(int k =
0;k<bookRequest.getBookingModel().getRooms().get(i+1).getChildren().size();k++) {
PersonModel children = new
PersonModel(bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).
getCivilite(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getFirstName
(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getLastName(
),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getType(),

bookRequest.getBookingModel().getRooms().get(i+1).getChildren().get(k).getAge());
paxesComb.add(children);
}
}
roomToAdd.setPaxes(paxesComb);

bookedRooms.add(roomToAdd);
}
resultToSend.setBookedRooms(bookedRooms);
}}
System.out.println("resultToSend==>"+resultToSend.toString());
return resultToSend;

} catch(Exception e) {

e.printStackTrace();
}

return null;
}

You might also like