Hi,
You just forget the most important thing of the CamelContextFactory, you
need to set the BundleContext before calling the createContext.
camelContextFactory = new CamelContextFactory();
camelContextFactory.setBundleContext(bundleContext)
Then CamelContext will find the camel-http component itself :)
Willem
Harbeer Kadian wrote:
Hi,
I have got the solution for problem.
We have to add a component of type http in camelContext. Then only the
camelContext is able to
understand a http uri.
camelContext.addComponent("http", new HttpComponent());
The String name can be any valid string.
I dont know, whether it is osgi which is forcing us to add explicitly
HttpComponent to talk to a http endpoint, or this is the camel way of
sending messages to endpoints.
Thanks for the valuable suggestions added to understand the problem.
With Regads
Harbeer kadian
Harbeer Kadian wrote:
Hi,
I did as per your suggestion.
Here is the piece of code
private CamelContext camelContext;
private CamelContextFactory camelContextFactory;
camelContextFactory = new CamelContextFactory();
camelContext = camelContextFactory.createContext();
((DefaultCamelContext)camelContext).setRegistry(new
JndiRegistry(jndiContext));
but still i am getting the same exception.
Constructor threw exception; nested exception is
org.apache.camel.NoSuchEndpointException:
No endpoint could be found for:
http://localhost:8095/HelloWebService/services/Hello,
please check your classpath contains the needed camel component jar.
at
org.springframework.beans.factory.support.ConstructorResolver.autowir
eConstructor(ConstructorResolver.java:254)
I am once again giving a detail description of my problem.
My route is as follows
from("direct:ProducerUri")
.to("http://localhost:8095/HelloWebService/services/Hello");
I am creating the required soap message as follows
String soapMessage = "<soap:Envelope
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns1:sayHi
xmlns:ns1=\"http://cxf.ws.studies.xh.org/\"><arg0
xmlns:ns2=\"http://cxf.ws.studies.xh.org/\">"
+ "Harbeer Kadian" +
"</arg0></ns1:sayHi></soap:Body></soap:Envelope>";
// Camel will convert string to Document object for me
exchange.getIn().setBody(soapMessage, Document.class);
exchange.setPattern(ExchangePattern.InOut);
exchange = producerTemplate.send("direct:ProducerUri", exchange);
I am using an OSGI bundle to deploy this code in servicemix.
Other than this I am not providing any information particular to http
endpoint in my code or any of the configuration file
bundle-context.xml
bundle-context-osgi.xml
Looks like all the problems are happening because of the OSGI bundle.
Please tell if you have any idea about this problem.
With Regards
Harbeer kadian
willem.jiang wrote:
Sorry, I just realized you are using Camel 1.6.1-fuse
You can try to use Camel 1.6.2.1-fuse or use this code.
camelContext.setRegistry(new JndiRegistry(jndiContext));
Willem
Harbeer Kadian wrote:
Hi,
I checked the respective jar(camel-osgi) in cache folder.
To my surprise, the CompositeRegistry class is not present there.
Is it like I am using old version of camel-osgi feature.
With Regards
Harbeer Kadian
Harbeer Kadian wrote:
Hi,
I changed the creation of CamelContext as per your suggestions.
I am getting following exception now.
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name ConnectPlatform' defined in URL
[bundle://186.0:0/META-INF/spring/bundle-context.xml]:
Instantiation of bean failed; nested exception is
org.springframework.beans.BeanInstantiationException: Could not
instantiate bean class
[com.altair.hwec.connectplatform.ConnectPlatformImpl]: Constructor
threw
exception;
nested exception is java.lang.NoClassDefFoundError:
org/apache/camel/osgi/CompositeRegistry
I checked what all the camel jars are active in servicemix as of now
Here are the details
s...@root:/> osgi/list | grep camel
[ 66] [Active ] [ ] [ 60] camel-core (1.6.1.fuse)
[ 67] [Active ] [ ] [ 60] camel-osgi (1.6.1.fuse)
[ 68] [Active ] [ ] [ 60] camel-spring (1.6.1.fuse)
[ 165] [Active ] [ ] [ 60] camel-http (1.6.1.fuse)
With Regards
Harbeer Kadian
Harbeer Kadian wrote:
Hi,
I created a new camel router to send a message to a webservice using
camel-http component.
The configure method of the router is as follows.
public void configure() throws Exception {
from("direct:ProducerUri")
.to("http://localhost:8083/ConnectPlatform?supportedEndPointsRequest=DataManager");
}
The wsdl for the webservice is located at following url
http://localhost:8083/ConnectPlatform?wsdl
The servicemix gave exception when i tried to add this router to the
camel context.
org.apache.camel.NoSuchEndpointException: No endpoint could be found
for:
http://localhost:8083/ConnectPlatform?supportedEndPointsRequest=DataManager,
please check your classpath contains the needed camel component jar.
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:254)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
I added the camel-http component in my pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<version>1.6.2.0-fuse</version>
</dependency>
I also added the following packages in the OSGI Import-Package header
org.apache.camel.component.http
org.apache.camel.component.http.helper
Still i am getting the same exception.
Also when i perform command osgi/list on servicemix
I found that the camel-http component is not in the Started stage.
[ 165] [Active ] [ ] [ 60] camel-http (1.6.1.fuse)
Please tell if i am missing some thing required to talk to a Http
Component.
With Regards
Harbeer Kadian