Эликсир / JInterface - Отправка списка строк обратно в эликсир из Java - PullRequest
1 голос
/ 22 декабря 2019

Я эликсира / OTP приложение работает. Для этого нужно использовать некоторые Java-код, поэтому я использую JInterface для достижения RPC-подобные сообщения.

1002 * теперь у меня есть этот communincation работу. Я могу отправить сообщение из эликсира в Java и концептуально отправить назад некоторые данные.

Мне нужно отправить обратно массив строк.

Это может показаться простой задачей, но я изо всех сил пытаюсьнайти нужную документацию, чтобы сделать это. Единственная информация, которую я могу найти, только на самом деле заставляет меня отправлять обратно двоичную строку.

Вот важный бит моего кода JInterface:

    private static void setupMBox() {
    try {
        OtpNode myOtpNode = new OtpNode("server");
        OtpMbox myOtpMbox = myOtpNode.createMbox("ltext");
        myOtpNode.setCookie("cookiepassword");

        while (true) {
            OtpErlangTuple tuple = (OtpErlangTuple) myOtpMbox.receive();
            OtpErlangPid lastPid = (OtpErlangPid) tuple.elementAt(0);
            OtpErlangAtom dispatch = (OtpErlangAtom) tuple.elementAt(1);

            if (dispatch.toString().equals("split_paragraph")) {
                List<String> sentences = paragraphSplitter.splitParagraphIntoSentences(TEST_PARAGRAPH, Locale.JAPAN);
                List<OtpErlangString> erlangStrings = new ArrayList<OtpErlangString>();

                for (String sentence : sentences) {
                    erlangStrings.add(new OtpErlangString(sentence));
                }
                // this will not work
                OtpErlangList erlangList = new OtpErlangList((OtpErlangObject[]) erlangStrings.toArray());

                myOtpMbox.send(lastPid, erlangList);
                System.out.println(erlangList);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Если кто-то сделал это иможет помочь мне, я был бы очень признателенЗаранее спасибо!

1 Ответ

0 голосов
/ 23 декабря 2019

Пожалуйста, укажите, что случилось с вашим кодом (что ожидаемый результат и то, что фактический результат)

1002 * Немного предложение:. 1004 *OtpErlangString фактически сопоставляется charlist в Erlang / эликсира,так что это может быть не то, что вы хотите, потому что charlist не поддерживает Unicode. Используйте OtpErlangBinary вместо этого, и не забудьте отобразить все строки в Java массивы байтов, используя javaString.getBytes(StandardCharsets.UTF_8), в противном случае вы не получите UTF-8 кодируются бинарных файлов в Erlang / эликсира, потому что Java внутренне кодирует каждую строку в UTF-16LE(в связи с необходимостью обеспечения совместимости с Windows, фиксированной байтов юникода кодировки).
...