@Test public void withUrlExpression() { HttpRequestExecutingMessageHandler handler = (HttpRequestExecutingMessageHandler) new DirectFieldAccessor(this.withUrlExpressionEndpoint).getPropertyValue("handler"); MessageChannel requestChannel = (MessageChannel) new DirectFieldAccessor(this.withUrlExpressionEndpoint) .getPropertyValue("inputChannel"); assertEquals(this.applicationContext.getBean("requests"), requestChannel); DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler); Object replyChannel = handlerAccessor.getPropertyValue("outputChannel"); assertNull(replyChannel); DirectFieldAccessor templateAccessor = new DirectFieldAccessor(handlerAccessor.getPropertyValue("restTemplate")); ClientHttpRequestFactory requestFactory = (ClientHttpRequestFactory) templateAccessor.getPropertyValue("requestFactory"); assertTrue(requestFactory instanceof SimpleClientHttpRequestFactory); SpelExpression expression = (SpelExpression) handlerAccessor.getPropertyValue("uriExpression"); assertNotNull(expression); assertEquals("'http://localhost/test1'", expression.getExpressionString()); assertEquals( HttpMethod.POST.name(), TestUtils.getPropertyValue(handler, "httpMethodExpression", Expression.class) .getExpressionString()); assertEquals("UTF-8", handlerAccessor.getPropertyValue("charset")); assertEquals(true, handlerAccessor.getPropertyValue("extractPayload")); assertEquals(false, handlerAccessor.getPropertyValue("transferCookies")); }
@Test public void testPlus() throws Exception { evaluate("7 + 2", "9", Integer.class); evaluate("3.0f + 5.0f", 8.0f, Float.class); evaluate("3.0d + 5.0d", 8.0d, Double.class); evaluate("'ab' + 2", "ab2", String.class); evaluate("2 + 'a'", "2a", String.class); evaluate("'ab' + null", "abnull", String.class); evaluate("null + 'ab'", "nullab", String.class); // AST: SpelExpression expr = (SpelExpression) parser.parseExpression("+3"); Assert.assertEquals("+3", expr.toStringAST()); expr = (SpelExpression) parser.parseExpression("2+3"); Assert.assertEquals("(2 + 3)", expr.toStringAST()); // use as a unary operator evaluate("+5d", 5d, Double.class); evaluate("+5L", 5L, Long.class); evaluate("+5", 5, Integer.class); evaluateAndCheckError("+'abc'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES); // string concatenation evaluate("'abc'+'def'", "abcdef", String.class); // evaluate("5 + new Integer('37')", 42, Integer.class); }
/* * (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(T arg1, T arg2) { SpelExpression expressionToUse = getExpression(); expressionToUse.getEvaluationContext().setVariable("arg1", arg1); expressionToUse.getEvaluationContext().setVariable("arg2", arg2); return expressionToUse.getValue(Integer.class) * (asc ? 1 : -1); }
@Test public void testMinus() throws Exception { evaluate("'c' - 2", "a", String.class); evaluate("3.0f - 5.0f", -2.0f, Float.class); evaluateAndCheckError("'ab' - 2", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES); evaluateAndCheckError("2-'ab'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES); SpelExpression expr = (SpelExpression) parser.parseExpression("-3"); Assert.assertEquals("-3", expr.toStringAST()); expr = (SpelExpression) parser.parseExpression("2-3"); Assert.assertEquals("(2 - 3)", expr.toStringAST()); evaluate("-5d", -5d, Double.class); evaluate("-5L", -5L, Long.class); evaluate("-5", -5, Integer.class); evaluateAndCheckError("-'abc'", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES); }
@Test public void testMethodFiltering_SPR6764() { SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); context.setRootObject(new TestObject()); LocalFilter filter = new LocalFilter(); context.registerMethodFilter(TestObject.class, filter); // Filter will be called but not do anything, so first doit() will be invoked SpelExpression expr = (SpelExpression) parser.parseExpression("doit(1)"); String result = expr.getValue(context, String.class); Assert.assertEquals("1", result); Assert.assertTrue(filter.filterCalled); // Filter will now remove non @Anno annotated methods filter.removeIfNotAnnotated = true; filter.filterCalled = false; expr = (SpelExpression) parser.parseExpression("doit(1)"); result = expr.getValue(context, String.class); Assert.assertEquals("double 1.0", result); Assert.assertTrue(filter.filterCalled); // check not called for other types filter.filterCalled = false; context.setRootObject(new String("abc")); expr = (SpelExpression) parser.parseExpression("charAt(0)"); result = expr.getValue(context, String.class); Assert.assertEquals("a", result); Assert.assertFalse(filter.filterCalled); // check de-registration works filter.filterCalled = false; context.registerMethodFilter(TestObject.class, null); // clear filter context.setRootObject(new TestObject()); expr = (SpelExpression) parser.parseExpression("doit(1)"); result = expr.getValue(context, String.class); Assert.assertEquals("1", result); Assert.assertFalse(filter.filterCalled); }
private Operator getOperatorNode(SpelExpression e) { SpelNode node = e.getAST(); return (Operator) findNode(node, Operator.class); }