use of org.apache.camel.Component in project camel by apache.
the class RestEndpoint method createProducer.
@Override
public Producer createProducer() throws Exception {
RestProducerFactory apiDocFactory = null;
RestProducerFactory factory = null;
if (apiDoc != null) {
LOG.debug("Discovering camel-swagger-java on classpath for using api-doc: {}", apiDoc);
// lookup on classpath using factory finder to automatic find it (just add camel-swagger-java to classpath etc)
try {
FactoryFinder finder = getCamelContext().getFactoryFinder(RESOURCE_PATH);
Object instance = finder.newInstance(DEFAULT_API_COMPONENT_NAME);
if (instance instanceof RestProducerFactory) {
// this factory from camel-swagger-java will facade the http component in use
apiDocFactory = (RestProducerFactory) instance;
}
parameters.put("apiDoc", apiDoc);
} catch (NoFactoryAvailableException e) {
throw new IllegalStateException("Cannot find camel-swagger-java on classpath to use with api-doc: " + apiDoc);
}
}
String cname = getComponentName();
if (cname != null) {
Object comp = getCamelContext().getRegistry().lookupByName(getComponentName());
if (comp != null && comp instanceof RestProducerFactory) {
factory = (RestProducerFactory) comp;
} else {
comp = getCamelContext().getComponent(getComponentName());
if (comp != null && comp instanceof RestProducerFactory) {
factory = (RestProducerFactory) comp;
}
}
if (factory == null) {
if (comp != null) {
throw new IllegalArgumentException("Component " + getComponentName() + " is not a RestProducerFactory");
} else {
throw new NoSuchBeanException(getComponentName(), RestProducerFactory.class.getName());
}
}
cname = getComponentName();
}
// try all components
if (factory == null) {
for (String name : getCamelContext().getComponentNames()) {
Component comp = getCamelContext().getComponent(name);
if (comp != null && comp instanceof RestProducerFactory) {
factory = (RestProducerFactory) comp;
cname = name;
break;
}
}
}
parameters.put("componentName", cname);
// lookup in registry
if (factory == null) {
Set<RestProducerFactory> factories = getCamelContext().getRegistry().findByType(RestProducerFactory.class);
if (factories != null && factories.size() == 1) {
factory = factories.iterator().next();
}
}
// and there must only be exactly one so we safely can pick this one
if (factory == null) {
RestProducerFactory found = null;
String foundName = null;
for (String name : DEFAULT_REST_PRODUCER_COMPONENTS) {
Object comp = getCamelContext().getComponent(name, true);
if (comp != null && comp instanceof RestProducerFactory) {
if (found == null) {
found = (RestProducerFactory) comp;
foundName = name;
} else {
throw new IllegalArgumentException("Multiple RestProducerFactory found on classpath. Configure explicit which component to use");
}
}
}
if (found != null) {
LOG.debug("Auto discovered {} as RestProducerFactory", foundName);
factory = found;
}
}
if (factory != null) {
LOG.debug("Using RestProducerFactory: {}", factory);
Producer producer;
if (apiDocFactory != null) {
// wrap the factory using the api doc factory which will use the factory
parameters.put("restProducerFactory", factory);
producer = apiDocFactory.createProducer(getCamelContext(), host, method, path, uriTemplate, queryParameters, consumes, produces, parameters);
} else {
producer = factory.createProducer(getCamelContext(), host, method, path, uriTemplate, queryParameters, consumes, produces, parameters);
}
RestConfiguration config = getCamelContext().getRestConfiguration(cname, true);
RestProducer answer = new RestProducer(this, producer, config);
answer.setOutType(outType);
answer.setType(inType);
return answer;
} else {
throw new IllegalStateException("Cannot find RestProducerFactory in Registry or as a Component to use");
}
}
use of org.apache.camel.Component in project camel by apache.
the class ManagedCamelContext method completeEndpointPath.
public List<String> completeEndpointPath(String componentName, Map<String, Object> endpointParameters, String completionText) throws Exception {
if (completionText == null) {
completionText = "";
}
Component component = context.getComponent(componentName, false);
if (component != null) {
ComponentConfiguration configuration = component.createComponentConfiguration();
configuration.setParameters(endpointParameters);
return configuration.completeEndpointPath(completionText);
} else {
return new ArrayList<String>();
}
}
use of org.apache.camel.Component in project camel by apache.
the class EndpointConfigurationTest method createContext.
@BeforeClass
public static void createContext() throws Exception {
context = new DefaultCamelContext();
Component component = new ConfiguredComponent();
context.addComponent(MAPPED_SCHEME, component);
// so that TypeConverters are available
context.start();
}
use of org.apache.camel.Component in project camel by apache.
the class ComponentFoundInRegistryTest method testGuice.
@Test
public void testGuice() throws Exception {
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.PROVIDER_URL, GuiceInitialContextFactory.class.getName());
env.put(Injectors.MODULE_CLASS_NAMES, MyModule.class.getName());
InitialContext context = new InitialContext(env);
Injector injector = (Injector) context.lookup(Injector.class.getName());
assertNotNull("Found injector", injector);
Object value = context.lookup("foo");
assertNotNull("Should have found a value for foo!", value);
CamelContext camelContext = injector.getInstance(CamelContext.class);
Component component = camelContext.getComponent("foo");
assertThat(component, is(MockComponent.class));
Endpoint endpoint = camelContext.getEndpoint("foo:cheese");
assertThat(endpoint, is(MockEndpoint.class));
}
use of org.apache.camel.Component in project camel by apache.
the class HttpCustomComponentNameTest method testCustomName.
@Test
public void testCustomName() throws Exception {
context.start();
int port = AvailablePortFinder.getNextAvailable(24400);
Component custom = new HttpComponent();
context.addComponent("http-foo", custom);
ServiceHelper.startService(custom);
String uri = "http-foo://www.somewhere.com:" + port + "?q=Camel";
Endpoint endpoint = context.getEndpoint(uri);
assertNotNull(endpoint);
// the endpoint uri should use the custom component name as scheme
assertEquals(uri, endpoint.getEndpointUri());
context.stop();
}
Aggregations