Как найти истинную причину исключения com.sun.star.uno.RuntimeException? - PullRequest
1 голос
/ 17 февраля 2009

Я пытаюсь заменить поле в OpenOffice документе с помощью OpenOffice Java API. Я использую insertString метод:

  xText.insertString(((XTextField) fieldMaster).getAnchor(), value.toString(), false);

Трассировка стека выглядит следующим образом:

    [junit] com.sun.star.uno.RuntimeException: 
    [junit]     at com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:182)
    [junit]     at com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:148)
    [junit]     at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:344)
    [junit]     at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:313)
    [junit]     at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:101)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:652)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:154)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:136)
    [junit]     at $Proxy14.insertString(Unknown Source)
...

Если я правильно интерпретирую это, это говорит мне, что он подключен к другому процессу, отличному от Java, что-то в другом процессе не удалось, но это не говорит мне, в чем проблема.

Я обнаружил, что есть некоторые переменные среды (PROT_REMOTE ...), которые позволяют мне регистрировать сообщения от этих удаленных (другой процесс, один и тот же компьютер, кстати) процессов, но только если я запускаю версию OpenOffice с включенной отладкой?

Я использую версию OpenOffice из репозитория deb в Ubuntu, и мне нужно заинтересоваться компиляцией моей собственной версии OpenOffice.

Можно ли как-нибудь получить полезные сообщения об ошибках от удаленного процесса, чтобы помочь мне понять, почему мой код дает сбой?

1 Ответ

0 голосов
/ 24 февраля 2009

Я до сих пор не нашел хорошего способа определить причину RuntimeExceptions, но кто-то на форуме OpenOffice.org решил мою проблему Я неправильно использовал API.

Вместо:

XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,document);
XText xText = xTextDocument.getText();
xText.insertString(((XTextField) fieldMaster).getAnchor(), value.toString(), false);

Я должен был использовать текст с якоря:

XTextRange anchor = ((XTextField) fieldMaster).getAnchor();
anchor.getText().insertString(anchor, value.toString(), true);

Видимо, текст в заголовках не является частью документа. Что имеет смысл, если вы открываете файл OpenOffice. Заголовки хранятся в отдельном XML-документе в вашем ODF файле ...

...