The idea behind ESBs is that they are language and platform neutral, allowing any process to communicate and integrate with any other process. Even if you assumed the entire world was Java, you still have issues of platform and version (e.g. serialization version, classpath hell, Java 5 code not working on Java 1.4 etc etc).

So most ESBs typically send around blobs of XML over some kind of transport (HTTP, JMS, Jabber, files, email etc). Often this will be over SOAP maybe with some other WS-* protocols.

Since JBI is based around a NormalizedMessage and talks about WSDLs being used for each endpoint, you might think that a JBI container cannot be used to wire together things using POJOs. Well, bending the JBI specification some, but keeping to the APIs - you can pass around any named POJO in a NormalizedMessage and completely ignore the XML payload if you wish. So within the JBI bus you can work purely with POJOs and ignore the XML, which tends to only be used (if at all) to marshal things onto a wire (which is when you want to use XML anyways).

i.e. you can use POJO bindings which don't use XML at all with JBI if you want to.