1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class HeaderWrapper {
  4. /**
  5. * Wraps existing logic for setting response headers with graceful failure handling.
  6. * @param response The response object (e.g., ServletResponse).
  7. * @param headers A map of header names to values to set.
  8. * @return True if headers were successfully set, false otherwise.
  9. */
  10. public boolean setResponseHeaders(Object response, Map<String, String> headers) {
  11. try {
  12. if (response == null) {
  13. System.err.println("Error: Response object is null.");
  14. return false;
  15. }
  16. // Check if the response object has a setHeader method. Handle potential ClassCastExceptions.
  17. if (response instanceof javax.servlet.http.HttpServletResponse) {
  18. HttpServletResponse servletResponse = (HttpServletResponse) response;
  19. for (Map.Entry<String, String> entry : headers.entrySet()) {
  20. servletResponse.setHeader(entry.getKey(), entry.getValue());
  21. }
  22. } else if (response instanceof java.io.OutputStream) {
  23. //Handle OutputStream (for example, for streaming)
  24. for (Map.Entry<String, String> entry : headers.entrySet()) {
  25. try {
  26. OutputStream os = (OutputStream) response;
  27. os.write(entry.getValue().getBytes()); //write the header value to the output stream
  28. } catch (Exception e) {
  29. System.err.println("Error writing header to OutputStream: " + e.getMessage());
  30. return false;
  31. }
  32. }
  33. }
  34. else {
  35. System.err.println("Error: Unsupported response type. Cannot set headers.");
  36. return false;
  37. }
  38. return true; // Headers set successfully
  39. } catch (Exception e) {
  40. System.err.println("Error setting response headers: " + e.getMessage());
  41. return false; // Indicate failure
  42. }
  43. }
  44. /**
  45. * Helper function for setting a single header.
  46. * @param response The response object.
  47. * @param headerName The name of the header.
  48. * @param headerValue The value of the header.
  49. * @return True if the header was set, false otherwise.
  50. */
  51. public boolean setResponseHeader(Object response, String headerName, String headerValue) {
  52. try {
  53. if (response == null) {
  54. System.err.println("Error: Response object is null.");
  55. return false;
  56. }
  57. if (response instanceof javax.servlet.http.HttpServletResponse) {
  58. HttpServletResponse servletResponse = (HttpServletResponse) response;
  59. servletResponse.setHeader(headerName, headerValue);
  60. return true;
  61. } else if (response instanceof java.io.OutputStream) {
  62. //Handle OutputStream (for example, for streaming)
  63. OutputStream os = (OutputStream) response;
  64. os.write(headerValue.getBytes());
  65. return true;
  66. } else {
  67. System.err.println("Error: Unsupported response type. Cannot set headers.");
  68. return false;
  69. }
  70. } catch (Exception e) {
  71. System.err.println("Error setting header: " + e.getMessage());
  72. return false;
  73. }
  74. }
  75. }
  76. //Example of HttpServletResponse
  77. class HttpServletResponseExample{
  78. public static void main(String[] args) {
  79. HeaderWrapper wrapper = new HeaderWrapper();
  80. HttpServletResponse response = new HttpServletResponse(); //mock response
  81. Map<String,String> headers = new HashMap<>();
  82. headers.put("Content-Type", "text/plain");
  83. headers.put("X-Custom-Header", "My Value");
  84. boolean success = wrapper.setResponseHeaders(response, headers);
  85. if(success){
  86. System.out.println("Headers set successfully.");
  87. } else{
  88. System.out.println("Headers failed to set.");
  89. }
  90. }
  91. }
  92. class HttpServletResponse {
  93. public void setHeader(String name, String value) {
  94. System.out.println("Setting header: " + name + " to " + value);
  95. }
  96. }
  97. class OutputStream {
  98. public void write(byte[] b) throws Exception{
  99. System.out.println("Writing to output stream: " + new String(b));
  100. }
  101. }

Add your comment