2012-06-26 3 views
0

Я хочу добавить в свое приложение JSF дополнительный функционал для отправки сообщений чату пользователям моей компании. Для разработки этого проекта я использую NetBeans v7.1, GlassFish v3.1.1 и Smack API 3.2.2. В моем веб-приложении я создал CDI ApplicationScoped bean для управления соединением XMPP.Интеграция JSF и XMPP

@Named("xmpp") 
@ApplicationScoped  
public class XMPPBean implements Serializable { 

    private org.apache.log4j.Logger loggerErr = org.apache.log4j.Logger.getLogger("err"); 

    private XMPPConnection connection = null; 

    private String chatHostName = "localhost"; 
    private int chatport = 5222; 
    private String userName = "testuser"; 
    private String userPass = "12345678"; 


    public void connect(){  

     ConnectionConfiguration config = new ConnectionConfiguration(chatHostName, chatport); 
     connection = new XMPPConnection(config); 
     try {    
      connection.connect();    
      connection.login(userName, userPass);    
     } catch (XMPPException e) {    
      loggerErr.error(e.getMessage(), e);    
     } 
    } 


    public void sendMessage(){ 

     ChatManager chatmanager = connection.getChatManager(); 
     Chat newChat = chatmanager.createChat("[email protected]", new MessageListener() { 
      @Override 
      public void processMessage(Chat chat, Message message) { 
       System.out.println("Received message: " + " "+message.toXML()); 
      } 
     }); 

     try { 
      newChat.sendMessage("Howdy!"); 
     } catch (XMPPException e) { 
      System.out.println("Error Delivering block"); 
     } 
    }  

    public void disconnect() { 
     connection.disconnect(); 
    } 

    public boolean chackConnection(){     
     return connection==null?false:connection.isConnected(); 
    } 


    public String getLoggedinUser() {   
     if (connection == null) 
      return "";     
     return connection.getUser();     
    }  

} 

Все работает нормально. Я могу подключиться к серверу XMPP, отправлять и получать сообщения. Но в моем журнале сервера я периодически вижу исключение:

SEVERE: java.lang.NullPointerException 
    at org.xmlpull.mxp1.MXParser.isNameStartChar(MXParser.java:3157) 
    at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1253) 
    at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093) 
    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:325) 
    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 
    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 

SEVERE:  at org.xmlpull.mxp1.MXParser.isNameStartChar(MXParser.java:3157) 
SEVERE:  at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1253) 
SEVERE:  at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093) 
SEVERE:  at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:325) 
SEVERE:  at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 
SEVERE:  at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 
SEVERE: java.lang.NullPointerException 
    at org.jivesoftware.smackx.commands.AdHocCommandManager$4.connectionClosedOnError(AdHocCommandManager.java:268) 
    at org.jivesoftware.smack.PacketReader.notifyConnectionError(PacketReader.java:172) 
    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:332) 
    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 
    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 

SEVERE:  at org.jivesoftware.smackx.commands.AdHocCommandManager$4.connectionClosedOnError(AdHocCommandManager.java:268) 
SEVERE:  at org.jivesoftware.smack.PacketReader.notifyConnectionError(PacketReader.java:172) 
SEVERE:  at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:332) 
SEVERE:  at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 
SEVERE:  at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 

Это исключения появляются после вызова функции XMPP или периодически с 10-15 секундным интервалом. Какова эта ошибка и как ее исправить?

ответ

0

Просто не забудьте отключить сеанс.

Проверьте, что ваше соединение jabber всегда отключается при перераспределении военных пакетов.