You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/07/20 08:53:26 UTC

[20/33] git commit: CAMEL-7354: Rest DSL, only path is used for defining the path.

CAMEL-7354: Rest DSL, only path is used for defining the path.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/571b1345
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/571b1345
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/571b1345

Branch: refs/heads/master
Commit: 571b1345c2bf3612eb9f96c8ee29b75bf02b752a
Parents: f73a592
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Jul 16 14:48:11 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Jul 19 09:38:51 2014 +0200

----------------------------------------------------------------------
 .../camel/model/rest/DeleteVerbDefinition.java  |  3 ---
 .../camel/model/rest/GetVerbDefinition.java     |  3 ---
 .../camel/model/rest/HeadVerbDefinition.java    |  3 ---
 .../apache/camel/model/rest/PathDefinition.java | 27 +++++++++++++++-----
 .../camel/model/rest/PostVerbDefinition.java    |  3 ---
 .../camel/model/rest/PutVerbDefinition.java     |  3 ---
 .../apache/camel/model/rest/RestDefinition.java |  8 +++---
 .../apache/camel/model/rest/VerbDefinition.java | 18 +++++++++++++
 .../rest/FromRestGetEmbeddedRouteTest.java      |  6 ++---
 .../camel/component/rest/FromRestGetTest.java   | 10 ++++----
 .../management/ManagedCamelContextTest.java     |  2 +-
 .../management/ManagedFromRestGetTest.java      |  8 +++---
 .../camel/blueprint/BlueprintJaxbRestTest.java  |  6 ++---
 .../rest/FromRestGetEmbeddedRouteTest.java      |  6 ++---
 .../component/rest/FromRestGetTest.java         | 10 ++++----
 15 files changed, 67 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/DeleteVerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/DeleteVerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/DeleteVerbDefinition.java
