当前位置: 首页 > 知识库问答 >
问题:

调用花名册时获取“内部服务器错误(500)”错误响应。createEntry()使用Smack和Openfire

水铭晨
2023-03-14

嗨,我正在使用一个简单的OpenFire服务器从Android设备向其他用户发送消息。我在Android系统中使用asmack jar。这是我正在使用的类:

public class XmppManager {

private static final int packetReplyTimeout = 500; // millis

private String server;
private int port;

private ConnectionConfiguration config;
private XMPPConnection connection;

private ChatManager chatManager;
private MessageListener messageListener;

public XmppManager(String server, int port) {
    this.server = server;
    this.port = port;
}

public void init() throws XMPPException {


    System.out.println(String.format("Initializing connection to server %1$s port %2$d", server, port));

    SmackConfiguration.setPacketReplyTimeout(packetReplyTimeout);


    config = new ConnectionConfiguration(server, port);
    config.setSASLAuthenticationEnabled(false);
    config.setSecurityMode(SecurityMode.disabled);

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

    System.out.println("Connected: " + connection.isConnected());

    chatManager = connection.getChatManager();
    messageListener = new MyMessageListener();

}

public void performLogin(String username, String password) throws XMPPException {
    if (connection!=null && connection.isConnected()) {
        connection.login(username, password);
    }
}

public void setStatus(boolean available, String status) {

    Presence.Type type = available? Type.available: Type.unavailable;
    Presence presence = new Presence(type);

    System.out.println("PRESENCE"+type+" "+available);

    presence.setPriority(1);
    presence.setStatus(status);
    connection.sendPacket(presence);

}

public void destroy() {
    if (connection!=null && connection.isConnected()) {
        connection.disconnect();
    }
}

public void sendMessage(String message, String buddyJID) throws XMPPException {
    System.out.println(String.format("Sending mesage '%1$s' to user %2$s", message, buddyJID));
    Chat chat = chatManager.createChat(buddyJID, messageListener);
    chat.sendMessage(message);
}

public void createEntry(String user, String name) throws Exception {
    System.out.println(String.format("Creating entry for buddy '%1$s' with name %2$s", user, name));
    Roster roster = connection.getRoster();
    roster.createEntry(user, name, null);
}

class MyMessageListener implements MessageListener {

    @Override
    public void processMessage(Chat chat, Message message) {
        String from = message.getFrom();
        String body = message.getBody();
        System.out.println(String.format("Received message '%1$s' from %2$s", body, from));
    }

}

 }

使用的活动是

     public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try{
    SmackAndroid.init(getApplicationContext());
    }catch(Exception e)
    {
        e.printStackTrace();


    }

    new XmppMessage().execute(); 
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private class XmppMessage extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {

        try {
            XmppManager manager = new XmppManager("192.168.1.6", 5222);

            manager.init();
            manager.performLogin("admin", "root");
            manager.setStatus(true, "I am mobile");

            /* String buddyJID = "test@192.168.1.6";
                String buddyName = "test";
                manager.createEntry(buddyJID, buddyName);

                manager.sendMessage("Hello mate", "test@192.168.1.6");
                */
                boolean isRunning = true;

                while (isRunning) {
                    Thread.sleep(50);
                }

                manager.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {

    }

    @Override
    protected void onPreExecute() {}

    @Override
    protected void onProgressUpdate(Void... values) {}
}

}

连接是正确的,并且在OpenFire管理控制台上在线显示,但是当我试图向其他测试用户发送消息时,它会给我错误

  01-13 17:53:12.696: W/System.err(22946): internal-server-error(500)
  01-13 17:53:12.696: W/System.err(22946):  at org.jivesoftware.smack.Roster.createEntry(Roster.java:303)
  01-13 17:53:12.696: W/System.err(22946):  at com.twis.demochat.XmppManager.createEntry(XmppManager.java:91)
  01-13 17:53:12.706: W/System.err(22946):  at com.twis.demochat.MainActivity$XmppMessage.doInBackground(MainActivity.java:50)
  01-13 17:53:12.706: W/System.err(22946):  at com.twis.demochat.MainActivity$XmppMessage.doInBackground(MainActivity.java:1)
  01-13 17:53:12.706: W/System.err(22946):  at android.os.AsyncTask$2.call(AsyncTask.java:264)
  01-13 17:53:12.706: W/System.err(22946):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
  01-13 17:53:12.706: W/System.err(22946):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
  01-13 17:53:12.706: W/System.err(22946):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
  01-13  17:53:12.716: W/System.err(22946):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
  01-13 17:53:12.716: W/System.err(22946):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
  01-13 17:53:12.716: W/System.err(22946):  at java.lang.Thread.run(Thread.java:864)

我试过用smack。jar和asmack。罐子我也用了Android麦克。init()但仍然是相同的错误。请帮帮我,我是新手。

共有1个答案

邢雨华
2023-03-14

我还收到一个500错误,因为我用来登录的用户在服务器上不存在。

 类似资料:
  • 服务器升级到PHP5.6后,我的SilverStripe站点出现问题。我的web主机将服务器从PHP5.3升级到PHP5.6,现在每个页面上都会出现500个服务器错误。 来自SilverStripe的消息是: 很抱歉,处理您的请求时出现问题。 在服务器错误日志文件中没有错误条目。在服务器访问日志中,您可以看到500错误: 错误:[09/Mar/2016:11:12:07 0100]“GET/Sec

  • 我试图通过ajax调用从表中获取数据。但我得到的响应是“500内部服务器错误”。 ajax调用的脚本如下所示 方法中调用。PHP如下所示 add_action('wp_ajax_nopriv_getsections','getsections');add_action('wp_ajax_getsections','getsections');

  • 问题内容: 大家好,我在laravel和ajax中使用我的评论系统时遇到问题。实际上,它仅适用于php,但我遇到了ajax问题。 这是错误消息: 状态码:500内部服务器错误。并且错误显示:1/3 SQLSTATE [23000]:违反完整性约束:1048列’post_id’不能为null。 我正在编辑模态中的注释,我可以创建一个新注释,但是问题是使用ajax编辑它。 JS代码: 这是HTML:

  • 我正在使用Lambda和API网关开发几个AWS无服务器应用程序。 有一次,我试图在一个应用程序上执行一个API请求(使用请求python库),该请求来自另一个应用程序中Lambda函数中运行的代码。我得到500服务器错误。从日志中可以看出,API网关后面的Lambda函数根本没有启动。我找不到任何日志可以告诉我发生了什么。 其他详情: API网关受IAM auth保护。 调用lambda有权“执

  • 我试图通过ajax调用从表中获取数据。但我得到的响应是“500内部服务器错误” ajax调用的脚本如下 要在functions.php调用的方法如下 add_action('wp_ajax_nopriv_getsections'、'getsections');add_action(‘wp_ajax_getsections’、‘getSection’);

  • 问题内容: 我正在尝试使用AJAX 调用功能,但无法获得适当的结果。我已经搜索了我的问题并找到了许多解决方案,但是这些解决方案对我没有用。请指导我我在做什么错。帮助将不胜感激。 干杯 程式码片段 后台代码文件中的方法 例外 问题答案: 首先,如果web方法在页面类中,而不在Web服务类中,则它应该是静态的。 其次,传输的数据实际上不是字符串,而是对象,因此将其更改为: 第三件事,“类型”用于旧版本