@Test
  public void testSimpleDiscovery() throws Exception {
    Transformer t =
        muleContext
            .getRegistry()
            .lookupTransformer(DataTypeFactory.STRING, DataTypeFactory.create(Apple.class));
    assertNotNull(t);
    assertEquals(StringToApple.class, t.getClass());

    t =
        muleContext
            .getRegistry()
            .lookupTransformer(DataTypeFactory.STRING, DataTypeFactory.create(Orange.class));
    assertNotNull(t);
    assertEquals(StringToOrange.class, t.getClass());

    try {
      muleContext
          .getRegistry()
          .lookupTransformer(DataTypeFactory.STRING, DataTypeFactory.create(Banana.class));
      fail("There is no transformer to go from String to Banana");
    } catch (TransformerException e) {
      // expected
    }

    muleContext.getRegistry().registerTransformer(new StringToRedApple());

    t =
        muleContext
            .getRegistry()
            .lookupTransformer(DataTypeFactory.STRING, DataTypeFactory.create(RedApple.class));
    assertNotNull(t);
    assertEquals(StringToRedApple.class, t.getClass());
  }
Пример #2
0
 public JsonToXml() {
   this.registerSourceType(DataTypeFactory.STRING);
   this.registerSourceType(DataTypeFactory.INPUT_STREAM);
   this.registerSourceType(DataTypeFactory.BYTE_ARRAY);
   this.registerSourceType(DataTypeFactory.create(Reader.class));
   this.registerSourceType(DataTypeFactory.create(URL.class));
   this.registerSourceType(DataTypeFactory.create(File.class));
   setReturnDataType(DataTypeFactory.XML_STRING);
 }
Пример #3
0
  /**
   * Will set a session level property. These will either be stored and retrieved using the
   * underlying transport mechanism of stored using a default mechanism
   *
   * @param key the key for the object data being stored on the session
   * @param value the value of the session data
   */
  @Override
  public void setProperty(String key, Object value) {
    if (!(value instanceof Serializable)) {
      logger.warn(CoreMessages.sessionPropertyNotSerializableWarning(key));
    }

    DataType dataType = DataTypeFactory.createFromObject(value);

    properties.put(key, new TypedValue(value, dataType));
  }
 @Override
 public Transformer getRoundTripTransformer() throws Exception {
   JsonToObject trans = new JsonToObject();
   trans.setReturnDataType(DataTypeFactory.create(getTestData().getClass()));
   trans.getDeserializationMixins().put(FruitCollection.class, FruitCollectionMixin.class);
   trans.getDeserializationMixins().put(Apple.class, AppleMixin.class);
   trans.getDeserializationMixins().put(Orange.class, OrangeMixin.class);
   initialiseObject(trans);
   return trans;
 }
Пример #5
0
  public XmlToXMLStreamReader() {
    super();
    registerSourceType(Source.class);
    registerSourceType(InputStream.class);
    registerSourceType(Document.class);
    registerSourceType(byte[].class);
    registerSourceType(String.class);

    setReturnDataType(DataTypeFactory.create(XMLStreamReader.class));
  }
 public StringToApple() {
   setReturnDataType(DataTypeFactory.create(Apple.class));
 }
Пример #7
0
 @Override
 public void setProperty(String key, Serializable value) {
   setProperty(key, value, DataTypeFactory.createFromObject(value));
 }
 public ObjectToInputStream() {
   this.registerSourceType(DataTypeFactory.STRING);
   this.registerSourceType(DataTypeFactory.create(OutputHandler.class));
   setReturnDataType(DataTypeFactory.INPUT_STREAM);
 }
 public TransformHttpToNodeRq() {
   registerSourceType(DataTypeFactory.OBJECT);
   setReturnDataType(DataTypeFactory.create(BaseNodeRq.class));
 }
 public JsonToProcessInstance() {
   this.setReturnDataType(DataTypeFactory.create(ProcessInstance.class));
 }
 /**
  * Constructor for multi-part transformers.
  *
  * <p>Host to Java transformers expects a map of byte arrays for multi part payloads. Inheriting
  * classes will set the return class.
  *
  * @param bindingTransformersMap map of transformer sets, one for each part type.
  */
 public AbstractHostToJavaMuleTransformer(
     final Map<String, AbstractTransformers> bindingTransformersMap) {
   super(bindingTransformersMap);
   registerSourceType(DataTypeFactory.create(Map.class));
 }
 /**
  * Constructor for single part transformers.
  *
  * <p>Host to Java transformers expect byte array sources corresponding to mainframe raw data.
  * Alternatively, source can be an inputStream in which case, it is assumed to stream a byte
  * array. Inheriting classes will set the return class.
  *
  * @param bindingTransformers a set of transformers for the part type.
  */
 public AbstractHostToJavaMuleTransformer(final AbstractTransformers bindingTransformers) {
   super(bindingTransformers);
   registerSourceType(DataTypeFactory.create(InputStream.class));
   registerSourceType(DataTypeFactory.BYTE_ARRAY);
 }
 @Override
 public Transformer getRoundTripTransformer() throws Exception {
   XmlToDomDocument trans = createObject(XmlToDomDocument.class); // encoding is not interesting
   trans.setReturnDataType(DataTypeFactory.create(byte[].class));
   return trans;
 }
