我正在开发一个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.access$1000(XMPPTCPConnection.java:1092)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1112)
在Smack中,它归结为这个 "断言 "指令。
assert (config.getXMPPServiceDomain().equals(reportedServerDomain));
有什么问题或类似的问题吗?我很感激任何帮助!
非常感谢,Markus
如果你 看源码 你会发现 reportedServerDomain
是从服务器的流开放标签中提取出来的。在这种情况下,服务器报告的xmpp域与配置的xmpp域不匹配。这通常不应该发生,但我假设这与你运行单元测试的方式有关。或者更准确地说,与测试中使用的远程服务器或模拟服务器有关。如果你启用了smack的调试输出,你会看到流打开的标签和'from'属性及其值。将其与配置的XMPP服务域进行对比,在 ConnectionConfiguration
.