index 137c607..990819a 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/DeleteVerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/DeleteVerbDefinition.java
@@ -24,7 +24,4 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class DeleteVerbDefinition extends VerbDefinition {
 
-    public DeleteVerbDefinition() {
-        setMethod("delete");
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/GetVerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/GetVerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/GetVerbDefinition.java
index 03315d4..f3e398e 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/GetVerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/GetVerbDefinition.java
@@ -24,7 +24,4 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class GetVerbDefinition extends VerbDefinition {
 
-    public GetVerbDefinition() {
-        setMethod("get");
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/HeadVerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/HeadVerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/HeadVerbDefinition.java
index 7db89a3..abcd2f9 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/HeadVerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/HeadVerbDefinition.java
@@ -24,7 +24,4 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class HeadVerbDefinition extends VerbDefinition {
 
-    public HeadVerbDefinition() {
-        setMethod("head");
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/PathDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/PathDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/PathDefinition.java
index bb70b3c..06d95bc 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/PathDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/PathDefinition.java
@@ -28,18 +28,20 @@ import javax.xml.bind.annotation.XmlTransient;
 import org.apache.camel.model.ToDefinition;
 
 @XmlRootElement(name = "path")
-@XmlAccessorType(XmlAccessType.PROPERTY)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class PathDefinition {
 
+    @XmlAttribute(required = true)
     private String uri;
+    @XmlElementRef
     private List<VerbDefinition> verbs = new ArrayList<VerbDefinition>();
+    @XmlTransient
     private RestDefinition rest;
 
     public String getUri() {
         return uri;
     }
 
-    @XmlAttribute(required = true)
     public void setUri(String uri) {
         this.uri = uri;
     }
@@ -48,7 +50,6 @@ public class PathDefinition {
         return verbs;
     }
 
-    @XmlElementRef
     public void setVerbs(List<VerbDefinition> verbs) {
         this.verbs = verbs;
     }
@@ -57,7 +58,6 @@ public class PathDefinition {
         return rest;
     }
 
-    @XmlTransient
     public void setRest(RestDefinition rest) {
         this.rest = rest;
     }
@@ -120,8 +120,23 @@ public class PathDefinition {
     }
 
     private PathDefinition addVerb(String verb, String url) {
-        VerbDefinition answer = new VerbDefinition();
-        answer.setMethod(verb);
+        VerbDefinition answer;
+
+        if ("get".equals(verb)) {
+            answer = new GetVerbDefinition();
+        } else if ("post".equals(verb)) {
+            answer = new PostVerbDefinition();
+        } else if ("delete".equals(verb)) {
+            answer = new DeleteVerbDefinition();
+        } else if ("head".equals(verb)) {
+            answer = new HeadVerbDefinition();
+        } else if ("put".equals(verb)) {
+            answer = new PutVerbDefinition();
+        } else {
+            answer = new VerbDefinition();
+            answer.setMethod(verb);
+        }
+
         answer.setPath(this);
         getVerbs().add(answer);
         return this;

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/PostVerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/PostVerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/PostVerbDefinition.java
index 3a8f39e..a5d2fb0 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/PostVerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/PostVerbDefinition.java
@@ -24,7 +24,4 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class PostVerbDefinition extends VerbDefinition {
 
-    public PostVerbDefinition() {
-        setMethod("post");
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/PutVerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/PutVerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/PutVerbDefinition.java
index 2a2f616..b1f4541 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/PutVerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/PutVerbDefinition.java
@@ -24,7 +24,4 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class PutVerbDefinition extends VerbDefinition {
 
-    public PutVerbDefinition() {
-        setMethod("put");
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index 546bb3a..24dd3e9 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -31,17 +31,18 @@ import org.apache.camel.model.RouteDefinition;
  * Represents an XML &lt;rest/&gt; element
  */
 @XmlRootElement(name = "rest")
-@XmlAccessorType(XmlAccessType.PROPERTY)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class RestDefinition {
 
+    @XmlAttribute
     private String component;
+    @XmlElementRef
     private List<PathDefinition> paths = new ArrayList<PathDefinition>();
 
     public String getComponent() {
         return component;
     }
 
-    @XmlAttribute
     public void setComponent(String component) {
         this.component = component;
     }
@@ -50,7 +51,6 @@ public class RestDefinition {
         return paths;
     }
 
-    @XmlElementRef
     public void setPaths(List<PathDefinition> paths) {
         this.paths = paths;
     }
@@ -88,7 +88,7 @@ public class RestDefinition {
         for (PathDefinition path : getPaths()) {
             String uri = path.getUri();
             for (VerbDefinition verb : path.getVerbs()) {
-                String from = "rest:" + verb.getMethod() + ":" + uri + (getComponent() != null ? "?componentName=" + getComponent() : "");
+                String from = "rest:" + verb.asVerb() + ":" + uri + (getComponent() != null ? "?componentName=" + getComponent() : "");
                 RouteDefinition route = new RouteDefinition();
                 route.fromRest(from);
                 answer.add(route);

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
index b3f48aa..9d99747 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
@@ -93,4 +93,22 @@ public class VerbDefinition extends OutputDefinition<VerbDefinition> {
         return path.verb(verb);
     }
 
+    public String asVerb() {
+        // we do not want the jaxb model to repeat itself, by outputting <get method="get">
+        // so we defer the verb from the instance type
+        if (this instanceof GetVerbDefinition) {
+            return "get";
+        } else if (this instanceof PostVerbDefinition) {
+            return "post";
+        } else if (this instanceof PutVerbDefinition) {
+            return "put";
+        } else if (this instanceof DeleteVerbDefinition) {
+            return "delete";
+        } else if (this instanceof HeadVerbDefinition) {
+            return "head";
+        } else {
+            return method;
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetEmbeddedRouteTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetEmbeddedRouteTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetEmbeddedRouteTest.java
index 4343646..a8b21eb 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetEmbeddedRouteTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetEmbeddedRouteTest.java
@@ -50,13 +50,13 @@ public class FromRestGetEmbeddedRouteTest extends ContextTestSupport {
 
         path = rest.getPaths().get(1);
         assertEquals("/say/bye", path.getUri());
-        assertEquals("application/json", path.getVerbs().get(1).getAccept());
-        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(1).getOutputs().get(0));
+        assertEquals("application/json", path.getVerbs().get(0).getAccept());
+        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
         assertEquals("mock:bye", to.getUri());
 
         // the rest becomes routes and the input is a seda endpoint created by the DummyRestConsumerFactory
         getMockEndpoint("mock:update").expectedMessageCount(1);
-        template.sendBody("seda:post-say", "I was here");
+        template.sendBody("seda:post-say-bye", "I was here");
         assertMockEndpointsSatisfied();
 
         String out = template.requestBody("seda:get-say-hello", "Me", String.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
index 4b607b7..72ef31f 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java
@@ -46,17 +46,17 @@ public class FromRestGetTest extends ContextTestSupport {
         PathDefinition path = rest.getPaths().get(0);
         assertEquals("/say/hello", path.getUri());
         ToDefinition to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
-        assertEquals("mock:hello", to.getUri());
+        assertEquals("direct:hello", to.getUri());
 
         path = rest.getPaths().get(1);
         assertEquals("/say/bye", path.getUri());
-        assertEquals("application/json", path.getVerbs().get(1).getAccept());
-        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(1).getOutputs().get(0));
-        assertEquals("mock:bye", to.getUri());
+        assertEquals("application/json", path.getVerbs().get(0).getAccept());
+        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
+        assertEquals("direct:bye", to.getUri());
 
         // the rest becomes routes and the input is a seda endpoint created by the DummyRestConsumerFactory
         getMockEndpoint("mock:update").expectedMessageCount(1);
-        template.sendBody("seda:post-say", "I was here");
+        template.sendBody("seda:post-say-bye", "I was here");
         assertMockEndpointsSatisfied();
 
         String out = template.requestBody("seda:get-say-hello", "Me", String.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
index 8223e7b..735ee6c 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
@@ -195,7 +195,7 @@ public class ManagedCamelContextTest extends ManagementTestSupport {
         Map<String, Properties> info = (Map<String, Properties>) mbeanServer.invoke(on, "findComponents", null, null);
         assertNotNull(info);
 
-        assertEquals(22, info.size());
+        assertEquals(23, info.size());
         Properties prop = info.get("seda");
         assertNotNull(prop);
         assertEquals("seda", prop.get("name"));

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/camel-core/src/test/java/org/apache/camel/management/ManagedFromRestGetTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedFromRestGetTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedFromRestGetTest.java
index b9b87e5..bd6b8d4 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedFromRestGetTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedFromRestGetTest.java
@@ -50,10 +50,10 @@ public class ManagedFromRestGetTest extends ManagementTestSupport {
 
         assertTrue(xml.contains("rests"));
         assertTrue(xml.contains("rest"));
-        assertTrue(xml.contains("<path uri=\"/say\">"));
-        assertTrue(xml.contains("<get method=\"get\" uri=\"/hello\">"));
-        assertTrue(xml.contains("<get method=\"get\" uri=\"/bye\">"));
-        assertTrue(xml.contains("<post method=\"post\">"));
+        assertTrue(xml.contains("<path uri=\"/say/hello\">"));
+        assertTrue(xml.contains("<path uri=\"/say/bye\">"));
+        assertTrue(xml.contains("<get>"));
+        assertTrue(xml.contains("<post>"));
 
         String xml2 = (String) mbeanServer.invoke(on, "dumpRoutesAsXml", null, null);
         log.info(xml2);

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintJaxbRestTest.java
----------------------------------------------------------------------
diff --git a/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintJaxbRestTest.java b/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintJaxbRestTest.java
index 7015e15..a7e6d07 100644
--- a/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintJaxbRestTest.java
+++ b/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintJaxbRestTest.java
@@ -75,8 +75,8 @@ public class BlueprintJaxbRestTest extends TestSupport {
 
         assertEquals(1, cfb.getRests().get(0).getPaths().get(0).getVerbs().size());
         assertEquals(2, cfb.getRests().get(0).getPaths().get(1).getVerbs().size());
-        assertEquals("get", cfb.getRests().get(0).getPaths().get(0).getVerbs().get(0).getMethod());
-        assertEquals("get", cfb.getRests().get(0).getPaths().get(1).getVerbs().get(0).getMethod());
-        assertEquals("post", cfb.getRests().get(0).getPaths().get(1).getVerbs().get(1).getMethod());
+        assertEquals("get", cfb.getRests().get(0).getPaths().get(0).getVerbs().get(0).asVerb());
+        assertEquals("get", cfb.getRests().get(0).getPaths().get(1).getVerbs().get(0).asVerb());
+        assertEquals("post", cfb.getRests().get(0).getPaths().get(1).getVerbs().get(1).asVerb());
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetEmbeddedRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetEmbeddedRouteTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetEmbeddedRouteTest.java
index ab5aafc..68cbb69 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetEmbeddedRouteTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetEmbeddedRouteTest.java
@@ -48,13 +48,13 @@ public class FromRestGetEmbeddedRouteTest extends CamelBlueprintTestSupport {
 
         path = rest.getPaths().get(1);
         assertEquals("/say/bye", path.getUri());
-        assertEquals("application/json", path.getVerbs().get(1).getAccept());
-        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(1).getOutputs().get(0));
+        assertEquals("application/json", path.getVerbs().get(0).getAccept());
+        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
         assertEquals("mock:bye", to.getUri());
 
         // the rest becomes routes and the input is a seda endpoint created by the DummyRestConsumerFactory
         getMockEndpoint("mock:update").expectedMessageCount(1);
-        template.sendBody("seda:post-say", "I was here");
+        template.sendBody("seda:post-say-bye", "I was here");
         assertMockEndpointsSatisfied();
 
         String out = template.requestBody("seda:get-say-hello", "Me", String.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/571b1345/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
index 2aa7f2f..588f221 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
@@ -44,17 +44,17 @@ public class FromRestGetTest extends CamelBlueprintTestSupport {
         PathDefinition path = rest.getPaths().get(0);
         assertEquals("/say/hello", path.getUri());
         ToDefinition to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
-        assertEquals("mock:hello", to.getUri());
+        assertEquals("direct:hello", to.getUri());
 
         path = rest.getPaths().get(1);
         assertEquals("/say/bye", path.getUri());
-        assertEquals("application/json", path.getVerbs().get(1).getAccept());
-        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(1).getOutputs().get(0));
-        assertEquals("mock:bye", to.getUri());
+        assertEquals("application/json", path.getVerbs().get(0).getAccept());
+        to = assertIsInstanceOf(ToDefinition.class, path.getVerbs().get(0).getOutputs().get(0));
+        assertEquals("direct:bye", to.getUri());
 
         // the rest becomes routes and the input is a seda endpoint created by the DummyRestConsumerFactory
         getMockEndpoint("mock:update").expectedMessageCount(1);
-        template.sendBody("seda:post-say", "I was here");
+        template.sendBody("seda:post-say-bye", "I was here");
         assertMockEndpointsSatisfied();
 
         String out = template.requestBody("seda:get-say-hello", "Me", String.class);