ServiceMix XMPP
The ServiceMix XMPP component provides support for receiving and sending XMPP messages via the enterprise service bus.
Maven Archetype
You can use Maven to create a XMPP service unit:
mvn archetype:create \ -DarchetypeGroupId=org.apache.servicemix.tooling \ -DarchetypeArtifactId=servicemix-xmpp-service-unit \ -DarchetypeVersion=2010.01 \ -DgroupId=com.mycompany.myproduct \ -DartifactId=mycomponent.artifact \ -Dversion=1.0-SNAPSHOT
Endpoints Configuation
Receiver Endpoint (Consumer)
The receiver endpoint connects to the XMPP server and waiting for incoming XMPP messages.
When it receives a XMPP message, it converts it to JBI message (using the marshaler) and send to the NMR.
Message Exchange Pattern
The receiver endpoint will only generate InOnly exchanges.
<xmpp:receiver service="test:myJabberService" endpoint="receiverEndpoint" targetService="test:myJabberProcessor" host="my.jabberserver.lan" port="5222" user="lhein" password="myPassword" createAccount="false" />
<xmpp:receiver service="test:myJabberService" endpoint="receiverEndpoint" targetService="test:myJabberProcessor" host="my.jabberserver.lan" port="5222" user="lhein" password="myPassword" createAccount="false" room="smxchat@conference.my.jabberserver.lan"/>
The following table shows the additional configuration possibilities of the endpoint other than the configuration of the default ConsumerEndpoint class.
Receiver endpoint attributes
Name |
Type |
Description |
Default |
---|---|---|---|
host |
string |
sets the host name or ip adress of the XMPP server |
null (must be spec'd) |
port |
int |
the port number of the XMPP service |
5222 |
user |
String |
the user name of the XMPP account |
null (must be spec'd) |
password |
String |
the password of the XMPP account |
null (must be spec'd) |
resource |
String |
the name of the resource / client |
null |
room |
String |
full room name (for example area51@conference.myserver.com) or null |
null (means no room) |
proxyHost |
String |
the hostname of the proxy to use |
null |
proxyPort |
String |
the port of the proxy to use |
3128 |
proxyUser |
String |
the user name for the proxy to use |
null |
proxyPass |
String |
the user password for the proxy to use |
null |
proxyType |
String |
the proxy type to use (NONE, HTTP, SOCKS4, SOCKS5) |
null |
login |
boolean |
a flag if the user should login to the XMPP account |
true |
createAccount |
boolean |
a flag if an account should be created for unknown users |
false |
filter |
class |
a class which implements org.jivesoftware.smack.filter.PacketFilter |
null |
marshaler |
class |
a marshaler class which converts XMPP to NMSG |
DefaultXMPPMarshaler |
Sender Endpoint (Provider)
The XMPP Sender endpoint expects messages coming from the NMR, converts it into a XMPP message (using the marshaler) and send to the XMPP server.
<xmpp:sender service="test:myJabberService" endpoint="senderEndpoint" host="my.jabberserver.lan" port="5222" user="lhein" password="myPassword" createAccount="false" participant="gertv@my.jabberserver.lan" />
<xmpp:sender service="test:myJabberService" endpoint="senderEndpoint" host="my.jabberserver.lan" port="5222" user="lhein" password="myPassword" createAccount="false" room="smxchat@conference.my.jabberserver.lan" />
The following table shows the configuration possibilities of the endpoint.
Sender endpoint attributes
Name |
Type |
Description |
Default |
---|---|---|---|
host |
string |
sets the host name or ip adress of the XMPP server |
null (must be spec'd) |
port |
int |
the port number of the XMPP service |
5222 |
user |
String |
the user name of the XMPP account |
null (must be spec'd) |
password |
String |
the password of the XMPP account |
null (must be spec'd) |
resource |
String |
the name of the resource / client |
null |
participant |
String |
the name of the person to chat with (if you specify this, leave room null) |
null |
room |
String |
full room name (if you specify this, leave participant null) |
null |
proxyHost |
String |
the hostname of the proxy to use |
null |
proxyPort |
String |
the port of the proxy to use |
3128 |
proxyUser |
String |
the user name for the proxy to use |
null |
proxyPass |
String |
the user password for the proxy to use |
null |
proxyType |
String |
the proxy type to use (NONE, HTTP, SOCKS4, SOCKS5) |
null |
login |
boolean |
a flag if the user should login to the XMPP account |
true |
createAccount |
boolean |
a flag if an account should be created for unknown users |
false |
marshaler |
class |
a marshaler class which converts XMPP to NMSG |
DefaultXMPPMarshaler |
For all xbean file endpoint configuration take a look at Xml schemas
Marshalers
You can write your own marshalers for conversion between XMPP and normalized message and vice versa.
To do this you simply need to subclass the org.apache.servicemix.xmpp.marshaler.impl.DefaultXMPPMarshaler or start from scratch
by implementing the ** interface.
The marshaler interface methods
For providing your own marshaler you only need to implement two methods:
toJBI(...)
This method is responsible for translating a received XMPP message into a jbi compliant normalized message ready to be sent to the bus.
fromJBI(...)
This method is responsible for translating a received normalized message into a XMPP message ready to be sent to the mail server.
After finishing your marshaler you can simply configure your endpoints to use it:
<xmpp:receiver service="test:myJabberService" endpoint="receiverEndpoint" targetService="test:myJabberProcessor" host="my.jabberserver.lan" port="5222" user="lhein" password="myPassword" createAccount="false" room="smxchat@conference.my.jabberserver.lan" > <property name="marshaler"> <bean class="com.mycompany.MyXMPPMarshaler" /> </property> </xmpp:receiver>