public String subscribe(
     String topicName,
     BrokerListener brokerListener,
     BrokerConfiguration brokerConfiguration,
     AxisConfiguration axisConfiguration)
     throws BrokerEventProcessingException {
   String subscriptionId = UUID.randomUUID().toString();
   if (!topicBrokerListenerMap.containsKey(topicName)) {
     Map<String, BrokerListener> map = new HashMap<String, BrokerListener>();
     map.put(subscriptionId, brokerListener);
     topicBrokerListenerMap.put(topicName, map);
   } else {
     topicBrokerListenerMap.get(topicName).put(subscriptionId, brokerListener);
     StreamDefinition streamDefinition = topicStreamDefinitionMap.get(topicName);
     if (streamDefinition != null) {
       brokerListener.addEventDefinition(streamDefinition);
     }
   }
   return subscriptionId;
 }
 @Override
 public void definedStream(StreamDefinition streamDefinition, Credentials credentials) {
   topicStreamDefinitionMap.put(createTopic(streamDefinition), streamDefinition);
   Map<String, BrokerListener> brokerListeners =
       topicBrokerListenerMap.get(createTopic(streamDefinition));
   if (brokerListeners == null) {
     brokerListeners = new HashMap<String, BrokerListener>();
     topicBrokerListenerMap.put(createTopic(streamDefinition), brokerListeners);
   }
   //            inputTypeDefMap.put(streamDefinition.getName(), streamDefinition);
   for (BrokerListener brokerListener : brokerListeners.values()) {
     try {
       brokerListener.addEventDefinition(streamDefinition);
     } catch (BrokerEventProcessingException e) {
       log.error(
           "Cannot send Stream Definition to a brokerListener subscribed to "
               + streamDefinition.getStreamId(),
           e);
     }
   }
   streamIdBrokerListenerMap.put(
       streamDefinition.getStreamId(),
       topicBrokerListenerMap.get(createTopic(streamDefinition)));
 }