• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openmrs / openmrs-core / 28515008125

01 Jul 2026 11:43AM UTC coverage: 63.785% (+0.1%) from 63.651%
28515008125

push

github

rkorytkowski
Fix @since 2.9.x to 2.9.0

24079 of 37750 relevant lines covered (63.79%)

0.64 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.0
/api/src/main/java/org/openmrs/event/outbox/OutboxEventInterceptor.java
1
/**
2
 * This Source Code Form is subject to the terms of the Mozilla Public License,
3
 * v. 2.0. If a copy of the MPL was not distributed with this file, You can
4
 * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
5
 * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
6
 *
7
 * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
8
 * graphic logo is a trademark of OpenMRS Inc.
9
 */
10
package org.openmrs.event.outbox;
11

12
import com.fasterxml.jackson.core.JsonProcessingException;
13
import com.fasterxml.jackson.databind.ObjectMapper;
14
import org.openmrs.event.EventPayload;
15
import org.slf4j.Logger;
16
import org.slf4j.LoggerFactory;
17
import org.springframework.context.event.EventListener;
18
import org.springframework.stereotype.Component;
19

20
import java.util.Date;
21

22
/**
23
 * @since 2.9.0
24
 */
25
@Component
26
public class OutboxEventInterceptor {
27

28
        private static final Logger log = LoggerFactory.getLogger(OutboxEventInterceptor.class);
1✔
29
        
30
        private final ObjectMapper objectMapper;
31
        private final OutboxEventRegistry outboxEventRegistry;
32
        private final OutboxEventService outboxEventService;
33

34
        public OutboxEventInterceptor(OutboxEventService outboxEventService,
35
                                      ObjectMapper objectMapper, OutboxEventRegistry outboxEventRegistry) {
1✔
36
                this.outboxEventService = outboxEventService;
1✔
37
                this.objectMapper = objectMapper; 
1✔
38
                this.outboxEventRegistry = outboxEventRegistry;
1✔
39
        }
1✔
40
        
41
        @EventListener
42
        public void interceptAndSaveToOutbox(OutboxableEvent event) throws OutboxException {
43
                if (!outboxEventRegistry.hasOutboxListeners(event)) {
1✔
44
                        return;
1✔
45
                }
46
                saveToDatabase(event);
1✔
47
        }
1✔
48

49
        private void saveToDatabase(OutboxableEvent event) throws OutboxException {
50
                try {
51
                        OutboxEvent item = new OutboxEvent();
1✔
52
                        item.setEventType(event.getClass().getName());
1✔
53
                        if (event instanceof EventPayload) {
1✔
54
                                item.setPayload(((EventPayload) event).toPayload());
×
55
                        } else {
56
                                item.setPayload(objectMapper.writeValueAsString(event));
1✔
57
                        }
58
                        item.setDateCreated(new Date());
1✔
59
                        item.setDateChanged(item.getDateCreated());
1✔
60
                        item.setStatus(OutboxEvent.Status.PENDING);
1✔
61

62
                        // Guaranteed to run within the existing OpenMRS wrapping transaction (if exists)
63
                        outboxEventService.saveOutboxEvent(item);
1✔
64
                        
65
                        log.debug("Event {} saved to outbox", event.getClass().getSimpleName());
1✔
66
                } catch (JsonProcessingException e) {
×
67
                        log.error("Failed to serialize event for outbox", e);
×
68
                        throw new OutboxException("Failed to serialize outbox event", e);
×
69
                }
1✔
70
        }
1✔
71
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc