1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.handlers;
12
13 import org.mule.config.spring.parsers.generic.OrphanDefinitionParser;
14 import org.mule.config.spring.parsers.specific.InvokerMessageProcessorDefinitionParser;
15 import org.mule.config.spring.util.ParamReader;
16
17 import java.io.IOException;
18 import java.lang.reflect.Method;
19
20
21
22
23
24 public abstract class AbstractPojoNamespaceHandler extends AbstractMuleNamespaceHandler
25 {
26 public void registerPojo(String configElementName, Class<?> cls)
27 {
28
29 OrphanDefinitionParser parser = new OrphanDefinitionParser(cls, true);
30 parser.addIgnored("name");
31 registerMuleBeanDefinitionParser(configElementName, parser);
32
33
34 try
35 {
36 ParamReader paramReader = new ParamReader(cls);
37
38 for (Method m : cls.getDeclaredMethods())
39 {
40
41 if (!m.getName().startsWith("set"))
42 {
43 String[] parameterNames = paramReader.getParameterNames(m);
44
45 registerMuleBeanDefinitionParser(splitCamelCase(m.getName()),
46 new InvokerMessageProcessorDefinitionParser("messageProcessor", cls, m.getName(),
47 parameterNames));
48 }
49 }
50 }
51 catch (IOException e)
52 {
53 throw new RuntimeException(e);
54 }
55 }
56
57 protected static String splitCamelCase(String s)
58 {
59 if (s.contains("get"))
60 {
61 s = s.substring(3);
62 }
63 return s.replaceAll(
64 String.format("%s|%s|%s", "(?<=[A-Z])(?=[A-Z][a-z][0-9])", "(?<=[^A-Z])(?=[A-Z])",
65 "(?<=[A-Za-z0-9])(?=[^A-Za-z0-9])"), "-").toLowerCase();
66 }
67
68 }