Apache Camel namespaces

I am running into some weird issues when I integrate Camel 1.6.0 into my Spring project.

The project was started by my 6 months ago or so and I created a prototype complete with junit tests and mock implementations using Camel as main integration framework.

The structure of the project is as follows:

  • Portal frontend (BEA weblogic 10.2)
  • Spring Business layer (POJI & mock implementations & camel based implementations)
  • Integration layer (Camel routing in & out transformations)
  • Multiple endpoints (Webservices, CGI scripts, GET)

After the first proof of concept, the project was taken over by the developers and I was reallocated on a different project. Now all of a sudden, the project doesn’t seem to build anymore. The developer mentioned a schema problem.

I investigated the issue and my initial thought was that the camel-spring.jar was missing from the maven dependencies. Since we use Spring 2, the concepts of spring.handlers and spring.schemas were added so third party libs can ship the XSD files within the library. But of course, this would be too simple of this was the issue.

The dependencies seemed to be ok but I still got errors from eclipse mentioning:

Description    Resource    Path    Location    Type
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘camelContext’.

When looking into the details, I got the message:

expecting namespace ‘http://activemq.apache.org/camel/schema/spring’ but the target namespace of the schema document is ‘http://camel.apache.org/schema/spring’.

First problem was regarding the fact that camel namespace was not correctly loaded into the spring configurations. So I figured that by solving issue 2, the first would be resolved as well.

As the second problem already defines, the issue arises because camel has recently updated the namespaces to camel.apache.org/schema/spring. The strange thing is that I haven’t updated the dependencies since 1.6 should still be within the same namespace.

Checking the spring.handlers and spring.schemas content of camel-spring.jar, I saw the following content:

========================================================

http\://camel.apache.org/schema/spring=org.apache.camel.spring.handler.CamelNamespaceHandler

========================================================

========================================================

http\://activemq.apache.org/camel/schema/spring/camel-spring.xsd=camel-spring.xsd

http\://activemq.apache.org/camel/schema/spring/camel-spring-1.0.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.1.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.2.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.3.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.4.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.5.0.xsd=camel-spring.xsd
http\://activemq.apache.org/camel/schema/spring/camel-spring-1.6.0.xsd=camel-spring.xsd

http\://activemq.apache.org/camel/schema/spring/camel-spring-1.6.1.xsd=camel-spring.xsd

========================================================

The handlers was refering to the Xml handler written for spring integration, the second should map all the xsd files to a classpath resource. In my case this should be refering to ‘camel-spring.xsd’.

I checked the XSD content in the camel-spring jar and in the first line, it shows:

<xs:schema elementFormDefault=”qualified” version=”1.0″ targetNamespace=”http://activemq.apache.org/camel/schema/spring” xmlns:tns=”http://activemq.apache.org/camel/schema/spring” xmlns:xs=”http://www.w3.org/2001/XMLSchema”>

Having walked through multiple articles and forums, I still cannot explain why the problem exists. So basically my current solutions is to switch over the dependencies in maven to Camel version 2.0-M1. Since the xsd and spring properties are all using the same namespace, I have switched over to the new namespace in my configurations and this solved the issue. Though I cna live with the upgrade and a milestone release, I am puzzled what the cause is of the issue. My guess is that somehow, the camel-spring.xsd cannot be found in the classpath and it downloads the file from the public internet, refering to the latest version. This might cause the namespace problem.

But accoring to spring, the spring.schemas should solve this problem. Though I am very annoyed with issue, I decided to leave the matter as I already spent too much time investigating the issue (including blogging about it :) ). You know what caused this issue, let me know. It would really ease my troubled mind :)

Used maven dependencies:
<properties>
<spring.version>2.5.6</spring.version>
</properties>
……………

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>1.6.0</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jms</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.1.0</version>
</dependency>

……….

1 comment June 23, 2009

Java 1.6 on Mac OS X 1.5

I have been using my macbook pro for almost 5 months now and I must say I am very satisfied with the performance. Though the machine gets quite hot when actively used, developing on the Mac is indeed very good.

But………

I find it frustrating that the amount of time that i need to put in for setting up a proper Java development environment takes so much time. There should be better support from Mac for this. But for the time being I will just blog my findings and hopefully someone else finds them usefull.

Environment variables:

As a Java developer, you always need to set the JAVA_HOME environment setting value to the home directory of you Java installation. Though a lot of application nowadays don’t check this variable, Java tools like maven and ant are depending on it. I have added this value on the normal linux way: /etc/profile. By adding this value in profile, the JAVA_HOME is set on startup for all users.

Path:

Second I needed to add the different applications executables to the PATH variable. Normally I always do this in the /etc/profile page. But I found out that for Mac this is done on a different place. In /etc you will find a directory paths.d. In this directory, you can just add a file with some ‘path values’ and it will be automatically added to the path. So this is quite easy. The only think is, you need to know this!

Java versions:

As a developer you need to work on different projects and it often requires us to run different versions of JDK. Normally I don’t have issues with it since I use Eclipse as main IDE. Eclipse installation includes different JDK versions, so you can easily switch it up in Eclipse. But for building purposes (example: running maven in terminal) I often use the terminal to run the build scripts. Now the big husttle is to get Mac use a 1.6 JDK since code depend on it. What I did was the following:

  • install the Mac updates (1.5 update 4)
  • open terminal
  • go to /System/Library/Frameworks/JavaVM.framework/Versions
  • unlink CurrentJDK (it was pointing to 1.5, seen via ln -la)
  • ln -s 1.6 CurrentJDK

Now when I run ‘java -version’, I get the 1.6 64-bit version.

Eclipse memory settings:

Since I run applications in Eclipse that takes quite some memory, I needed to increase the max heapsize of the JVM. Now in Windows, this is done easily by editing the eclipse.ini file. In Mac version, this file seems to be missing. We this is not true. Seems that the executable Eclipse file, can be opened as a directory. The eclipse.ini file, resides insight the eclipse executable.

BEA weblogic

For the ones who are trying to get BEA weblogic running on the Mac. Well, to get the server running was not that big an issue. You need to do some tricks but there are 2 articles written for this purpose. But to get BEA workshop going is a little different story. There is no IDE for this and I haven’t been succesfull in manually installing it. If I have it (or someone get’s it working), I will add comments.

Add comment June 22, 2009


Categories

  • Blogroll

  • Feeds