Good XMPP Java Libraries for server side? [closed]

Solution 1:

http://xmpp.org/xmpp-software/libraries/ has a list of software libraries for XMPP. Here is an outdated snapshot of it:

ActionScript

  • as3xmpp

C

  • iksemel
  • libstrophe
  • Loudmouth

C++

  • gloox
  • Iris
  • oajabber

C# / .NET / Mono

  • agsXMPP SDK
  • jabber-net

Erlang

  • Jabberlang

Flash

  • XIFF

Haskell

  • hsxmpp

Java

  • Echomine Feridian
  • Jabber Stream Objects (JSO)
  • Smack

JavaScript

  • strophe.js
  • xmpp4js

Lisp

  • cl-xmpp

Objective-C

  • xmppframework

Perl

  • AnyEvent::XMPP

PHP

  • Lightr
  • xmpphp

Python

  • jabber.py
  • pyxmpp
  • SleekXMPP
  • Twisted Words
  • xmpp-psn
  • xmpppy

Ruby

  • XMPP4R

Tcl

  • JabberLib

Solution 2:

I went through the same search. I first tried Smack and then realized it's targeted at c2s (client to server) and didn't have what I need. I looked at Tinder but didn't like the licensing model (also when I looked it was much more raw). I finally looked at Whack and realized it was what I needed - but it's missing a lot (that's why Tinder came about I think).

So..my solution? Forked Whack, added some code to abstract out things, and try to make it easier to use: http://github.com/Communitivity/Adirondack

I wrote a Scala library based on that to help create external component based agents, see http://github.com/Communitivity/Shellack and http://github.com/Communitivity/MinimalScalaXMPPComponent

One of my main goals was to make it easy to write a component quickly. An example of such a component is below:

object Main {

/**
* @param args the command line arguments
*/
  def main(args: Array[String]) :Unit = {
      new XMPPComponent(
        new ComponentConfig() {
            def secret() : String = { "secret.goes.here" }
            def server() : String = { "communitivity.com" }
            def subdomain() : String = { "weather" }
            def name() : String = { "US Weather" }
            def description() : String = { "Weather component that also supported SPARQL/XMPP" }
        },
       actor {
        loop {
            react {
                case (pkt:Packet, out : Actor) =>
                    Console.println("Received packet...\n"+pkt.toXML)
                    pkt match {
                        case message:Message =>
                            val reply = new Message()
                            reply.setTo(message.getFrom())
                            reply.setFrom(message.getTo())
                            reply.setType(message.getType())
                            reply.setThread(message.getThread())
                            reply.setBody("Received '"+message.getBody()+"', tyvm")
                            out ! reply
                        case _ =>
                            Console.println("Received something other than Message")
                    }
                 case _ =>
                    Console.println("Received something other than (Packet, actor)")
            }
        }
       }
    ).start
  }
}

Solution 3:

Ignite Realtime shares its Tinder API which is a basic building block extracted from OpenFire just for the creation of server-side components and possibly other servers. It implements basic XMPP building blocks and you are free to start from there.

Solution 4:

Also from Ignite Realtime is the Whack API which is specifically for building XMPP components

Whack is an Open Source XMPP (Jabber) component library for XMPP components. A pure Java library, it can be embedded into your applications to create anything from a full XMPP component to simple XMPP integrations such as sending intercepting and acting on certain messages.