ClassNotFoundException 打击 XMPPConnection

Posted

技术标签:

【中文标题】ClassNotFoundException 打击 XMPPConnection【英文标题】:ClassNotFoundException smack XMPPConnection 【发布时间】:2015-03-10 14:22:15 【问题描述】:

我按照这个文档来实现 gcm 上游消息。

到目前为止,我已经创建了一个 servlet,并从该 servlet 调用 SmackCcsClient。

    ConnectionConfiguration config =
            new ConnectionConfiguration(GCM_SERVER, GCM_PORT);
    config.setSecurityMode(SecurityMode.enabled);
    config.setReconnectionAllowed(true);
    config.setRosterLoadedAtLogin(false);
    config.setSendPresence(false);
    config.setSocketFactory(SSLSocketFactory.getDefault());

    connection = new XMPPTCPConnection(config);
    connection.connect();

    connection.addConnectionListener(new LoggingConnectionListener());

    // Handle incoming packets
    connection.addPacketListener(new PacketListener() 

        @Override
        public void processPacket(Packet packet) 
            logger.log(Level.INFO, "Received: " + packet.toXML());
            Message incomingMessage = (Message) packet;
            GcmPacketExtension gcmPacket =
                    (GcmPacketExtension) incomingMessage.
                    getExtension(GCM_NAMESPACE);
            String json = gcmPacket.getJson();
            try 
                @SuppressWarnings("unchecked")
                Map<String, Object> jsonObject =
                        (Map<String, Object>) JSONValue.
                        parseWithException(json);

                // present for "ack"/"nack", null otherwise
                Object messageType = jsonObject.get("message_type");

                if (messageType == null) 
                    // Normal upstream data message
                    handleUpstreamMessage(jsonObject);

                    // Send ACK to CCS
                    String messageId = (String) jsonObject.get("message_id");
                    String from = (String) jsonObject.get("from");
                    String ack = createJsonAck(from, messageId);
                    send(ack);
                 else if ("ack".equals(messageType.toString())) 
                      // Process Ack
                      handleAckReceipt(jsonObject);
                 else if ("nack".equals(messageType.toString())) 
                      // Process Nack
                      handleNackReceipt(jsonObject);
                 else if ("control".equals(messageType.toString())) 
                      // Process control message
                      handleControlMessage(jsonObject);
                 else 
                      logger.log(Level.WARNING,
                              "Unrecognized message type (%s)",
                              messageType.toString());
                
             catch (ParseException e) 
                logger.log(Level.SEVERE, "Error parsing JSON " + json, e);
             catch (Exception e) 
                logger.log(Level.SEVERE, "Failed to process packet", e);
            
        
    , new PacketTypeFilter(Message.class));

    // Log all outgoing packets
    connection.addPacketInterceptor(new PacketInterceptor() 
        @Override
            public void interceptPacket(Packet packet) 
                logger.log(Level.INFO, "Sent: 0", packet.toXML());
            
        , new PacketTypeFilter(Message.class));

    connection.login(senderId + "@gcm.googleapis.com", apiKey);

它的编译并且我没有收到任何错误,因为我已经包含了 smack 4.0.7 库。但是在执行时,我总是收到以下错误: java.lang.ClassNotFoundException: org.jivesoftware.smack.XMPPConnection

jar 已添加到构建路径中。

【问题讨论】:

【参考方案1】:

smack.jar 包含该类。下载并将其添加到您的类路径中。

【讨论】:

正如我所说,jar 已经添加到构建路径中,并且在编译时不会出错。它在运行时抛出异常。 你把它添加到你的类路径了吗?在运行时构建路径不可用! 好的,在 java 资源文件夹中,有一个库文件夹,我在该文件夹中添加了 smack.jar。我如何将它也添加到类路径中? 您如何构建您的应用程序?你在哪里运行它(Eclipse,Tomcat,...)? tomcat 和 Eclipse。我从 Eclipse 运行 tomcat 服务器。

以上是关于ClassNotFoundException 打击 XMPPConnection的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.ClassNotFoundException 运行 jar 文件时 Spring Boot 中的 java.lang.ClassNotFoundException - 添加库

ClassNotFoundException:org.sqlite.JDBC

ClassNotFoundException和NoClassDefFoundError

ClassNotFoundException和NoClassDefFoundError

ClassNotFoundException:oracle.jdbc.driver.OracleDriver

如何解决 ClassNotFoundException?