code: public <T extends BasicMessage> MessageId send(ProducerConnectionContext context,
              BasicMessageWithExtraData<T> message, Map<String, String> headers) throws JMSException {
          if (message.getBinaryData() == null) {
              return send(context, message.getBasicMessage(), headers);
          } else {
              return sendWithBinaryData(context, message.getBasicMessage(), message.getBinaryData(), headers);
          }
      }
docs: If the given {@code message.getBinaryData()} is not {@code null} delegates to
  {@link #sendWithBinaryData(ProducerConnectionContext, BasicMessage, InputStream, Map)} otherwise delegates to
  {@link #send(ProducerConnectionContext, BasicMessageWithExtraData, Map)}
  
  @param context information that determines where the message is sent
  @param message the message to send
  @param headers headers for the JMS transport that will override same-named headers in the basic message
  @return the message ID
  @throws JMSException any error