![](/img/trans.png)
[英]MessageTypeFilter (org.jivesoftware.smack.packet.Message.Type) has private access in org.jivesoftware.smack.filter.MessageTypeFilter
[英]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.