在 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 服务域进行比较
我正在开发一个 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
.