Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
Transformer |
|
| 0.0;0 |
1 | /* | |
2 | * $Id: Transformer.java 20321 2010-11-24 15:21:24Z dfeist $ | |
3 | * -------------------------------------------------------------------------------------- | |
4 | * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com | |
5 | * | |
6 | * The software in this package is published under the terms of the CPAL v1.0 | |
7 | * license, a copy of which has been included with this distribution in the | |
8 | * LICENSE.txt file. | |
9 | */ | |
10 | ||
11 | package org.mule.api.annotations; | |
12 | ||
13 | import java.lang.annotation.Documented; | |
14 | import java.lang.annotation.ElementType; | |
15 | import java.lang.annotation.Retention; | |
16 | import java.lang.annotation.RetentionPolicy; | |
17 | import java.lang.annotation.Target; | |
18 | ||
19 | /** | |
20 | * Used to mark a that a class contains methods which are Mule Transformer, which means it will be made available in the Mule container. | |
21 | * Transformers are used to convert one object type to another. Mule uses them to provide automatic conversion of Java types | |
22 | * and now support Mime type conversion too. | |
23 | * | |
24 | * The parameters passed into the method define the source object(s) to transform, the return type of the method defines the return object type. | |
25 | * Transformers can define additional source types, that when received will be automatically converted to the parameter type accepted by | |
26 | * the annotated method. | |
27 | * | |
28 | * There are some rules to follow when writing a transformer method - | |
29 | * <ol> | |
30 | * <li>The method's declaring class must be annotated with ContainsTransformerMethods</li> | |
31 | * <li>The annotation must appear on a concrete method, not on an abstract or interface method</li> | |
32 | * <li>The method must be public</li> | |
33 | * <li>The method must have a non-void return type</li> | |
34 | * <li>The method must have at least one parameter argument</li> | |
35 | * </ol> | |
36 | * | |
37 | * It is good practice to define any custom transformers in their own class (a class can have more than one transformer method). | |
38 | * A transformer class should be thread-safe and not have any transitive state, meaning that it should not maintain state as | |
39 | * a result of a transformation. It is fine for transformers to have configuration state, such as in an XSLT or XQuery template file | |
40 | * (note that Mule already provides transformers for XSLT and XQuery). | |
41 | */ | |
42 | @Target(ElementType.METHOD) | |
43 | @Retention(RetentionPolicy.RUNTIME) | |
44 | @Documented | |
45 | public @interface Transformer | |
46 | { | |
47 | /** | |
48 | * The 'priorityWeighting property is used to resolve conflicts where there is more than one transformers that match | |
49 | * the selection criteria. 10 is the highest priority and 1 is the lowest. | |
50 | * | |
51 | * @return the priority weighting for this transformer. If the class defines more than one transform method, every transform | |
52 | * method will have the same weighting. | |
53 | */ | |
54 | int priorityWeighting() default 5; | |
55 | ||
56 | //TODO BL-140 add when we get support for Transformer mime types | |
57 | // String sourceMimeType() default MimeTypes.ANY; | |
58 | // | |
59 | // String resultMimeType() default MimeTypes.ANY; | |
60 | ||
61 | /** | |
62 | * SourceTypes define additional types that this transformer will accepts as a sourceType (beyond the method parameter). | |
63 | * At run time if the current message matches one of these source types, Mule will attempt to transform from | |
64 | * the source type to the method parameter type. This means that transformations can be chained. The user can create | |
65 | * other transformers to be a part of this chain. | |
66 | * | |
67 | * @return an array of class types which allow the transformer to be matched on | |
68 | */ | |
69 | Class[] sourceTypes() default {}; | |
70 | } |