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

openmrs / openmrs-core / 26773559161

01 Jun 2026 06:21PM UTC coverage: 63.376% (-0.01%) from 63.389%
26773559161

push

github

web-flow
TRUNK-6429: Create application events for service method calls and entity changes (#6084)

272 of 504 new or added lines in 27 files covered. (53.97%)

5 existing lines in 2 files now uncovered.

23598 of 37235 relevant lines covered (63.38%)

0.63 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.slf4j.Logger;
15
import org.slf4j.LoggerFactory;
16
import org.springframework.context.event.EventListener;
17
import org.springframework.stereotype.Component;
18

19
import java.util.Date;
20

21
/**
22
 * @since 2.9.x
23
 */
24
@Component
25
public class OutboxEventInterceptor {
26

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

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

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

61
                        // Guaranteed to run within the existing OpenMRS wrapping transaction (if exists)
62
                        outboxEventService.saveOutboxEvent(item);
1✔
63
                        
64
                        log.debug("Event {} saved to outbox", event.getClass().getSimpleName());
1✔
NEW
65
                } catch (JsonProcessingException e) {
×
NEW
66
                        log.error("Failed to serialize event for outbox", e);
×
NEW
67
                        throw new OutboxException("Failed to serialize outbox event", e);
×
68
                }
1✔
69
        }
1✔
70
}
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