@Test
 public void getUniqueDeclaredMethods_withCovariantReturnType() throws Exception {
   class Parent {
     @SuppressWarnings("unused")
     public Number m1() {
       return new Integer(42);
     }
   }
   class Leaf extends Parent {
     @Override
     public Integer m1() {
       return new Integer(42);
     }
   }
   int m1MethodCount = 0;
   Method[] methods = ReflectionUtils.getUniqueDeclaredMethods(Leaf.class);
   for (Method method : methods) {
     if (method.getName().equals("m1")) {
       m1MethodCount++;
     }
   }
   assertThat(m1MethodCount, is(1));
   assertTrue(ObjectUtils.containsElement(methods, Leaf.class.getMethod("m1")));
   assertFalse(ObjectUtils.containsElement(methods, Parent.class.getMethod("m1")));
 }
 @Test
 @SuppressWarnings("unchecked")
 public void fullConfig() throws Exception {
   DirectFieldAccessor endpointAccessor = new DirectFieldAccessor(this.fullConfigEndpoint);
   HttpRequestExecutingMessageHandler handler =
       (HttpRequestExecutingMessageHandler) endpointAccessor.getPropertyValue("handler");
   MessageChannel requestChannel =
       (MessageChannel)
           new DirectFieldAccessor(this.fullConfigEndpoint).getPropertyValue("inputChannel");
   assertEquals(this.applicationContext.getBean("requests"), requestChannel);
   DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler);
   assertEquals(77, handlerAccessor.getPropertyValue("order"));
   assertEquals(Boolean.FALSE, endpointAccessor.getPropertyValue("autoStartup"));
   Object replyChannel = handlerAccessor.getPropertyValue("outputChannel");
   assertNotNull(replyChannel);
   assertEquals(this.applicationContext.getBean("replies"), replyChannel);
   DirectFieldAccessor templateAccessor =
       new DirectFieldAccessor(handlerAccessor.getPropertyValue("restTemplate"));
   ClientHttpRequestFactory requestFactory =
       (ClientHttpRequestFactory) templateAccessor.getPropertyValue("requestFactory");
   assertTrue(requestFactory instanceof SimpleClientHttpRequestFactory);
   Object converterListBean = this.applicationContext.getBean("converterList");
   assertEquals(converterListBean, templateAccessor.getPropertyValue("messageConverters"));
   assertEquals(String.class, handlerAccessor.getPropertyValue("expectedResponseType"));
   Expression uriExpression = (Expression) handlerAccessor.getPropertyValue("uriExpression");
   assertEquals("http://localhost/test2", uriExpression.getValue());
   assertEquals(
       HttpMethod.PUT.name(),
       TestUtils.getPropertyValue(handler, "httpMethodExpression", Expression.class)
           .getExpressionString());
   assertEquals("UTF-8", handlerAccessor.getPropertyValue("charset"));
   assertEquals(false, handlerAccessor.getPropertyValue("extractPayload"));
   Object requestFactoryBean = this.applicationContext.getBean("testRequestFactory");
   assertEquals(requestFactoryBean, requestFactory);
   Object errorHandlerBean = this.applicationContext.getBean("testErrorHandler");
   assertEquals(errorHandlerBean, templateAccessor.getPropertyValue("errorHandler"));
   Object sendTimeout =
       new DirectFieldAccessor(handlerAccessor.getPropertyValue("messagingTemplate"))
           .getPropertyValue("sendTimeout");
   assertEquals(new Long("1234"), sendTimeout);
   Map<String, Expression> uriVariableExpressions =
       (Map<String, Expression>) handlerAccessor.getPropertyValue("uriVariableExpressions");
   assertEquals(1, uriVariableExpressions.size());
   assertEquals("headers.bar", uriVariableExpressions.get("foo").getExpressionString());
   DirectFieldAccessor mapperAccessor =
       new DirectFieldAccessor(handlerAccessor.getPropertyValue("headerMapper"));
   String[] mappedRequestHeaders =
       (String[]) mapperAccessor.getPropertyValue("outboundHeaderNames");
   String[] mappedResponseHeaders =
       (String[]) mapperAccessor.getPropertyValue("inboundHeaderNames");
   assertEquals(2, mappedRequestHeaders.length);
   assertEquals(1, mappedResponseHeaders.length);
   assertTrue(ObjectUtils.containsElement(mappedRequestHeaders, "requestHeader1"));
   assertTrue(ObjectUtils.containsElement(mappedRequestHeaders, "requestHeader2"));
   assertEquals("responseHeader", mappedResponseHeaders[0]);
   assertEquals(true, handlerAccessor.getPropertyValue("transferCookies"));
 }