簡體   English   中英

Smack拋出“線程“ Smack數據包讀取器(0)”中的異常” java.lang.NoSuchMethodError:org.jivesoftware.smack.util.StringUtils.parseDate”

[英]Smack throws “Exception in thread ”Smack Packet Reader (0)“ java.lang.NoSuchMethodError: org.jivesoftware.smack.util.StringUtils.parseDate”

我正在嘗試從App Server(TOMCAT)創建多用戶聊天組,已在Servlet中創建了XMPP機器人。

根據我的要求,我必須從應用程序服務器(使用應用程序服務器上的xmpp bot)創建一個多用戶聊天組,並從android應用程序加入用戶。

當我嘗試在appServer(TOMCAT)上執行相同操作時,創建多用戶聊天組並從Android(使用aSmack)加入用戶的工作正常,但出現錯誤,

最初,當我嘗試創建MUC時,我收到“無法使用Android的aSmack庫創建多用戶聊天(MUC)室:“ packet.DefaultPacketExtension無法轉換為packet.MUCUser”,

當我在SO上搜索時,我發現了其中@FLOW提及此錯誤的POST ,這是

org.jivesoftware.smack.packet.DefaultPacketExtension無法轉換為org.jivesoftware.smackx.packet.MUCUser通常指示您沒有初始化aSmack的靜態代碼,該代碼需要為各種數據包注冊Smack提供程序(和數據包擴展)類的Smack。 對於大多數aSmack版本,只需調用

SmackAndroid.init(上下文ctx)

會成功的

核心Smack軟件包中沒有這樣的方法,該方法需要為Smack的各種數據包(和數據包擴展)類注冊Smack提供程序。

所以我已經在此鏈接上使用configure(ProviderManager pm)方法手動配置了提供

現在,在配置提供程序之后,一切都應該工作正常,但仍然無法創建MUC組

我的代碼如下

    SmackConfiguration.setPacketReplyTimeout(packetReplyTimeout);

    if(service != null)
        config = new ConnectionConfiguration(server, port, service);
    else
        config = new ConnectionConfiguration(server, port);

    config.setSASLAuthenticationEnabled(true);
    config.setSecurityMode(SecurityMode.disabled);
    config.setDebuggerEnabled(true);
    connection = new XMPPConnection(config);
    connection.connect();

    System.out.println("Connected: " + connection.isConnected());
    chatManager = connection.getChatManager();
    messageListener = new MyMessageListener();

if (connection!=null && connection.isConnected()) {
        configure(ProviderManager.getInstance());
        connection.login(username, password);
    }
   MultiUserChat muc = new MultiUserChat(connection, "1234567@conference.localhost");

        muc.create("Jonny");

          Form form = muc.getConfigurationForm();
             Form submitForm = form.createAnswerForm();

            for (Iterator<FormField> fields = form.getFields(); fields.hasNext();) {
                FormField field = (FormField) fields.next();  
                if (!FormField.TYPE_HIDDEN.equals(field.getType())
                        && field.getVariable() != null) {
                   // show("field: " + field.getVariable());
                    // Sets the default value as the answer
                    submitForm.setDefaultAnswer(field.getVariable());
                }
            }

            List<String> owners = new ArrayList<String>();

            owners.add(xmppManager.getXmppConnection().getUser());
            submitForm.setAnswer("muc#roomconfig_roomowners", owners);
            //submitForm.setAnswer("muc#roomconfig_roomname", );
            submitForm.setAnswer("muc#roomconfig_persistentroom", true);
            muc.sendConfigurationForm(submitForm);
            muc.join(MucNick);
            muc.sendMessage("hello everybody");
            muc.addMessageListener(
                    new PacketListener() {
                        @Override
                        public void processPacket(Packet packet) {
                                message = (Message) packet;
                            if (message.getBody() != null) {
                                String fromName = StringUtils.parseBareAddress(message
                                        .getFrom());
                                System.out.println("andro xmpp client"+ "Text Recieved--" + message.getBody()
                                        + " from " + fromName );
                                //messages.add(fromName + ":");
                                //messages.add(message.getBody());
                                //infobox.append("message arrieved "+" from::"+message.getFrom()+"__"+message.getBody());

                                // Add the incoming message to the list view
                                //Log.i("andro xmpp client","group messages__"+ messages.toString());

                            }
                        }
                    }

                    );

這是堆棧跟蹤::

Exception in thread "Smack Packet Reader (0)" java.lang.NoSuchMethodError: org.jivesoftware.smack.util.StringUtils.parseDate(Ljava/lang/String;)Ljava/util/Date;
    at org.jivesoftware.smackx.provider.DelayInformationProvider.parseExtension(DelayInformationProvider.java:45)
    at org.jivesoftware.smack.util.PacketParserUtils.parsePacketExtension(PacketParserUtils.java:768)
    at org.jivesoftware.smack.util.PacketParserUtils.parsePresence(PacketParserUtils.java:248)
    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:232)
    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)
No response from server.: 
    at org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:367)
    at com.sentiinel.egovern.testcase1.testing2.createMUC(testing2.java:510)
    at com.sentiinel.egovern.testcase1.testing2.insertRequest(testing2.java:303)
    at com.sentiinel.egovern.testcase1.testing2.doPost(testing2.java:133)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at com.sentiinel.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:115)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

以上問題的任何幫助將非常有幫助

提前致謝!!!

核心Smack軟件包中沒有這樣的方法,該方法需要為Smack的各種數據包(和數據包擴展)類注冊Smack提供程序。

是的(雖然不在輕擊中)。

所以我已經在此鏈接上使用configure(ProviderManager pm)方法手動配置了提供

永遠不要手動配置提供程序(如果您不知道自己在做什么,至少不要這樣)。

線程“ Smack數據包閱讀器(0)”中的異常java.lang.NoSuchMethodError:org.jivesoftware.smack.util.StringUtils.parseDate(Ljava / lang / String;)Ljava / util / Date; 在org.jivesoftware.smackx.provider.DelayInformationProvider.parseExtension(DelayInformationProvider.java:45)

您正在看到NoSuchmethodError 出於某種原因, parseDate在StringUtils的方法不會被作為例外不存在DelayInformationProvider 難道您要混合使用不同主要版本的Smack組件? 您使用哪個Smack版本?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM