diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache
index 2e6f70491ec..3f7159044ea 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache
@@ -40,6 +40,13 @@ private:
{{/operation}}
void {{classnameSnakeLowerCase}}_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -47,6 +54,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
index 1050b80f9a7..fa03ba64e1e 100644
--- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
+++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache
@@ -33,6 +33,12 @@ void {{classname}}::setupRoutes() {
router->addCustomHandler(Routes::bind(&{{classname}}::{{classnameSnakeLowerCase}}_default_handler, this));
}
+void {{classname}}::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair {{classname}}::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -46,6 +52,12 @@ std::pair {{classname}}::handleParsingExcepti
}
}
+void {{classname}}::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair {{classname}}::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -102,8 +114,7 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque
{{paramName}} = request.body();
{{/isPrimitiveType}}
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -120,8 +131,7 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache-everything/api/PetApi.cpp b/samples/server/petstore/cpp-pistache-everything/api/PetApi.cpp
index 0267ad305ca..8e59e2864bd 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/PetApi.cpp
+++ b/samples/server/petstore/cpp-pistache-everything/api/PetApi.cpp
@@ -46,6 +46,12 @@ void PetApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&PetApi::pet_api_default_handler, this));
}
+void PetApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair PetApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -59,6 +65,12 @@ std::pair PetApi::handleParsingException(cons
}
}
+void PetApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair PetApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -76,8 +88,7 @@ void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::H
nlohmann::json::parse(request.body()).get_to(pet);
pet.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -87,8 +98,7 @@ void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::H
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -112,8 +122,7 @@ void PetApi::delete_pet_handler(const Pistache::Rest::Request &request, Pistache
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -142,8 +151,7 @@ void PetApi::find_pets_by_status_handler(const Pistache::Rest::Request &request,
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -172,8 +180,7 @@ void PetApi::find_pets_by_tags_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -194,8 +201,7 @@ void PetApi::get_pet_by_id_handler(const Pistache::Rest::Request &request, Pista
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -216,8 +222,7 @@ void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache
nlohmann::json::parse(request.body()).get_to(pet);
pet.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -227,8 +232,7 @@ void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -246,8 +250,7 @@ void PetApi::update_pet_with_form_handler(const Pistache::Rest::Request &request
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -265,8 +268,7 @@ void PetApi::upload_file_handler(const Pistache::Rest::Request &request, Pistach
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache-everything/api/PetApi.h b/samples/server/petstore/cpp-pistache-everything/api/PetApi.h
index 5d2d3bc00cb..29b0e2278cc 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/PetApi.h
+++ b/samples/server/petstore/cpp-pistache-everything/api/PetApi.h
@@ -57,6 +57,13 @@ private:
void upload_file_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void pet_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -64,6 +71,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache-everything/api/StoreApi.cpp b/samples/server/petstore/cpp-pistache-everything/api/StoreApi.cpp
index 522313849b2..fdb3338ddda 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/StoreApi.cpp
+++ b/samples/server/petstore/cpp-pistache-everything/api/StoreApi.cpp
@@ -42,6 +42,12 @@ void StoreApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&StoreApi::store_api_default_handler, this));
}
+void StoreApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -55,6 +61,12 @@ std::pair StoreApi::handleParsingException(co
}
}
+void StoreApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -72,8 +84,7 @@ void StoreApi::delete_order_handler(const Pistache::Rest::Request &request, Pist
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -92,8 +103,7 @@ void StoreApi::get_inventory_handler(const Pistache::Rest::Request &, Pistache::
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -114,8 +124,7 @@ void StoreApi::get_order_by_id_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -136,8 +145,7 @@ void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pista
nlohmann::json::parse(request.body()).get_to(order);
order.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -147,8 +155,7 @@ void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pista
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache-everything/api/StoreApi.h b/samples/server/petstore/cpp-pistache-everything/api/StoreApi.h
index 69c490d7014..e0c75e4fd7c 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/StoreApi.h
+++ b/samples/server/petstore/cpp-pistache-everything/api/StoreApi.h
@@ -52,6 +52,13 @@ private:
void place_order_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void store_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -59,6 +66,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache-everything/api/UserApi.cpp b/samples/server/petstore/cpp-pistache-everything/api/UserApi.cpp
index 92b26089eda..e2019050620 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/UserApi.cpp
+++ b/samples/server/petstore/cpp-pistache-everything/api/UserApi.cpp
@@ -46,6 +46,12 @@ void UserApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&UserApi::user_api_default_handler, this));
}
+void UserApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair UserApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -59,6 +65,12 @@ std::pair UserApi::handleParsingException(con
}
}
+void UserApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair UserApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -76,8 +88,7 @@ void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistac
nlohmann::json::parse(request.body()).get_to(user);
user.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -87,8 +98,7 @@ void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -109,8 +119,7 @@ void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Reques
for (const auto& validationParam : user)
validationParam.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -120,8 +129,7 @@ void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Reques
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -142,8 +150,7 @@ void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request
for (const auto& validationParam : user)
validationParam.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -153,8 +160,7 @@ void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -175,8 +181,7 @@ void UserApi::delete_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -197,8 +202,7 @@ void UserApi::get_user_by_name_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -235,8 +239,7 @@ void UserApi::login_user_handler(const Pistache::Rest::Request &request, Pistach
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -255,8 +258,7 @@ void UserApi::logout_user_handler(const Pistache::Rest::Request &, Pistache::Htt
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -279,8 +281,7 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac
nlohmann::json::parse(request.body()).get_to(user);
user.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -290,8 +291,7 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache-everything/api/UserApi.h b/samples/server/petstore/cpp-pistache-everything/api/UserApi.h
index 8ca97145d5b..b40dc0ff603 100644
--- a/samples/server/petstore/cpp-pistache-everything/api/UserApi.h
+++ b/samples/server/petstore/cpp-pistache-everything/api/UserApi.h
@@ -56,6 +56,13 @@ private:
void update_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void user_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -63,6 +70,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.cpp b/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.cpp
index afeb584db41..0be77281053 100644
--- a/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.cpp
+++ b/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.cpp
@@ -39,6 +39,12 @@ void StoreApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&StoreApi::store_api_default_handler, this));
}
+void StoreApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -52,6 +58,12 @@ std::pair StoreApi::handleParsingException(co
}
}
+void StoreApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -67,8 +79,7 @@ void StoreApi::get_nested_object_handler(const Pistache::Rest::Request &, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.h b/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.h
index c6b96d2c77b..c58857af0d5 100644
--- a/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.h
+++ b/samples/server/petstore/cpp-pistache-nested-schema-refs/api/StoreApi.h
@@ -47,6 +47,13 @@ private:
void get_nested_object_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void store_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -54,6 +61,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache/api/PetApi.cpp b/samples/server/petstore/cpp-pistache/api/PetApi.cpp
index 63f07ea908a..0150d01324f 100644
--- a/samples/server/petstore/cpp-pistache/api/PetApi.cpp
+++ b/samples/server/petstore/cpp-pistache/api/PetApi.cpp
@@ -46,6 +46,12 @@ void PetApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&PetApi::pet_api_default_handler, this));
}
+void PetApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair PetApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -59,6 +65,12 @@ std::pair PetApi::handleParsingException(cons
}
}
+void PetApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair PetApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -76,8 +88,7 @@ void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::H
nlohmann::json::parse(request.body()).get_to(body);
body.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -87,8 +98,7 @@ void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::H
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -112,8 +122,7 @@ void PetApi::delete_pet_handler(const Pistache::Rest::Request &request, Pistache
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -142,8 +151,7 @@ void PetApi::find_pets_by_status_handler(const Pistache::Rest::Request &request,
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -172,8 +180,7 @@ void PetApi::find_pets_by_tags_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -194,8 +201,7 @@ void PetApi::get_pet_by_id_handler(const Pistache::Rest::Request &request, Pista
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -216,8 +222,7 @@ void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache
nlohmann::json::parse(request.body()).get_to(body);
body.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -227,8 +232,7 @@ void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -246,8 +250,7 @@ void PetApi::update_pet_with_form_handler(const Pistache::Rest::Request &request
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -265,8 +268,7 @@ void PetApi::upload_file_handler(const Pistache::Rest::Request &request, Pistach
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache/api/PetApi.h b/samples/server/petstore/cpp-pistache/api/PetApi.h
index 6abdbebdbde..6829f157e54 100644
--- a/samples/server/petstore/cpp-pistache/api/PetApi.h
+++ b/samples/server/petstore/cpp-pistache/api/PetApi.h
@@ -57,6 +57,13 @@ private:
void upload_file_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void pet_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -64,6 +71,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp
index a2c4931e43d..768998c87f3 100644
--- a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp
+++ b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp
@@ -42,6 +42,12 @@ void StoreApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&StoreApi::store_api_default_handler, this));
}
+void StoreApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -55,6 +61,12 @@ std::pair StoreApi::handleParsingException(co
}
}
+void StoreApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair StoreApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -72,8 +84,7 @@ void StoreApi::delete_order_handler(const Pistache::Rest::Request &request, Pist
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -92,8 +103,7 @@ void StoreApi::get_inventory_handler(const Pistache::Rest::Request &, Pistache::
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -114,8 +124,7 @@ void StoreApi::get_order_by_id_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -136,8 +145,7 @@ void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pista
nlohmann::json::parse(request.body()).get_to(body);
body.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -147,8 +155,7 @@ void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pista
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache/api/StoreApi.h b/samples/server/petstore/cpp-pistache/api/StoreApi.h
index c3ee1b57bef..0357820d492 100644
--- a/samples/server/petstore/cpp-pistache/api/StoreApi.h
+++ b/samples/server/petstore/cpp-pistache/api/StoreApi.h
@@ -52,6 +52,13 @@ private:
void place_order_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void store_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -59,6 +66,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.
diff --git a/samples/server/petstore/cpp-pistache/api/UserApi.cpp b/samples/server/petstore/cpp-pistache/api/UserApi.cpp
index 8c235b15b00..3669077f214 100644
--- a/samples/server/petstore/cpp-pistache/api/UserApi.cpp
+++ b/samples/server/petstore/cpp-pistache/api/UserApi.cpp
@@ -46,6 +46,12 @@ void UserApi::setupRoutes() {
router->addCustomHandler(Routes::bind(&UserApi::user_api_default_handler, this));
}
+void UserApi::handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleParsingException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair UserApi::handleParsingException(const std::exception& ex) const noexcept
{
try {
@@ -59,6 +65,12 @@ std::pair UserApi::handleParsingException(con
}
}
+void UserApi::handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept
+{
+ std::pair codeAndError = handleOperationException(ex);
+ response.send(codeAndError.first, codeAndError.second);
+}
+
std::pair UserApi::handleOperationException(const std::exception& ex) const noexcept
{
return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what());
@@ -76,8 +88,7 @@ void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistac
nlohmann::json::parse(request.body()).get_to(body);
body.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -87,8 +98,7 @@ void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -109,8 +119,7 @@ void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Reques
for (const auto& validationParam : body)
validationParam.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -120,8 +129,7 @@ void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Reques
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -142,8 +150,7 @@ void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request
for (const auto& validationParam : body)
validationParam.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -153,8 +160,7 @@ void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -175,8 +181,7 @@ void UserApi::delete_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -197,8 +202,7 @@ void UserApi::get_user_by_name_handler(const Pistache::Rest::Request &request, P
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -235,8 +239,7 @@ void UserApi::login_user_handler(const Pistache::Rest::Request &request, Pistach
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -255,8 +258,7 @@ void UserApi::logout_user_handler(const Pistache::Rest::Request &, Pistache::Htt
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
@@ -279,8 +281,7 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac
nlohmann::json::parse(request.body()).get_to(body);
body.validate();
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleParsingException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleParsingException(e, response);
return;
}
@@ -290,8 +291,7 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac
response.send(static_cast(e.code()), e.what());
return;
} catch (std::exception &e) {
- const std::pair errorInfo = this->handleOperationException(e);
- response.send(errorInfo.first, errorInfo.second);
+ this->handleOperationException(e, response);
return;
}
diff --git a/samples/server/petstore/cpp-pistache/api/UserApi.h b/samples/server/petstore/cpp-pistache/api/UserApi.h
index dc98603a046..b153acd9008 100644
--- a/samples/server/petstore/cpp-pistache/api/UserApi.h
+++ b/samples/server/petstore/cpp-pistache/api/UserApi.h
@@ -56,6 +56,13 @@ private:
void update_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
void user_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
+ ///
+ /// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleParsingException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
/// May be overridden to return custom error formats. This is called inside a catch block.
@@ -63,6 +70,13 @@ private:
///
virtual std::pair handleParsingException(const std::exception& ex) const noexcept;
+ ///
+ /// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
+ /// May be overridden to return custom error formats. This is called inside a catch block.
+ /// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
+ ///
+ virtual void handleOperationException(const std::exception& ex, Pistache::Http::ResponseWriter &response) const noexcept;
+
///
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
/// May be overridden to return custom error formats. This is called inside a catch block.