/** * Register a set of transformers in the transform registry associated with this deployment. * * @param transforms The transforms model. * @param failOnError false to eat duplicate exceptions * @throws DuplicateTransformerException an existing transformer has already been registered for * the from and to types */ public void registerTransformers(TransformsModel transforms, boolean failOnError) throws DuplicateTransformerException { if (transforms == null) { return; } try { for (TransformModel transformModel : transforms.getTransforms()) { Collection<Transformer<?, ?>> transformers = newTransformers(transformModel); transformerLoop: for (Transformer<?, ?> transformer : transformers) { if (_transformerRegistry.hasTransformer(transformer.getFrom(), transformer.getTo())) { Transformer<?, ?> registeredTransformer = _transformerRegistry.getTransformer(transformer.getFrom(), transformer.getTo()); boolean test = false; testLoop: for (StackTraceElement ste : Thread.currentThread().getStackTrace()) { if (ste.getClassName().startsWith("org.switchyard.test.")) { test = true; break testLoop; } } String msg = "Failed to register Transformer '" + toDescription(transformer) + "'. A Transformer for these types is already registered: '" + toDescription(registeredTransformer) + "'."; if (test) { _log.trace(msg); } else if (failOnError) { throw new DuplicateTransformerException(msg); } else { _log.debug(msg); } continue transformerLoop; } _log.debug( "Adding transformer =>" + " From: " + transformer.getFrom() + ", To:" + transformer.getTo()); _transformerRegistry.addTransformer(transformer); _transformers.add(transformer); } } } catch (DuplicateTransformerException e) { throw e; } catch (RuntimeException e) { // If there was an exception for any reason... remove all Transformer instance that have // already been registered with the domain... unregisterTransformers(); throw e; } }
private String toDescription(Transformer<?, ?> transformer) { return transformer.getClass().getName() + "(" + transformer.getFrom() + ", " + transformer.getTo() + ")"; }
@Override public BaseTransformerRegistry addTransformer(Transformer<?, ?> transformer) { _fallbackTransformers.clear(); _transformers.put(new NameKey(transformer.getFrom(), transformer.getTo()), transformer); return this; }
@Override public boolean removeTransformer(Transformer<?, ?> transformer) { _fallbackTransformers.clear(); return _transformers.remove(new NameKey(transformer.getFrom(), transformer.getTo())) != null; }