docs: public void run() {
          ConnectionFactory connectionFactory = Optional.ofNullable(endpointConfiguration.getConnectionFactory())
                                                        .orElse(endpointConfiguration.getJmsTemplate().getConnectionFactory());
  
          TopicConnection connection = null;
          try {
              if (connectionFactory == null || !(connectionFactory instanceof TopicConnectionFactory)) {
                  throw new CitrusRuntimeException("Failed to create JMS topic subscriber for unsupported connection factory type: " + Optional.ofNullable(connectionFactory)
                          .map(Object::getClass)
                          .map(Class::getName)
                          .orElse("connection factory not set"));
              }
  
              connection = ((TopicConnectionFactory)connectionFactory).createTopicConnection();
  
              TopicSession session = connection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
              Topic topic;
              if (endpointConfiguration.getDestination() != null && endpointConfiguration.getDestination() instanceof Topic) {
                  topic = (Topic) endpointConfiguration.getDestination();
              } else if (StringUtils.hasText(endpointConfiguration.getDestinationName())) {
                  topic = session.createTopic(endpointConfiguration.getDestinationName());
              } else if (endpointConfiguration.getJmsTemplate().getDefaultDestination() != null && endpointConfiguration.getJmsTemplate().getDefaultDestination() instanceof Topic) {
                  topic = (Topic) endpointConfiguration.getJmsTemplate().getDefaultDestination();
              } else if (StringUtils.hasText(endpointConfiguration.getJmsTemplate().getDefaultDestinationName())) {
                  topic = session.createTopic(endpointConfiguration.getJmsTemplate().getDefaultDestinationName());
              } else {
                  throw new CitrusRuntimeException("Unable to receive message - JMS destination not set");
              }
  
              TopicSubscriber subscriber;
              if (endpointConfiguration.isDurableSubscription()) {
                  log.debug(String.format("Create JMS topic durable subscription '%s'", Optional.ofNullable(endpointConfiguration.getDurableSubscriberName()).orElse(getName())));
                  subscriber = session.createDurableSubscriber(topic, Optional.ofNullable(endpointConfiguration.getDurableSubscriberName()).orElse(getName()));
              } else {
                  log.debug("Create JMS topic subscription");
                  subscriber = session.createSubscriber(topic);
              }
  
              connection.start();
  
              started.complete(true);
  
              while (running) {
                  javax.jms.Message event = subscriber.receive();
  
                  if (event != null) {
                      TestContext context = testContextFactory.getObject();
                      Message message = endpointConfiguration.getMessageConverter().convertInbound(event, endpointConfiguration, context);
  
                      if (log.isDebugEnabled()) {
                          log.debug(String.format("Received topic event '%s'", message.getId()));
                      }
                      messageChannel.createProducer().send(message, context);
                  } else {
                      log.warn("Topic subscriber received null message - continue after " + endpointConfiguration.getPollingInterval() + " milliseconds");
  
                      try {
                          Thread.sleep(endpointConfiguration.getPollingInterval());
                      } catch (InterruptedException e) {
                          log.warn("Interrupted while waiting after null message", e);
                      }
                  }
              }
          } catch (RuntimeException e) {
              started.completeExceptionally(e);
              throw e;
          } catch (JMSException e) {
              started.completeExceptionally(e);
          } finally {
              if (connection != null) {
                  try {
                      connection.close();
                  } catch (JMSException e) {
                      log.warn("Failed to close JMS topic connection", e);
                  }
              }
  
              stopped.complete(true);
          }
      }