Пример #14
0
 public ObjectToByteArray() {
   this.registerSourceType(DataTypeFactory.INPUT_STREAM);
   this.registerSourceType(DataTypeFactory.STRING);
   this.registerSourceType(DataTypeFactory.create(OutputHandler.class));
   setReturnDataType(DataTypeFactory.BYTE_ARRAY);
 }
 public StringToRedApple() {
   setReturnDataType(DataTypeFactory.create(RedApple.class));
   setPriorityWeighting(MAX_PRIORITY_WEIGHTING);
 }
 public StringToOrange() {
   setReturnDataType(DataTypeFactory.create(Orange.class));
 }
Пример #17
0
  @Override
  public void processReplyTo(MuleEvent event, MuleMessage returnMessage, Object replyTo)
      throws MuleException {
    Destination replyToDestination = null;
    MessageProducer replyToProducer = null;
    Session session = null;
    try {
      // now we need to send the response
      if (replyTo instanceof Destination) {
        replyToDestination = (Destination) replyTo;
      }
      if (replyToDestination == null) {
        super.processReplyTo(event, returnMessage, replyTo);
        return;
      }

      // This is a work around for JmsTransformers where the current endpoint needs
      // to be set on the transformer so that a JMSMessage can be created correctly (the transformer
      // needs a Session)
      Class srcType = returnMessage.getPayload().getClass();
      for (Iterator iterator = getTransformers().iterator(); iterator.hasNext(); ) {
        Transformer t = (Transformer) iterator.next();
        if (t.isSourceDataTypeSupported(DataTypeFactory.create(srcType))) {
          if (t.getEndpoint() == null) {
            t.setEndpoint(getEndpoint(event, "jms://temporary"));
            break;
          }
        }
      }
      returnMessage.applyTransformers(getTransformers());
      Object payload = returnMessage.getPayload();

      if (replyToDestination instanceof Topic
          && replyToDestination instanceof Queue
          && connector.getJmsSupport() instanceof Jms102bSupport) {
        logger.error(
            StringMessageUtils.getBoilerPlate(
                "ReplyTo destination implements both Queue and Topic "
                    + "while complying with JMS 1.0.2b specification. "
                    + "Please report your application server or JMS vendor name and version "
                    + "to dev<_at_>mule.codehaus.org or http://mule.mulesource.org/jira"));
      }

      final boolean topic = connector.getTopicResolver().isTopic(replyToDestination);
      session = connector.getSession(false, topic);
      Message replyToMessage = JmsMessageUtils.toMessage(payload, session);

      processMessage(replyToMessage, event);
      if (logger.isDebugEnabled()) {
        logger.debug(
            "Sending jms reply to: "
                + replyToDestination
                + "("
                + replyToDestination.getClass().getName()
                + ")");
      }
      replyToProducer =
          connector.getJmsSupport().createProducer(session, replyToDestination, topic);

      // QoS support
      MuleMessage eventMsg = event.getMessage();
      String ttlString = (String) eventMsg.removeProperty(JmsConstants.TIME_TO_LIVE_PROPERTY);
      String priorityString = (String) eventMsg.removeProperty(JmsConstants.PRIORITY_PROPERTY);
      String persistentDeliveryString =
          (String) eventMsg.removeProperty(JmsConstants.PERSISTENT_DELIVERY_PROPERTY);

      String correlationIDString = replyToMessage.getJMSCorrelationID();
      if (StringUtils.isBlank(correlationIDString)) {
        correlationIDString = (String) eventMsg.getProperty(JmsConstants.JMS_MESSAGE_ID);
        replyToMessage.setJMSCorrelationID(correlationIDString);
      }

      event.getService().getStatistics().incSentReplyToEvent();

      final ImmutableEndpoint endpoint = event.getEndpoint();
      if (ttlString == null && priorityString == null && persistentDeliveryString == null) {
        connector.getJmsSupport().send(replyToProducer, replyToMessage, topic, endpoint);
      } else {
        long ttl = Message.DEFAULT_TIME_TO_LIVE;
        int priority = Message.DEFAULT_PRIORITY;

        if (ttlString != null) {
          ttl = Long.parseLong(ttlString);
        }
        if (priorityString != null) {
          priority = Integer.parseInt(priorityString);
        }
        boolean persistent =
            StringUtils.isNotBlank(persistentDeliveryString)
                ? Boolean.valueOf(persistentDeliveryString)
                : connector.isPersistentDelivery();

        connector
            .getJmsSupport()
            .send(replyToProducer, replyToMessage, persistent, priority, ttl, topic, endpoint);
      }

      logger.info(
          "Reply Message sent to: "
              + replyToDestination
              + " with correlationID:"
              + correlationIDString);
    } catch (Exception e) {
      throw new DispatchException(
          JmsMessages.failedToCreateAndDispatchResponse(replyToDestination),
          returnMessage,
          null,
          e);
    } finally {
      connector.closeQuietly(replyToProducer);

      final Transaction transaction = TransactionCoordination.getInstance().getTransaction();
      if (transaction == null) {
        if (logger.isDebugEnabled()) {
          logger.debug("Closing non-TX replyTo session: " + session);
        }
        connector.closeQuietly(session);
      } else if (logger.isDebugEnabled()) {
        logger.debug("Not closing TX replyTo session: " + session);
      }
    }
  }