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.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.queue.QueueComponent; 025 import org.apache.camel.util.ObjectHelper; 026 027 import java.util.concurrent.Callable; 028 029 /** 030 * An implementation of {@link EndpointResolver} that creates 031 * {@link JMSEndpoint} objects. 032 * 033 * The syntax for a JMS URI looks like: 034 * 035 * <pre><code>jms:[component:]destination</code></pre> 036 * the component is optional, and if it is not specified, the default component name 037 * is assumed. 038 * 039 * @version $Revision: 520404 $ 040 */ 041 public class JmsEndpointResolver implements EndpointResolver<JmsExchange> { 042 043 public static final String DEFAULT_COMPONENT_NAME = QueueComponent.class.getName(); 044 045 /** 046 * Finds the {@see JmsComponent} specified by the uri. If the {@see JmsComponent} 047 * object do not exist, it will be created. 048 */ 049 public Component resolveComponent(CamelContext container, String uri) { 050 String id[] = getEndpointId(uri); 051 return resolveJmsComponent(container, id[0]); 052 } 053 054 /** 055 * Finds the {@see QueueEndpoint} specified by the uri. If the {@see QueueEndpoint} or it's associated 056 * {@see QueueComponent} object do not exist, they will be created. 057 */ 058 public JmsEndpoint resolveEndpoint(CamelContext container, String uri) { 059 String id[] = getEndpointId(uri); 060 JmsComponent component = resolveJmsComponent(container, id[0]); 061 return component.createEndpoint(uri, id[1]); 062 } 063 064 /** 065 * @return an array that looks like: [componentName,endpointName] 066 */ 067 private String[] getEndpointId(String uri) { 068 String rc [] = {DEFAULT_COMPONENT_NAME, null}; 069 String splitURI[] = ObjectHelper.splitOnCharacter(uri, ":", 3); 070 if( splitURI[2] != null ) { 071 rc[0] = splitURI[1]; 072 rc[1] = splitURI[2]; 073 } else { 074 rc[1] = splitURI[1]; 075 } 076 return rc; 077 } 078 079 @SuppressWarnings("unchecked") 080 private JmsComponent resolveJmsComponent(final CamelContext container, final String componentName) { 081 Component rc = container.getOrCreateComponent(componentName, new Callable<JmsComponent>(){ 082 public JmsComponent call() throws Exception { 083 return new JmsComponent(container); 084 }}); 085 return (JmsComponent) rc; 086 } 087 088 089 }