Hi,

The following test case created generates the error :
org.apache.camel.NoSuchBeanException caused by: No bean could be found in
the registry for: myBean

/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.camel.component.bean;

import javax.naming.Context;

import org.apache.camel.CamelExecutionException;
import org.apache.camel.EndpointInject;
import org.apache.camel.Header;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
import org.apache.camel.util.jndi.JndiContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import org.springframework.config.java.annotation.Bean;
import org.springframework.config.java.annotation.Configuration;
import org.springframework.config.java.test.JavaConfigContextLoader;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.util.Assert;

import static org.junit.Assert.*;

@ContextConfiguration(locations =
"org.apache.camel.component.bean.BeanWithExceptionTryCatchRouteTest$ContextConfig",
loader = JavaConfigContextLoader.class)
public class BeanWithExceptionTryCatchRouteTest extends
AbstractJUnit4SpringContextTests {

    private static final transient Log LOG =
LogFactory.getLog(BeanWithExceptionTryCatchRouteTest.class);

    @Produce(uri = "direct:start")
    protected ProducerTemplate template;

    @EndpointInject(uri = "mock:result")
    private MockEndpoint resultEndpoint;

    @EndpointInject(uri = "mock:exception")
    private MockEndpoint exceptionEndpoint;

    @EndpointInject(uri = "mock:npe")
    private MockEndpoint npeEndpoint;

    @DirtiesContext
    @Test
    public void testHeaderNull() throws Exception {

        try {
            template.sendBodyAndHeader("Hello", "user", null);
            fail("Should have thrown a NullPointerException");
        } catch (CamelExecutionException e) {
           Assert.isInstanceOf(NullPointerException.class, e.getCause());
        }
        npeEndpoint.assertIsSatisfied();
    }

    @DirtiesContext
    @Test
    public void testHeaderOtherException() throws Exception {

        try {
            template.sendBodyAndHeader("Hello", "user", "boss");
            fail("Should have thrown an Exception");
        } catch (CamelExecutionException e) {
            Assert.isInstanceOf(Exception.class, e.getCause());

        }
        exceptionEndpoint.assertIsSatisfied();
    }

    @DirtiesContext
    @Test
    public void testHeaderNotNull() throws Exception {

        template.sendBodyAndHeader("Hello", "user", "charles");
        resultEndpoint.expectedBodiesReceived("Hello charles");
        resultEndpoint.assertIsSatisfied();
    }

    protected Context createJndiContext() throws Exception {
        JndiContext answer = new JndiContext();
        answer.bind("myBean", new MyBean());
        return answer;
    }

    public static class MyBean {

        public String checkHeader(@Header(value = "user") String user)
throws Exception {

            if (user == null) {
                throw new java.lang.NullPointerException("The user is null
!");
            }

            if ( user.equals("boss") ) {
                throw new java.lang.Exception("This is the boss. Not allowed
to connect !");
            }

            return "Hello " + user;
        }

    }

    @Configuration
    public static class ContextConfig extends SingleRouteCamelConfiguration
{

        @Override
        @Bean
        public RouteBuilder route() {
            return new RouteBuilder() {
                @Override
                public void configure() {
                    from("direct:start").
                    doTry().
                        beanRef("myBean", "checkHeader").
                        to("mock:result").
                    doCatch(NullPointerException.class).
                        to("mock:npe").
                    doCatch(Exception.class).

to("log:org.apache.camel.BEAN_TEST?showAll=true&multiline=true").
                        to("mock:exception").
                    end();
                }
            };
        }


    }
}


How can we register the bean in a junit test using Spring javaconfig ?

Regards,
Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com

Reply via email to