GoGlobal Integration — Data Flow Reference¶
This document describes the complete data flow for every GoGlobal API endpoint: from the
REST call into HotelApi, through the entity framework, into the GoGlobal SOAP service,
and back through the response chain to the JSON result returned to the caller.
Table of Contents¶
- Architecture Overview
- Two Execution Paths
- SOAP Transport Layer
- Country/City Lookup (Static Data)
- Operation 11 — Hotel Availability Search
- Operation 6/61 — Hotel Info
- Operation 9 — Valuation
- Operation 14 — Price Breakdown
- Operation 2 — Create Booking
- Operation 5 — Booking Status
- Operation 4 — Booking Details
- Operation 3 — Cancel Booking
- Operation 10 — Advanced Booking Search
- Operation 8 — Voucher Details
- Operation 15 — Amendment Options
- Operation 16 — Booking Amendment
- Entity Configuration Reference
- Field Mapping Tables
Architecture Overview¶
All GoGlobal operations flow through a layered architecture with clearly separated responsibilities. The key classes involved are:
| Layer | Class | Responsibility |
|---|---|---|
| REST API | HotelApi |
HTTP POST endpoint, parameter extraction, response wrapping |
| Search Facade | HotelSearchFacade |
Pagination, sorting, search session persistence |
| Supplier Registry | OnlineHotelSupplierRegistry |
Selects active online supplier by config |
| Online Facade | GoGlobalHotelFacade |
Direct mapping between canonical and GoGlobal objects |
| Entity Facade | EntityFacade |
Generic CRUD via config-driven service/factory/transformer |
| Service Factory | GoGlobalServiceFactory |
Creates service instances from goglobal-client.xml |
| Entity Service | GoGlobalHotelService |
Business logic; maps DTOs to native entities |
| Entity Transformer | EntityTransformer |
Field mapping between native ↔ canonical entities |
| Request Builder | GoGlobalRequestBuilder |
Builds XML request body per operation |
| SOAP Client | GoGlobalSoapClient |
SOAP 1.2 envelope, HTTP POST, response extraction |
| Response Parser | GoGlobalResponseParser |
Parses XML/JSON response into typed DTOs |
General Sequence (EntityFacade path)¶
┌─────────┐ ┌─────────────┐ ┌───────────────┐ ┌─────────────────────┐
│ HotelApi │───>│ EntityFacade │───>│ ServiceFactory │───>│ GoGlobalHotelService │
└─────────┘ └─────────────┘ └───────────────┘ └──────────┬──────────┘
│
┌────────────────────┐ ┌──────────────────┴──────────┐
│ GoGlobalSoapClient │<───│ GoGlobalRequestBuilder │
└────────┬───────────┘ └────────────────────────────┘
│ HTTP POST (SOAP 1.2)
v
┌────────────────────┐
│ GoGlobal API Server │
└────────┬───────────┘
│ SOAP Response
v
┌────────────────────┐ ┌──────────────────────────┐
│GoGlobalSoapClient │───>│ GoGlobalResponseParser │
│(extractResponse) │ │ (parse to DTO) │
└────────────────────┘ └──────────┬───────────────┘
│ DTO
v
┌──────────────────────────┐
│ GoGlobalHotelService │
│ (map DTO → native entity)│
└──────────┬───────────────┘
│ Native Entity (GG*)
v
┌──────────────────────────┐
│ EntityTransformer │
│ (FieldMappingList) │
└──────────┬───────────────┘
│ Canonical Entity (C*)
v
┌──────────────────────────┐
│ HotelApi │
│ (wrap in TlinqApiResponse│
└──────────────────────────┘
Two Execution Paths¶
GoGlobal endpoints use one of two distinct execution paths:
Path A — Online (Direct Facade)¶
Used by searchOffers (online mode), searchByName, getByCity.
Bypasses EntityFacade and EntityTransformer; mapping is done in code.
HotelApi
└─> HotelSearchFacade.executeSearch()
└─> OnlineHotelSupplierRegistry.getActiveSupplier()
└─> GoGlobalHotelFacade (implements OnlineHotelSupplierI)
├─> GoGlobalRequestBuilder.build*Request()
├─> GoGlobalSoapClient.sendRequest(opCode, xml)
├─> GoGlobalResponseParser.parse*Response()
└─> mapToCHotelOffer() — inline Java mapping to CHotelOffer
Key characteristic: No XML entity configuration involved. Field mapping is hardcoded
in GoGlobalHotelFacade.mapToCHotelOffer().
Path B — EntityFacade (Config-Driven)¶
Used by all other endpoints. Routing is driven by XML configuration in
hotel-entities.xml and goglobal-client.xml.
HotelApi
└─> EntityFacade.read() / write() / callCustomService()
└─> Looks up Entity config in hotel-entities.xml
└─> Finds Factory="GoGlobalServiceFactory"
└─> Finds Service name → looks up in goglobal-client.xml
└─> Creates GoGlobalHotelService instance
└─> Calls method via reflection (invokeMethod)
├─> Reads namedParams (from entity config NamedParams)
├─> GoGlobalRequestBuilder.build*Request()
├─> GoGlobalSoapClient.sendRequest()
├─> GoGlobalResponseParser.parse*Response()
└─> Maps DTO → native entity (GG*)
└─> EntityTransformer applies FieldMappingList
└─> Converts native entity (GG*) → canonical entity (C*)
Key characteristic: Field mapping is driven by <FieldMappingList> in
hotel-entities.xml. Service method and entity class come from goglobal-client.xml.
SOAP Transport Layer¶
All GoGlobal communication goes through GoGlobalSoapClient:
┌─────────────────────────────────────────────────────────────┐
│ SOAP 1.2 Envelope │
│ │
│ <?xml version="1.0" encoding="utf-8"?> │
│ <soap12:Envelope xmlns:soap12="...05/soap-envelope" │
│ xmlns:gg="http://www.goglobal.travel/"> │
│ <soap12:Body> │
│ <gg:MakeRequest> │
│ <gg:requestType>{operationCode}</gg:requestType> │
│ <gg:xmlRequest><![CDATA[ │
│ <Root> │
│ <Header> │
│ <Agency>{agencyId}</Agency> │
│ <User>{login}</User> │
│ <Password>{password}</Password> │
│ <Operation>{OPERATION_NAME}</Operation> │
│ <OperationType>Request</OperationType> │
│ </Header> │
│ <Main Version="{ver}"> │
│ {operation-specific XML} │
│ </Main> │
│ </Root> │
│ ]]></gg:xmlRequest> │
│ </gg:MakeRequest> │
│ </soap12:Body> │
│ </soap12:Envelope> │
└─────────────────────────────────────────────────────────────┘
HTTP Headers:
Content-Type: application/soap+xml; charset=utf-8
API-Operation: {operationCode}
API-AgencyID: {agencyId}
Response extraction: The MakeRequestResult element is located, CDATA unescaped,
and the inner XML/JSON is returned to the caller.
Country/City Lookup (Static Data)¶
Endpoints: POST /hotel/searchCountries, POST /hotel/getCities
GoGlobal Operation: None (local database queries)
Execution Path: Direct Hibernate query — no SOAP, no EntityFacade
These endpoints query the GoGlobal static data cache (goglobal.country, goglobal.city tables)
that is populated by StaticDataRefresher / GGRefreshRunner. They provide country/city selection
for the hotel search form, where the selected city ID is used as the cityCode parameter in
/hotel/searchOffers.
Data Flow¶
Client HotelApi GoGlobalDBSession PostgreSQL
│ │ │ │
│ POST /hotel/ │ │ │
│ searchCountries │ │ │
│ {keyword:"Uni"} │ │ │
│───────────────────>│ │ │
│ │ session.createQuery( │ │
│ │ "FROM GGCountryEntity │ │
│ │ WHERE LOWER( │ │
│ │ countryName) LIKE :kw │ │
│ │ ORDER BY countryName") │ │
│ │────────────────────────>│ │
│ │ │ SELECT * FROM │
│ │ │ goglobal.country │
│ │ │ WHERE LOWER( │
│ │ │ country_name) │
│ │ │ LIKE '%uni%' │
│ │ │────────────────────>│
│ │ │ List<GGCountryEntity>│
│ │ │<────────────────────│
│ │ [{countryId, countryName, countryCode}, ...] │
│ │<────────────────────────│ │
│ TlinqApiResponse │ │ │
│ apiData: [...] │ │ │
│<───────────────────│ │ │
The getCities flow is identical but queries goglobal.city filtered by countryId.
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input (searchCountries) | reqData |
keyword |
| DB Entity | GGCountryEntity |
countryId (Long), countryName, countryCode |
| API Output | Array of maps | countryId, countryName, countryCode |
| API Input (getCities) | reqData |
countryId |
| DB Entity | GGCityEntity |
cityId (Long), cityName, cityCode, countryId |
| API Output | Array of maps | cityId, cityName, cityCode |
Important: The cityCode returned by getCities is the GoGlobal city ID (numeric string).
This same value is passed as cityCode to /hotel/searchOffers. During the EntityFacade's
convertSearchCriteria() step, the canonical field name cityCode is transformed to the
native field name cityId (per the HotelOffer GoGlobal FieldMapping configuration). The
GoGlobalHotelService.searchAvailability() method reads getNamedParam("cityId") with a
fallback to getNamedParam("cityCode") to handle both paths.
Op 11 — Hotel Availability Search¶
Endpoint: POST /hotel/searchOffers
GoGlobal Operation: 11 — HOTEL_SEARCH_REQUEST
Response format: JSON (unique among all operations)
Execution Path: A (Online) or B (Contracted), controlled by searchMode parameter.
Sequence Diagram — Online Mode (Path A)¶
Client HotelApi HotelSearchFacade GoGlobalHotelFacade RequestBuilder SoapClient ResponseParser
│ │ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │ │
│ searchOffers │ │ │ │ │ │
│ {session, │ │ │ │ │ │
│ cityCode, │ │ │ │ │ │
│ checkInDate, │ │ │ │ │ │
│ checkOutDate, │ │ │ │ │ │
│ adults, │ │ │ │ │ │
│ children, │ │ │ │ │ │
│ roomQuantity, │ │ │ │ │ │
│ currency, │ │ │ │ │ │
│ searchMode: │ │ │ │ │ │
│ "online"} │ │ │ │ │ │
│───────────────>│ │ │ │ │ │
│ │ Build CHotelSearch │ │ │ │ │
│ │ from reqData │ │ │ │ │
│ │ │ │ │ │ │
│ │ executeSearch( │ │ │ │ │
│ │ CHotelSearch, │ │ │ │ │
│ │ pageSize, │ │ │ │ │
│ │ sortOrder) │ │ │ │ │
│ │─────────────────────>│ │ │ │ │
│ │ │ Registry │ │ │ │
│ │ │ .getActiveSupplier │ │ │ │
│ │ │ ──────────────────>│ │ │ │
│ │ │ │ │ │ │
│ │ │ searchOffers( │ │ │ │
│ │ │ CHotelSearch) │ │ │ │
│ │ │──────────────────>│ │ │ │
│ │ │ │ buildAvailability │ │ │
│ │ │ │ Request(cityCode, │ │ │
│ │ │ │ checkIn,checkOut, │ │ │
│ │ │ │ rooms,adults, │ │ │
│ │ │ │ children, │ │ │
│ │ │ │ nationality, │ │ │
│ │ │ │ currency) │ │ │
│ │ │ │──────────────────>│ │ │
│ │ │ │ XML string │ │ │
│ │ │ │<──────────────────│ │ │
│ │ │ │ │ │ │
│ │ │ │ sendRequest(11,xml)│ │ │
│ │ │ │──────────────────────────────────>│ │
│ │ │ │ │ SOAP/HTTP │ │
│ │ │ │ │ ──────────────>│ GoGlobal API │
│ │ │ │ │ JSON resp │ │
│ │ │ │ │ <──────────────│ │
│ │ │ │ JSON string │ │ │
│ │ │ │<──────────────────────────────────│ │
│ │ │ │ │ │ │
│ │ │ │ parseAvailability │ │ │
│ │ │ │ Response(json) │ │ │
│ │ │ │───────────────────────────────────────────────────>│
│ │ │ │ GGAvailabilityResponse │ │
│ │ │ │ └ hotels[]:HotelResult │ │
│ │ │ │ ├ HotelCode,HotelName │ │
│ │ │ │ ├ Category,CityId │ │
│ │ │ │ ├ Latitude,Longitude │ │
│ │ │ │ └ offers[]:Offer │ │
│ │ │ │ ├ HotelSearchCode │ │
│ │ │ │ ├ TotalPrice,Currency │ │
│ │ │ │ ├ RoomBasis,BoardBasis │ │
│ │ │ │ ├ NonRef,CxlDeadline │ │
│ │ │ │ └ AvailFlag,Rooms[] │ │
│ │ │ │<───────────────────────────────────────────────────│
│ │ │ │ │ │ │
│ │ │ │ for each hotel+offer: │ │
│ │ │ │ mapToCHotelOffer() │ │
│ │ │ │ → CHotelOffer │ │
│ │ │ │ │ │ │
│ │ │ List<CHotelOffer> │ │ │ │
│ │ │<──────────────────│ │ │ │
│ │ │ │ │ │ │
│ │ │ Sort + save to DB │ │ │ │
│ │ │ (CPersistentSearch │ │ │ │
│ │ │ + CSearchResult) │ │ │ │
│ │ │ │ │ │ │
│ │ CHotelOfferSet │ │ │ │ │
│ │ {searchId, page, │ │ │ │ │
│ │ offers[], totalRes} │ │ │ │ │
│ │<─────────────────────│ │ │ │ │
│ │ │ │ │ │ │
│ TlinqApiResponse │ │ │ │ │
│ {apiStatus:OK, │ │ │ │ │
│ apiData: CHotelOfferSet} │ │ │ │ │
│<───────────────│ │ │ │ │ │
Sequence Diagram — Contracted Mode (Path B)¶
Client HotelApi EntityFacade ServiceFactory GoGlobalHotelService EntityTransformer
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ searchOffers │ │ │ │ │
│ {searchMode: │ │ │ │ │
│ "contracted"} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ Build criteria SCL │ │ │ │
│ │ ef.search( │ │ │ │
│ │ "HotelOffer",scl) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ Look up entity │ │ │
│ │ │ "HotelOffer" in │ │ │
│ │ │ hotel-entities │ │ │
│ │ │ .xml │ │ │
│ │ │ │ │ │
│ │ │ createService( │ │ │
│ │ │ "searchHotel │ │ │
│ │ │ Offers") │ │ │
│ │ │────────────────>│ │ │
│ │ │ │ GoGlobalHotelService │
│ │ │ │ .initialize(config)│ │
│ │ │ │───────────────────>│ │
│ │ │ │ │ │
│ │ │ service.addCriterion("cityCode",val) │ │
│ │ │ service.addCriterion("checkInDate",.)│ │
│ │ │ ... (adds all SCL criteria as namedParams) │
│ │ │ │ │ │
│ │ │ service.search() │ │ │
│ │ │───────────────────────────────────>│ │
│ │ │ │ │ │
│ │ │ │ invokeMethod( │ │
│ │ │ │ "searchAvail │ │
│ │ │ │ ability") │ │
│ │ │ │ │ │
│ │ │ │ (same SOAP flow │ │
│ │ │ │ as Online mode) │ │
│ │ │ │ │ │
│ │ │ │ GGHotelOffer[] │ │
│ │ │<───────────────────────────────────│ │
│ │ │ │ │ │
│ │ │ For each GGHotelOffer: │ │
│ │ │ EntityTransformer │ │
│ │ │ .transform( │ │
│ │ │ GGHotelOffer, │ │
│ │ │ FieldMappingList) │ │
│ │ │────────────────────────────────────────────────────────>│
│ │ │ │ │ CHotelOffer │
│ │ │<────────────────────────────────────────────────────────│
│ │ │ │ │ │
│ │ List<CHotelOffer> │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData (Map) |
cityCode, checkInDate, checkOutDate, adults, children, roomQuantity, nationality, currency, searchMode |
| Search Criteria | CHotelSearch |
cityCode, checkInDate, checkOutDate, adults, children, roomQuantity, nationality, currency |
| Request XML | String | <CityCode>, <ArrivalDate>, <Nights>, <Rooms> (Adults, RoomCount, ChildCount), <Nationality>, <Currency> |
| Response DTO | GGAvailabilityResponse |
hotels[] → |
| Native Entity | GGHotelOffer |
hotelSearchCode, hotelCode, hotelName, category, cityId, latitude, longitude, totalPrice, currency, roomBasis, boardBasis, nonRef, cxlDeadline |
| Canonical Entity | CHotelOffer |
offerId, hotelId, hotelName, cityCode, hotelLatitude, hotelLongitude, totalAmount, currencyCode, roomType, boardType, cancellationType, cancellationDeadline |
| API Output | CHotelOfferSet |
searchId, currentPage, offers[], totalRes |
Search Persistence (3 tables) — Hotel-Grouped Pagination¶
After the GoGlobal API returns results, HotelSearchFacade groups offers by hotel and persists
the search session for pagination and later retrieval. Each CSearchResult row represents
one hotel with all its room offers stored as a JSON array.
HotelSearchFacade.executeSearch()
│
├── executeBasicSearch() → EntityFacade.search("HotelOffer", criteria)
│ → GGHotelOffer[] → EntityTransformer → List<CHotelOffer>
│
├── groupByHotel(offers) → Map<hotelId, List<CHotelOffer>>
│
├── sortHotelGroups(groups, sortMethod)
│ SORT_PRICE_ASC → sort by min offer price ascending
│ SORT_PRICE_DESC → sort by min offer price descending
│ SORT_NAME_ASC → sort by hotel name ascending
│
└── saveGroupedResults()
│
├── (1) CPersistentSearch → nts.searchbase
│ searchId, sessionId, searchType="HOTELSEARCH",
│ resultCount = number of unique hotels (not offers),
│ searchStart, searchExpiry (+30 min)
│
├── (2) CHotelSearch → nts.hotelsearch
│ searchId, searchBaseId, sessionId,
│ cityCode, checkInDate, checkOutDate, adults, children,
│ roomQuantity, nationality, currency, ...
│
└── (3) CSearchResult[] → nts.searchres (one per HOTEL)
searchId, searchBaseId, sortIndex (hotel position),
groupKey=hotelId, groupDesc=hotelName,
sourceObject = gson.toJson(List<CHotelOffer>) (JSON array of all room offers)
Page size is configurable via goglobal.hotel.search.pageSize in goglobal-client.xml (default: 20 hotels per page). HotelApi reads the page size via GoGlobalClientConfig.getSearchPageSize().
The CHotelSearch entity is registered in the NTS entity framework:
- NTS entity: HotelsearchEntity (JPA, maps to nts.hotelsearch)
- NTS services: getHotelSearch, createHotelSearch, updateHotelSearch in nts-client.xml
- Entity config: HotelSearch in hotel-entities.xml with NTSServiceFactory
Pagination via hotel/fetchOfferResults reads from nts.searchres by searchId and sortIdx range.
Each row's sourceObject is a JSON array deserialized via gson.fromJson(so, CHotelOffer[].class),
then all offers are flattened into the response. Since each row represents one hotel, a page of
20 results returns 20 hotels with all their room offers.
Field Name Mapping (Contracted Mode)¶
When using Path B (EntityFacade), the convertSearchCriteria() method transforms canonical
field names to native field names using the HotelOffer GoGlobal FieldMapping configuration.
This affects how criteria are passed to GoGlobalHotelService:
| Canonical (input) | Native (namedParam key) | Mapping source |
|---|---|---|
cityCode |
cityId |
hotel-entities.xml line 472: targetField="cityCode" sourceField="cityId" |
checkInDate |
checkInDate |
Direct (same name) |
checkOutDate |
checkOutDate |
Direct (same name) |
adults |
adults |
Direct (same name) |
roomQuantity |
roomQuantity |
Direct (same name) |
children |
children |
Direct (same name) |
nationality |
nationality |
Direct (same name) |
currency |
currency |
Direct (same name) |
Important: GoGlobalHotelService.searchAvailability() reads getNamedParam("cityId") first,
falling back to getNamedParam("cityCode") to handle both the transformed name (from EntityFacade)
and the direct name (from Online mode).
Op 6 — Hotel Info¶
Endpoint: POST /hotel/getHotel (with searchMode=online)
GoGlobal Operation: 61 — HOTEL_INFO_REQUEST
Response format: XML
Execution Path: B (EntityFacade)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getHotel │ │ │ │ │
│ {hotelId, │ │ │ │ │
│ searchMode: │ │ │ │ │
│ "online"} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.read(null, │ │ │ │
│ │ "HotelInfo", │ │ │ │
│ │ hotelId) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ service=getHotelInfo │ │
│ │ │ namedParam: hotelId │ │ │
│ │ │ invokeMethod( │ │ │
│ │ │ "getHotelInfo") │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ buildHotelInfo │ │
│ │ │ │ Request(hotelId) │ │
│ │ │ │ sendRequest(61,.)│ │
│ │ │ │────────────────>│ │
│ │ │ │ XML response │ │
│ │ │ │<────────────────│ │
│ │ │ │ parseHotelInfo │ │
│ │ │ │ Response(xml) │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGHotelInfoResponse │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Map DTO → GGHotelInfo │
│ │ │ │ (hotelId, hotelName, address, │
│ │ │ │ cityCode, cityName, category, │
│ │ │ │ description, lat, lng, │
│ │ │ │ countryCode, facilitiesJson, │
│ │ │ │ picturesJson) │
│ │ │ GGHotelInfo │ │ │
│ │ │<───────────────────│ │ │
│ │ │ │ │ │
│ │ │ EntityTransformer │ │ │
│ │ │ GGHotelInfo → │ │ │
│ │ │ CHotelInfo │ │ │
│ │ │ (FieldMappingList) │ │ │
│ │ CHotelInfo │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
hotelId, searchMode="online" |
| Response DTO | GGHotelInfoResponse |
hotelId, hotelName, address, cityCode, cityName, category, description, facilities[], pictures[], latitude, longitude, countryCode |
| Native Entity | GGHotelInfo |
hotelId, hotelName, address, cityCode, cityName, category, description, facilities, pictures, latitude, longitude, countryCode, facilitiesJson, picturesJson |
| Canonical Entity | CHotelInfo |
hotelId, hotelName, address, cityCode, cityName, category, description, facilities (JSON), pictures (JSON), latitude, longitude, countryCode |
Op 9 — Valuation¶
Endpoint: POST /hotel/valuateOffer
GoGlobal Operation: 9 — BOOKING_VALUATION_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action valuateOffer)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ valuateOffer │ │ │ │ │
│ {hotelSearch │ │ │ │ │
│ Code, │ │ │ │ │
│ arrivalDate} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ CHotelOffer input │ │ │ │
│ │ .offerId = │ │ │ │
│ │ hotelSearchCode │ │ │ │
│ │ .checkInDate = │ │ │ │
│ │ arrivalDate │ │ │ │
│ │ │ │ │ │
│ │ result = ef.call │ │ │ │
│ │ CustomService(input,│ │ │ │
│ │ "valuateOffer") │ │ │ │
│ │ returns Object │ │ │ │
│ │ (single entity or │ │ │ │
│ │ List, handled by │ │ │ │
│ │ instanceof check) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParams: │ │ │
│ │ │ hotelSearchCode │ │ │
│ │ │ ← input.offerId │ │ │
│ │ │ arrivalDate │ │ │
│ │ │ ← input.checkInDate │ │
│ │ │ │ │ │
│ │ │ invokeMethod( │ │ │
│ │ │ "valuateBooking") │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ buildValuation │ │
│ │ │ │ Request(code, │ │
│ │ │ │ arrivalDate) │ │
│ │ │ │ sendRequest(9,.) │ │
│ │ │ │────────────────>│ │
│ │ │ │ XML response │ │
│ │ │ │<────────────────│ │
│ │ │ │ parseValuation │ │
│ │ │ │ Response(xml) │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGValuationResponse │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Map → GGHotelOffer │
│ │ │ GGHotelOffer │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelOffer │ │ │
│ │ CHotelOffer │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
hotelSearchCode, arrivalDate |
| Response DTO | GGValuationResponse |
hotelSearchCode, totalPrice, currency, cancellationDeadline, nonRefundable, boardBasis |
| Native Entity | GGHotelOffer |
hotelSearchCode, totalPrice, currency, cxlDeadline, nonRef, cancellationType, boardBasis |
| Canonical Entity | CHotelOffer |
offerId, totalAmount, currencyCode, cancellationDeadline, cancellationType, boardType |
Op 14 — Price Breakdown¶
Endpoint: POST /hotel/getPriceBreakdown
GoGlobal Operation: 14 — PRICE_BREAKDOWN_REQUEST
Response format: XML
Execution Path: B (EntityFacade, read action)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getPriceBreak │ │ │ │ │
│ down │ │ │ │ │
│ {hotelSearch │ │ │ │ │
│ Code} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.read(null, │ │ │ │
│ │ "HotelPrice │ │ │ │
│ │ Breakdown", │ │ │ │
│ │ hotelSearchCode) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ service=getHotel │ │ │
│ │ │ PriceBreakdown │ │ │
│ │ │ namedParam: │ │ │
│ │ │ hotelSearchCode │ │ │
│ │ │ invokeMethod( │ │ │
│ │ │ "getPrice │ │ │
│ │ │ Breakdown") │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(14) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parse response │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGPriceBreakdownResponse │
│ │ │ │ ├ hotelSearchCode │
│ │ │ │ ├ hotelName │
│ │ │ │ └ rooms[] → RoomBreakdown │
│ │ │ │ └ nights[] → NightPrice │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ GGPriceBreakdown │ │ │
│ │ │ (breakdownJson = │ │ │
│ │ │ Gson.toJson(rooms)) │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelPriceBreakdown│ │ │
│ │ CHotelPriceBreakdown │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
hotelSearchCode |
| Response DTO | GGPriceBreakdownResponse |
hotelSearchCode, hotelName, rooms[] → {roomType, nights[] → {date, price, currency}} |
| Native Entity | GGPriceBreakdown |
hotelSearchCode, hotelName, breakdownJson |
| Canonical Entity | CHotelPriceBreakdown |
hotelSearchCode, hotelName, breakdown (JSON string) |
Op 2 — Create Booking¶
Endpoint: POST /hotel/createBooking
GoGlobal Operation: 2 — BOOKING_INSERT_REQUEST
Response format: XML
Execution Path: B (EntityFacade, write/create action)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ createBooking │ │ │ │ │
│ {hotelSearch │ │ │ │ │
│ Code, title, │ │ │ │ │
│ firstName, │ │ │ │ │
│ lastName, │ │ │ │ │
│ email, phone, │ │ │ │ │
│ clientRef} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ Build CHotelBooking │ │ │ │
│ │ .hotelSearchCode │ │ │ │
│ │ .leaderTitle/First │ │ │ │
│ │ /Last/email/phone │ │ │ │
│ │ .clientBookingCode │ │ │ │
│ │ │ │ │ │
│ │ ef.write(booking) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ Entity "HotelBooking" │ │
│ │ │ action "create" → │ │ │
│ │ │ service: │ │ │
│ │ │ "createHotelBooking"│ │ │
│ │ │ │ │ │
│ │ │ NamedParams from │ │ │
│ │ │ CHotelBooking: │ │ │
│ │ │ hotelSearchCode │ │ │
│ │ │ clientRef │ │ │
│ │ │ leaderTitle │ │ │
│ │ │ leaderFirstName │ │ │
│ │ │ leaderLastName │ │ │
│ │ │ email, phone │ │ │
│ │ │ │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ buildBooking │ │
│ │ │ │ Request(code, │ │
│ │ │ │ clientRef,title,│ │
│ │ │ │ first,last, │ │
│ │ │ │ email,phone, │ │
│ │ │ │ arrivalTime) │ │
│ │ │ │ sendRequest(2,.) │ │
│ │ │ │────────────────>│ │
│ │ │ │ XML response │ │
│ │ │ │<────────────────│ │
│ │ │ │ parseBooking │ │
│ │ │ │ Response(xml) │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGBookingResponse │
│ │ │ │ (goBookingCode, goReference, │
│ │ │ │ bookingStatus, totalPrice, │
│ │ │ │ currency, hotelName, hotelId, │
│ │ │ │ arrivalDate, nights, rooms, │
│ │ │ │ leaderTitle/First/Last, │
│ │ │ │ clientBookingCode) │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Map → GGBooking │
│ │ │ GGBooking │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelBooking │ │ │
│ │ CHotelBooking │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
hotelSearchCode, title, firstName, lastName, email, phone, clientRef |
| Canonical Input | CHotelBooking |
hotelSearchCode, leaderTitle, leaderFirstName, leaderLastName, email, phone, clientBookingCode |
| Request XML | String | <HotelSearchCode>, <ClientBookingCode>, <Leader> (Title, FirstName, LastName), <Email>, <Phone> |
| Response DTO | GGBookingResponse |
goBookingCode, goReference, bookingStatus, totalPrice, currency, hotelName, hotelId, arrivalDate, nights, rooms, clientBookingCode, leaderTitle/First/Last |
| Native Entity | GGBooking |
goBookingCode, goReference, bookingStatus, totalPrice, currency, hotelName, hotelId, arrivalDate, nights, rooms, clientBookingCode, leaderTitle/First/Last |
| Canonical Output | CHotelBooking |
bookingCode, bookingReference, bookingStatus, totalPrice, currency, hotelName, hotelId, arrivalDate, nights, rooms, clientBookingCode, leaderTitle/First/Last |
Op 5 — Booking Status¶
Endpoint: POST /hotel/getBookingStatus
GoGlobal Operation: 5 — BOOKING_STATUS_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action getBookingStatus)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getBooking │ │ │ │ │
│ Status │ │ │ │ │
│ {goBookingCode}│ │ │ │ │
│───────────────>│ │ │ │ │
│ │ CHotelBooking input │ │ │ │
│ │ .bookingCode = │ │ │ │
│ │ goBookingCode │ │ │ │
│ │ │ │ │ │
│ │ ef.callCustom │ │ │ │
│ │ Service(input, │ │ │ │
│ │ "getBookingStatus") │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParams: │ │ │
│ │ │ goBookingCode │ │ │
│ │ │ ← field: │ │ │
│ │ │ bookingCode │ │ │
│ │ │ │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(5) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parseBooking │ │
│ │ │ │ StatusResponse │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGBookingStatusResponse │
│ │ │ │ (goBookingCode, status, │
│ │ │ │ goReference, totalPrice, │
│ │ │ │ currency) │
│ │ │ │<─────────────────────────────────│
│ │ │ GGBooking │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → CHotelBooking │ │
│ │ CHotelBooking │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode |
| Response DTO | GGBookingStatusResponse |
goBookingCode, status, goReference, totalPrice, currency |
| Native Entity | GGBooking |
goBookingCode, bookingStatus, goReference, totalPrice, currency |
| Canonical Entity | CHotelBooking |
bookingCode, bookingStatus, bookingReference, totalPrice, currency |
Op 4 — Booking Details¶
Endpoint: POST /hotel/getBookingDetails
GoGlobal Operation: 4 — BOOKING_SEARCH_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action getBookingDetails)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getBooking │ │ │ │ │
│ Details │ │ │ │ │
│ {goBookingCode}│ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.callCustomService(input, "getBookingDetails") │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParam: goBookingCode ← field:bookingCode │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(4) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parseBooking │ │
│ │ │ │ DetailsResponse │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGBookingDetailsResponse │
│ │ │ │ (goBookingCode, goReference, │
│ │ │ │ clientBookingCode, status, │
│ │ │ │ hotelName, hotelId, cityName, │
│ │ │ │ arrivalDate, nights, rooms, │
│ │ │ │ roomType, boardBasis, │
│ │ │ │ totalPrice, currency, │
│ │ │ │ leader*, cancellationDeadline, │
│ │ │ │ remarks, email, phone) │
│ │ │ │<─────────────────────────────────│
│ │ │ GGBooking (full) │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → CHotelBooking (22 fields) │ │
│ │ CHotelBooking │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode |
| Response DTO | GGBookingDetailsResponse |
All booking fields: goBookingCode, goReference, clientBookingCode, bookingStatus, hotelName, hotelId, cityName, arrivalDate, nights, rooms, roomType, boardBasis, totalPrice, currency, leaderTitle/First/Last, cancellationDeadline, remarks, email, phone |
| Native Entity | GGBooking |
All 22 fields populated |
| Canonical Entity | CHotelBooking |
bookingCode, bookingReference, clientBookingCode, bookingStatus, hotelName, hotelId, cityCode, arrivalDate, nights, rooms, roomType, boardBasis, totalPrice, currency, leaderTitle/First/Last, cancellationDeadline, remarks, email, phone |
Op 3 — Cancel Booking¶
Endpoint: POST /hotel/cancelBooking
GoGlobal Operation: 3 — BOOKING_CANCEL_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action cancelBooking)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ cancelBooking │ │ │ │ │
│ {goBookingCode}│ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.callCustomService(input, "cancelBooking") │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParam: goBookingCode ← field:bookingCode │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(3) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parseCancellation│ │
│ │ │ │ Response(xml) │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGCancellationResponse │
│ │ │ │ (goBookingCode, bookingStatus, │
│ │ │ │ cancellationFee, currency, │
│ │ │ │ remarks) │
│ │ │ │<─────────────────────────────────│
│ │ │ GGBooking │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → CHotelBooking │ │
│ │ CHotelBooking │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode |
| Response DTO | GGCancellationResponse |
goBookingCode, bookingStatus, cancellationFee, currency, remarks |
| Native Entity | GGBooking |
goBookingCode, bookingStatus, cancellationFee, currency, remarks |
| Canonical Entity | CHotelBooking |
bookingCode, bookingStatus, cancellationFee, currency, remarks |
Op 10 — Advanced Booking Search¶
Endpoint: POST /hotel/searchBookings
GoGlobal Operation: 10 — ADV_BOOKING_SEARCH_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action searchBookings)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ searchBookings │ │ │ │ │
│ {dateFrom?, │ │ │ │ │
│ dateTo?, │ │ │ │ │
│ status?, │ │ │ │ │
│ clientRef?} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ CHotelBooking input │ │ │ │
│ │ .arrivalDate = │ │ │ │
│ │ dateFrom │ │ │ │
│ │ .cancellationDead │ │ │ │
│ │ line = dateTo │ │ │ │
│ │ .bookingStatus = │ │ │ │
│ │ status │ │ │ │
│ │ .clientBookingCode │ │ │ │
│ │ = clientRef │ │ │ │
│ │ │ │ │ │
│ │ ef.callCustom │ │ │ │
│ │ Service(input, │ │ │ │
│ │ "searchBookings") │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParams: │ │ │
│ │ │ dateFrom ← │ │ │
│ │ │ field:arrivalDate │ │ │
│ │ │ dateTo ← │ │ │
│ │ │ field:cancellation│ │ │
│ │ │ Deadline │ │ │
│ │ │ status ← │ │ │
│ │ │ field:booking │ │ │
│ │ │ Status │ │ │
│ │ │ clientRef ← │ │ │
│ │ │ field:client │ │ │
│ │ │ BookingCode │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ buildAdvanced │ │
│ │ │ │ BookingSearch │ │
│ │ │ │ Request(from,to, │ │
│ │ │ │ status,ref) │ │
│ │ │ │ sendRequest(10,.)│ │
│ │ │ │────────────────>│ │
│ │ │ │ parseAdvBooking │ │
│ │ │ │ SearchResponse │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGAdvBookingSearchResponse │
│ │ │ │ └ bookings[]:BookingEntry │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Map each entry │ │
│ │ │ │ → GGBooking │ │
│ │ │ GGBooking[] │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform each → │ │ │
│ │ │ CHotelBooking │ │ │
│ │ List<CHotelBooking>│ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
dateFrom, dateTo, status, clientRef (all optional) |
| Request XML | String | <DateFrom>, <DateTo>, <Status>, <ClientBookingCode> |
| Response DTO | GGAdvBookingSearchResponse |
bookings[] → |
| Native Entity | GGBooking[] |
Each entry mapped to GGBooking fields |
| Canonical Entity | CHotelBooking[] |
Each GGBooking transformed via FieldMappingList |
Op 8 — Voucher Details¶
Endpoint: POST /hotel/getVoucher
GoGlobal Operation: 8 — VOUCHER_DETAILS_REQUEST
Response format: XML
Execution Path: B (EntityFacade, read action on HotelVoucher entity)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getVoucher │ │ │ │ │
│ {goBookingCode}│ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.read(null, │ │ │ │
│ │ "HotelVoucher", │ │ │ │
│ │ goBookingCode) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ service= │ │ │
│ │ │ getVoucherDetails │ │ │
│ │ │ namedParam: │ │ │
│ │ │ goBookingCode │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(8) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parseVoucher │ │
│ │ │ │ DetailsResponse │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGVoucherDetailsResponse │
│ │ │ │ (goBookingCode, hotelName, │
│ │ │ │ address, phone, fax, │
│ │ │ │ checkInDate, roomBasis, │
│ │ │ │ nights, rooms, remarks, │
│ │ │ │ voucherDownloadURL, │
│ │ │ │ bookedAndPayableBy, │
│ │ │ │ supplierRefNumber, │
│ │ │ │ emergencyPhone) │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Map → GGVoucherDetails │
│ │ │ GGVoucherDetails │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelVoucher │ │ │
│ │ CHotelVoucher │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode |
| Response DTO | GGVoucherDetailsResponse |
goBookingCode, hotelName, address, phone, fax, checkInDate, roomBasis, nights, rooms, remarks, voucherDownloadURL, bookedAndPayableBy, supplierReferenceNumber, emergencyPhone |
| Native Entity | GGVoucherDetails |
goBookingCode, hotelName, address, phone, fax, checkInDate, roomBasis, nights, rooms, remarks, voucherDownloadURL, supplierName, supplierReference, emergencyPhone |
| Canonical Entity | CHotelVoucher |
bookingCode, hotelName, address, phone, fax, checkInDate, roomBasis, nights, rooms, remarks, voucherDownloadURL, supplierName, supplierReference, emergencyPhone |
Op 15 — Amendment Options¶
Endpoint: POST /hotel/getAmendmentOptions
GoGlobal Operation: 15 — BOOKING_INFO_FOR_AMENDMENT_REQUEST
Response format: XML (nested rooms/pax structure)
Execution Path: B (EntityFacade, read action on HotelAmendmentInfo entity)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ getAmendment │ │ │ │ │
│ Options │ │ │ │ │
│ {goBookingCode}│ │ │ │ │
│───────────────>│ │ │ │ │
│ │ ef.read(null, │ │ │ │
│ │ "HotelAmendment │ │ │ │
│ │ Info", │ │ │ │
│ │ goBookingCode) │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ service= │ │ │
│ │ │ getAmendmentOptions │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ build + send(15) │ │
│ │ │ │────────────────>│ │
│ │ │ │ parseAmendment │ │
│ │ │ │ OptionsResponse │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGAmendmentOptionsResponse │
│ │ │ │ ├ arrivalDate, nights │
│ │ │ │ ├ roomTypes[]:RoomTypeEntry │
│ │ │ │ │ ├ type, adults │
│ │ │ │ │ └ rooms[]:RoomEntry │
│ │ │ │ │ ├ roomId, category, │
│ │ │ │ │ │ roomBasis, cots │
│ │ │ │ │ └ persons[]:PersonEntry │
│ │ │ │ │ ├ personId, lastName │
│ │ │ │ │ ├ firstName, title, age │
│ │ │ │ └ remarks[]:RemarkEntry │
│ │ │ │ ├ id, text │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ │ Serialize nested │ │
│ │ │ │ structure to JSON: │ │
│ │ │ │ roomsJson = │ │
│ │ │ │ Gson.toJson( │ │
│ │ │ │ roomTypes) │ │
│ │ │ │ remarksJson = │ │
│ │ │ │ Gson.toJson( │ │
│ │ │ │ remarks) │ │
│ │ │ │ │ │
│ │ │ GGAmendmentInfo │ │ │
│ │ │ (goBookingCode, │ │ │
│ │ │ arrivalDate, │ │ │
│ │ │ nights, │ │ │
│ │ │ roomsJson, │ │ │
│ │ │ remarksJson) │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelAmendmentInfo │ │ │
│ │ CHotelAmendmentInfo│ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode |
| Response DTO | GGAmendmentOptionsResponse |
arrivalDate, nights, roomTypes[] (nested: type, adults, rooms[] → {roomId, category, roomBasis, cots, persons[]}), remarks[] |
| Native Entity | GGAmendmentInfo |
goBookingCode, arrivalDate, nights, roomsJson (serialized rooms/pax tree), remarksJson (serialized remarks) |
| Canonical Entity | CHotelAmendmentInfo |
bookingCode, arrivalDate, nights, roomsJson, remarksJson |
Op 16 — Booking Amendment¶
Endpoint: POST /hotel/amendBooking
GoGlobal Operation: 16 — BOOKING_AMENDMENT_REQUEST
Response format: XML
Execution Path: B (EntityFacade, custom service action amendBooking)
Sequence Diagram¶
Client HotelApi EntityFacade GoGlobalHotelService SoapClient ResponseParser
│ │ │ │ │ │
│ POST /hotel/ │ │ │ │ │
│ amendBooking │ │ │ │ │
│ {goBookingCode,│ │ │ │ │
│ arrivalDate, │ │ │ │ │
│ nights, │ │ │ │ │
│ roomsJson, │ │ │ │ │
│ remarksJson?} │ │ │ │ │
│───────────────>│ │ │ │ │
│ │ CHotelAmendmentInfo │ │ │ │
│ │ .bookingCode │ │ │ │
│ │ .arrivalDate │ │ │ │
│ │ .nights │ │ │ │
│ │ .roomsJson │ │ │ │
│ │ .remarksJson │ │ │ │
│ │ │ │ │ │
│ │ ef.callCustom │ │ │ │
│ │ Service(input, │ │ │ │
│ │ "amendBooking") │ │ │ │
│ │───────────────────>│ │ │ │
│ │ │ NamedParams: │ │ │
│ │ │ goBookingCode ← │ │ │
│ │ │ field:bookingCode │ │ │
│ │ │ arrivalDate ← │ │ │
│ │ │ field:arrivalDate │ │ │
│ │ │ nights ← │ │ │
│ │ │ field:nights │ │ │
│ │ │ roomsJson ← │ │ │
│ │ │ field:roomsJson │ │ │
│ │ │ remarksJson ← │ │ │
│ │ │ field:remarksJson │ │ │
│ │ │───────────────────>│ │ │
│ │ │ │ │ │
│ │ │ │ Parse roomsJson │ │
│ │ │ │ → buildRoomsXml()│ │
│ │ │ │ Parse remarksJson│ │
│ │ │ │ → buildRemarks │ │
│ │ │ │ Xml() │ │
│ │ │ │ │ │
│ │ │ │ buildAmendment │ │
│ │ │ │ Request(code, │ │
│ │ │ │ arrDate, nights,│ │
│ │ │ │ roomsXml, │ │
│ │ │ │ remarksXml) │ │
│ │ │ │ sendRequest(16,.)│ │
│ │ │ │────────────────>│ │
│ │ │ │ parseAmendment │ │
│ │ │ │ Response(xml) │ │
│ │ │ │─────────────────────────────────>│
│ │ │ │ GGAmendmentResponse │
│ │ │ │ (success, errorMessage) │
│ │ │ │<─────────────────────────────────│
│ │ │ │ │ │
│ │ │ GGAmendmentInfo │ │ │
│ │ │ (goBookingCode, │ │ │
│ │ │ success, │ │ │
│ │ │ errorMessage) │ │ │
│ │ │<───────────────────│ │ │
│ │ │ Transform → │ │ │
│ │ │ CHotelAmendmentInfo │ │ │
│ │ CHotelAmendmentInfo│ │ │ │
│ │ {bookingCode, │ │ │ │
│ │ success: true/ │ │ │ │
│ │ false, │ │ │ │
│ │ errorMessage} │ │ │ │
│ │<───────────────────│ │ │ │
│ TlinqApiResponse │ │ │ │
│<───────────────│ │ │ │ │
Data Objects¶
| Step | Object | Key Fields |
|---|---|---|
| API Input | reqData |
goBookingCode, arrivalDate, nights, roomsJson, remarksJson |
| Canonical Input | CHotelAmendmentInfo |
bookingCode, arrivalDate, nights, roomsJson, remarksJson |
| Intermediate | roomsXml, remarksXml | JSON → XML conversion in GoGlobalHotelService.buildRoomsXml() / buildRemarksXml() |
| Request XML | String | <GoBookingCode>, <ArrivalDate>, <Nights>, <Rooms><RoomType><Room><Person>..., <Remarks><Remark>... |
| Response DTO | GGAmendmentResponse |
success (boolean), errorMessage (String) |
| Native Entity | GGAmendmentInfo |
goBookingCode, success, errorMessage |
| Canonical Output | CHotelAmendmentInfo |
bookingCode, success, errorMessage |
Entity Configuration Reference¶
goglobal-client.xml — Service Definitions¶
Maps service names to Java classes, methods, native entities, and ID fields.
| Service Name | Method | Native Entity | Op |
|---|---|---|---|
searchHotelOffers |
searchAvailability |
GGHotelOffer |
11 |
valuateHotelOffer |
valuateBooking |
GGHotelOffer |
9 |
createHotelBooking |
createBooking |
GGBooking |
2 |
getHotelBookingStatus |
getBookingStatus |
GGBooking |
5 |
getHotelBookingDetails |
getBookingDetails |
GGBooking |
4 |
cancelHotelBooking |
cancelBooking |
GGBooking |
3 |
searchHotelsByName |
searchHotelsByName |
GGHotelInfo |
— |
getHotelsByCity |
getHotelsByCity |
GGHotelInfo |
— |
getHotelInfo |
getHotelInfo |
GGHotelInfo |
61 |
getHotelPriceBreakdown |
getPriceBreakdown |
GGPriceBreakdown |
14 |
advancedBookingSearch |
advancedBookingSearch |
GGBooking |
10 |
getVoucherDetails |
getVoucherDetails |
GGVoucherDetails |
8 |
getAmendmentOptions |
getAmendmentOptions |
GGAmendmentInfo |
15 |
amendHotelBooking |
amendBooking |
GGAmendmentInfo |
16 |
hotel-entities.xml — Entity Definitions¶
Maps canonical entities to their factories, services, and field transformations.
| Entity Name | Canonical Class | Action | Service Name | NamedParams |
|---|---|---|---|---|
HotelOffer |
CHotelOffer |
search | searchHotelOffers |
(from SCL criteria) |
HotelOffer |
CHotelOffer |
valuateOffer | valuateHotelOffer |
hotelSearchCode←offerId, arrivalDate←checkInDate |
HotelInfo |
CHotelInfo |
read | getHotelInfo |
hotelId (from read ID) |
HotelPriceBreakdown |
CHotelPriceBreakdown |
read | getHotelPriceBreakdown |
hotelSearchCode (from read ID) |
HotelBooking |
CHotelBooking |
create | createHotelBooking |
hotelSearchCode, clientRef, leaderTitle/First/Last, email, phone |
HotelBooking |
CHotelBooking |
getBookingStatus | getHotelBookingStatus |
goBookingCode←bookingCode |
HotelBooking |
CHotelBooking |
getBookingDetails | getHotelBookingDetails |
goBookingCode←bookingCode |
HotelBooking |
CHotelBooking |
cancelBooking | cancelHotelBooking |
goBookingCode←bookingCode |
HotelBooking |
CHotelBooking |
searchBookings | advancedBookingSearch |
dateFrom←arrivalDate, dateTo←cancellationDeadline, status←bookingStatus, clientRef←clientBookingCode |
HotelVoucher |
CHotelVoucher |
read | getVoucherDetails |
goBookingCode (from read ID) |
HotelAmendmentInfo |
CHotelAmendmentInfo |
read | getAmendmentOptions |
goBookingCode (from read ID) |
HotelAmendmentInfo |
CHotelAmendmentInfo |
amendBooking | amendHotelBooking |
goBookingCode←bookingCode, arrivalDate, nights, roomsJson, remarksJson |
Field Mapping Tables¶
HotelOffer: GGHotelOffer → CHotelOffer¶
| CHotelOffer (target) | GGHotelOffer (source) |
|---|---|
| offerId | hotelSearchCode |
| type | roomType |
| hotelId | hotelCode |
| hotelName | hotelName |
| cityCode | cityId |
| available | available |
| checkInDate | checkInDate |
| checkOutDate | checkOutDate |
| roomType | roomBasis |
| roomCategory | category |
| currencyCode | currency |
| totalAmount | totalPrice |
| baseAmount | baseAmount |
| cancellationType | cancellationType |
| cancellationDeadline | cxlDeadline |
| boardType | boardBasis |
| hotelLatitude | latitude |
| hotelLongitude | longitude |
HotelInfo: GGHotelInfo → CHotelInfo¶
| CHotelInfo (target) | GGHotelInfo (source) |
|---|---|
| hotelId | hotelId |
| hotelName | hotelName |
| address | address |
| category | category |
| description | description |
| cityCode | cityCode |
| cityName | cityName |
| countryCode | countryCode |
| facilities | facilitiesJson |
| pictures | picturesJson |
| latitude | latitude |
| longitude | longitude |
HotelBooking: GGBooking → CHotelBooking¶
| CHotelBooking (target) | GGBooking (source) |
|---|---|
| bookingCode | goBookingCode |
| bookingReference | goReference |
| clientBookingCode | clientBookingCode |
| bookingStatus | bookingStatus |
| hotelName | hotelName |
| hotelSearchCode | hotelSearchCode |
| arrivalDate | arrivalDate |
| nights | nights |
| rooms | rooms |
| roomType | roomType |
| boardBasis | boardBasis |
| totalPrice | totalPrice |
| currency | currency |
| leaderTitle | leaderTitle |
| leaderFirstName | leaderFirstName |
| leaderLastName | leaderLastName |
| hotelId | hotelId |
| cityCode | cityCode |
| createdDate | createdDate |
| cancellationDeadline | cancellationDeadline |
| remarks | remarks |
| cancellationFee | cancellationFee |
| phone | phone |
HotelPriceBreakdown: GGPriceBreakdown → CHotelPriceBreakdown¶
| CHotelPriceBreakdown (target) | GGPriceBreakdown (source) |
|---|---|
| hotelSearchCode | hotelSearchCode |
| hotelName | hotelName |
| breakdown | breakdownJson |
HotelVoucher: GGVoucherDetails → CHotelVoucher¶
| CHotelVoucher (target) | GGVoucherDetails (source) |
|---|---|
| bookingCode | goBookingCode |
| hotelName | hotelName |
| address | address |
| phone | phone |
| fax | fax |
| checkInDate | checkInDate |
| roomBasis | roomBasis |
| nights | nights |
| rooms | rooms |
| remarks | remarks |
| voucherDownloadURL | voucherDownloadURL |
| supplierName | supplierName |
| supplierReference | supplierReference |
| emergencyPhone | emergencyPhone |
HotelAmendmentInfo: GGAmendmentInfo → CHotelAmendmentInfo¶
| CHotelAmendmentInfo (target) | GGAmendmentInfo (source) |
|---|---|
| bookingCode | goBookingCode |
| arrivalDate | arrivalDate |
| nights | nights |
| roomsJson | roomsJson |
| remarksJson | remarksJson |
| success | success |
| errorMessage | errorMessage |