1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. import java.util.concurrent.ExecutorService;
  6. import java.util.concurrent.Executors;
  7. import java.util.concurrent.TimeUnit;
  8. public class HeaderValidator {
  9. private final Queue<HeaderMetadata> taskQueue = new LinkedList<>();
  10. private final List<HeaderMetadata> failedTasks = new ArrayList<>();
  11. private final ExecutorService executorService = Executors.newFixedThreadPool(10); //Adjust thread pool size
  12. private final int maxFailedTasks = 100; //Limit number of failed tasks to prevent unbounded accumulation
  13. public void enqueueTask(HeaderMetadata task) {
  14. taskQueue.offer(task);
  15. }
  16. public List<HeaderMetadata> getFailedTasks() {
  17. return failedTasks;
  18. }
  19. public void startValidation() {
  20. while (true) {
  21. HeaderMetadata task = taskQueue.poll();
  22. if (task == null) {
  23. break; //Queue is empty
  24. }
  25. executorService.execute(() -> {
  26. try {
  27. validateHeaderMetadata(task);
  28. } catch (Exception e) {
  29. System.err.println("Validation failed for: " + task + ". Error: " + e.getMessage());
  30. failedTasks.add(task);
  31. }
  32. });
  33. }
  34. executorService.shutdown();
  35. try {
  36. executorService.awaitTermination(60, TimeUnit.SECONDS); //Give threads time to finish
  37. } catch (InterruptedException e) {
  38. System.err.println("Executor termination interrupted: " + e.getMessage());
  39. }
  40. }
  41. private void validateHeaderMetadata(HeaderMetadata task) throws Exception {
  42. // Simulate validation logic. Replace with your actual validation checks.
  43. if (!task.isValid()) {
  44. throw new IllegalArgumentException("Header metadata is invalid: " + task);
  45. }
  46. System.out.println("Validation successful for: " + task);
  47. }
  48. //Inner class to represent header metadata
  49. public static class HeaderMetadata {
  50. private final String headerName;
  51. private final String headerValue;
  52. public HeaderMetadata(String headerName, String headerValue) {
  53. this.headerName = headerName;
  54. this.headerValue = headerValue;
  55. }
  56. public String getHeaderName() {
  57. return headerName;
  58. }
  59. public String getHeaderValue() {
  60. return headerValue;
  61. }
  62. public boolean isValid() {
  63. //Replace with your validation logic
  64. return headerValue != null && !headerValue.isEmpty();
  65. }
  66. @Override
  67. public String toString() {
  68. return "HeaderMetadata{" +
  69. "headerName='" + headerName + '\'' +
  70. ", headerValue='" + headerValue + '\'' +
  71. '}';
  72. }
  73. }
  74. public static void main(String[] args) throws InterruptedException {
  75. HeaderValidator validator = new HeaderValidator();
  76. //Create some header metadata
  77. List<HeaderMetadata> tasks = new ArrayList<>();
  78. tasks.add(new HeaderMetadata("Content-Type", "application/json"));
  79. tasks.add(new HeaderMetadata("Authorization", "Bearer token"));
  80. tasks.add(new HeaderMetadata("Content-Type", "")); //Invalid
  81. tasks.add(new HeaderMetadata("X-Custom-Header", null)); //Invalid
  82. tasks.add(new HeaderMetadata("User-Agent", "MyApplication/1.0"));
  83. //Enqueue the tasks
  84. for (HeaderMetadata task : tasks) {
  85. validator.enqueueTask(task);
  86. }
  87. //Start the validation process
  88. validator.startValidation();
  89. System.out.println("Validation complete. Failed tasks: " + validator.getFailedTasks());
  90. }
  91. }

Add your comment