在 Maven 的 JUnit 测试用例中使用 Java Smack 4.3.4

Use of Java Smack 4.3.4 in a JUnit Testcase in Maven

我正在开发一个 Java 库,其中包含一些基于 xmpp 的服务。对于 XMPP 通信,我使用 Smack 版本 4.3.4。到目前为止开发没有问题,我还创建了一些测试例程,这些例程都可以 运行 没有错误。迁移到 Maven 项目生成 FatJar 后,我想将可执行的测试用例转换为 JUnit 测试。出乎意料的是,出现错误,我无法解释原因。正如我所说,代码可以 运行 在 JUnit 之外没有任何问题。

下面是简化的测试代码(建立到xmpp服务器的连接):

@Test
public void connect() 
{
    Builder builder = XMPPTCPConnectionConfiguration.builder();
    builder.setSecurityMode(SecurityMode.disabled);
    builder.setUsernameAndPassword("iec61850client", "iec61850client");
    builder.setPort(5222);      
    builder.setSendPresence(true);          
    try
    {
        builder.setXmppDomain("127.0.0.1");     
        builder.setHostAddress(InetAddress.getByName("127.0.0.1"));
    }
    catch (Exception e)
    {
        e.printStackTrace();            
    }           
    XMPPTCPConnectionConfiguration config = builder.build();        
    XMPPTCPConnection c = new XMPPTCPConnection(config);        
    c.setReplyTimeout(5000);
    try
    {           
        c.connect().login();
    }
    catch (Exception e)
    {
        e.printStackTrace();            
    }           
}

这是我收到的错误消息:

Exception in thread "Smack Reader (0)" java.lang.AssertionError
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1154)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access00(XMPPTCPConnection.java:1092)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.run(XMPPTCPConnection.java:1112)

在 Smack 中,它归结为这条 'assert' 指令:

assert (config.getXMPPServiceDomain().equals(reportedServerDomain));

知道可能是什么问题或类似问题吗?非常感谢您的帮助!

非常感谢, 马库斯

如果你look at the source code你会发现reportedServerDomain是从服务器的流打开标签中提取的。在这种情况下,服务器报告的 xmpp 域与配置的域不匹配。这通常不应该发生,但我认为这与您 运行 单元测试的方式有关。或者更准确地说,与测试中使用的远程服务器或模拟服务器有关。如果启用 smack 的调试输出,您将看到流打开标记和 'from' 属性及其值。将其与 ConnectionConfiguration.

中配置的 XMPP 服务域进行比较