2009-02-17 7 views
1

J'essaie de remplacer un champ dans un document OpenOffice en utilisant l'API OpenOffice Java. J'utilise la méthode insertString:Comment trouver la véritable cause de com.sun.star.uno.RuntimeException?

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

Le stacktrace se présente comme suit:

[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) 
... 

Si j'interprète cela correctement, il me dit qu'il connecté à un autre proces de Java, quelque chose dans le D'autres processus ont échoué, mais cela ne me dit pas quel est le problème.

J'ai trouvé qu'il y a quelques variables d'environnement (PROT_REMOTE ...) qui me permettraient de journaliser les messages de ces processus distants (processus différent, même ordinateur, btw), mais seulement si je lance une version OpenOffice avec débogage activé? J'utilise une version OpenOffice d'un dépôt Deb sur Ubuntu, et je dois m'intéresser à compiler ma propre version d'OpenOffice.

Y a-t-il un moyen d'obtenir des messages d'erreur utiles du processus distant pour m'aider à comprendre pourquoi mon code échoue?

+0

Y a-t-il d'autres sections de trace de pile en dessous de celle-ci? –

+0

non, c'est le problème. Je pense que l'application java se connecte aux exécutables ooo (processus différent), en utilisant tcp ou quelque chose de similaire. L'autre processus a un problème, mais cela n'est pas communiqué correctement par le côté Java. – Andrej

+0

Quoi qu'il en soit, je pense que le problème est causé par le fait que j'essaie de remplacer un champ de texte dans un en-tête en utilisant insertString. Tous les autres appels insertString fonctionnent comme prévu. Seuls les champs d'en-tête lancent des exceptions. Je ne sais pas pourquoi, cependant. – Andrej

Répondre

0

Je n'ai toujours pas trouvé un bon moyen de déterminer ce qui cause RuntimeExceptions, mais quelqu'un sur le forum OpenOffice.org a résolu mon problème. J'utilisais l'API de manière incorrecte.

Au lieu de:

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

je aurais dû utiliser le texte de l'ancre:

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

Apparemment, le texte dans les en-têtes ne fait pas partie du document. Ce qui est logique si vous ouvrez un fichier OpenOffice. Les en-têtes sont stockés dans un document XML distinct dans votre fichier ODF ...

Questions connexes