NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
http://xmpp.org/xmpp-software/libraries/ имеет список библиотек программного обеспечения для XMPP. Вот устаревший снимок его:
Ваш лучший выбор состоит в том, чтобы использовать существующий сервер и добавить Вашу функциональность к ней. Запись всего сервера с нуля, даже пользование библиотекой, будут партия тяжелее, чем Вы ожидаете.
можно ли сказать нам больше о проблеме, которую Вы пытаетесь решить? Мы можем тогда указать на Вас на соответствующий сервер и помочь Вам с правильным местом включить.
Ignite Realtime использует свой Tinder API , который является основным строительным блоком, извлеченным из OpenFire только для создания серверных компонентов и, возможно, других серверов. Он реализует базовые строительные блоки XMPP, и вы можете начать с него.
Также от Ignite Realtime есть Whack API , который специально предназначен для создания компонентов XMPP.
Whack - это XMPP с открытым исходным кодом (Jabber) библиотека компонентов для компонентов XMPP. Чистая библиотека Java, это может быть встроены в ваши приложения, чтобы создать что-нибудь из полного XMPP компонент для простой интеграции XMPP например, отправка перехвата и действует на определенные сообщения.
Я прошел тот же поиск. Сначала я попробовал Smack, а потом понял, что он нацелен на c2s (клиент-сервер) и не получил того, что мне нужно.Я посмотрел на Tinder, но мне не понравилась модель лицензирования (к тому же, когда я посмотрел, она была намного более сырой). Я наконец посмотрел на Whack и понял, что это было то, что мне нужно, но в нем многого не хватает (думаю, именно поэтому появился Tinder).
Итак .. мое решение? Разветвленный Whack, добавил код для абстрагирования вещей и попытался упростить его использование: http://github.com/Communitivity/Adirondack
Я написал библиотеку Scala на основе этого, чтобы помочь создать внешний компонент на основе агентов, см. http://github.com/Communitivity/Shellack и http://github.com/Communitivity/MinimalScalaXMPPComponent
One из моих основных целей было упростить написание компонента быстро. Пример такого компонента приведен ниже:
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
}
}
проверьте это:
это библиотека нижнего уровня. он находится в стадии инкубации, и кажется, что никто не настаивает на этом. но это отличный API, и я надеюсь, что он будет прогрессировать.