简体   繁体   English

集成JSF和XMPP

[英]Integrating JSF and XMPP

I want to add in my JSF application additional functional for sending messages to chat users of my company. 我想在我的JSF应用程序中添加其他功能,用于向公司的聊天用户发送消息。 For development this project I use NetBeans v7.1, GlassFish v3.1.1 and Smack API 3.2.2. 为了开发该项目,我使用NetBeans v7.1,GlassFish v3.1.1和Smack API 3.2.2。 In my web application I created CDI ApplicationScoped bean to manage XMPP connection. 在我的Web应用程序中,我创建了CDI ApplicationScoped bean来管理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("anotheruser@127.0.0.1", 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();                   
    }       

}

Everything works fine. 一切正常。 I can connect to the XMPP server, send and receive messages. 我可以连接到XMPP服务器,发送和接收消息。 But in my server log I periodically see exceptions: 但是在我的服务器日志中,我定期看到异常:

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)

This exceptions appear after invoke XMPP functions or periodically with 10-15 second interval. 调用XMPP函数后或以10-15秒的间隔定期出现此异常。 What is this error and how to fix it? 这是什么错误以及如何解决?

Just not to forget to disconnect your session. 只是不要忘记断开您的会话。

Check, that your jabber-connection always disconnect on war-package redeployment. 检查,确保您的jabber连接总是在重新部署战争软件包时断开连接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM