001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.camel.component.jms;
019
020 import org.apache.axis.transport.jms.JMSEndpoint;
021 import org.apache.camel.CamelContext;
022 import org.apache.camel.Component;
023 import org.apache.camel.EndpointResolver;
024 import org.apache.camel.util.ObjectHelper;
025
026 import java.util.concurrent.Callable;
027
028 /**
029 * An implementation of {@link EndpointResolver} that creates
030 * {@link JMSEndpoint} objects.
031 * <p/>
032 * The syntax for a JMS URI looks like:
033 * <p/>
034 * <pre><code>jms:[component:]destination</code></pre>
035 * the component is optional, and if it is not specified, the default component name
036 * is assumed.
037 *
038 * @version $Revision:520964 $
039 */
040 public class JmsEndpointResolver implements EndpointResolver<JmsExchange> {
041 public static final String DEFAULT_COMPONENT_NAME = JmsEndpointResolver.class.getName();
042
043 /**
044 * Finds the {@see JmsComponent} specified by the uri. If the {@see JmsComponent}
045 * object do not exist, it will be created.
046 */
047 public Component resolveComponent(CamelContext container, String uri) {
048 String id[] = getEndpointId(uri);
049 return resolveJmsComponent(container, id[0]);
050 }
051
052 /**
053 * Finds the {@see QueueEndpoint} specified by the uri. If the {@see QueueEndpoint} or it's associated
054 * {@see QueueComponent} object do not exist, they will be created.
055 */
056 public JmsEndpoint resolveEndpoint(CamelContext container, String uri) {
057 String id[] = getEndpointId(uri);
058 JmsComponent component = resolveJmsComponent(container, id[0]);
059 return component.createEndpoint(uri, id[1]);
060 }
061
062 /**
063 * @return an array that looks like: [componentName,endpointName]
064 */
065 private String[] getEndpointId(String uri) {
066 String rc[] = {DEFAULT_COMPONENT_NAME, null};
067 String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3);
068 if (splitURI[2] != null) {
069 rc[0] = splitURI[1];
070 rc[1] = splitURI[2];
071 }
072 else {
073 rc[1] = splitURI[1];
074 }
075 return rc;
076 }
077
078 @SuppressWarnings("unchecked")
079 private JmsComponent resolveJmsComponent(final CamelContext container, final String componentName) {
080 Component rc = container.getOrCreateComponent(componentName, new Callable() {
081 public JmsComponent call() throws Exception {
082 return new JmsComponent(container);
083 }
084 });
085 return (JmsComponent) rc;
086 }
087
088
089 }