Je travaille sur un projet Android qui utilise des classes et des méthodes à partir d'un fichier JAR séparé que je crée également, et le problème est avec une classe util spécifique appelée XpathUtil
qui lance un VerifyError
chaque fois que j'essaie appelant l'une de ses méthodes statiques.java.lang.VerifyError
Voici comment ma classe XpathUtil ressemble:
public class XpathUtil {
private static XPath xpath = XPathFactory.newInstance().newXPath();
private static String TAG = "XpathUtil";
public static Document createXpathDocument(String xml) {
try {
Log.d(TAG , "about to create document builder factory");
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
Log.d(TAG , "about to create document builder ");
DocumentBuilder builder = docFactory.newDocumentBuilder();
Log.d(TAG , "about to create document with parsing the xml string which is: ");
Log.d(TAG ,xml);
Document document = builder.parse(new InputSource(
new StringReader(xml)));
Log.d(TAG , "If i see this message then everythings fine ");
return document;
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG , "EXCEPTION OCCURED HERE " + e.toString());
return null;
}
}
public static NodeList getNodeList(Document doc, String expr) {
try {
Log.d(TAG , "inside getNodeList");
XPathExpression pathExpr = xpath.compile(expr);
return (NodeList) pathExpr.evaluate(doc, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return null;
}
// extracts the String value for the given expression
public static String getNodeValue(Node n, String expr) {
try {
Log.d(TAG , "inside getNodeValue");
XPathExpression pathExpr = xpath.compile(expr);
return (String) pathExpr.evaluate(n, XPathConstants.STRING);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return null;
}
}
Et ceci est la ligne exacte où l'exception se produit à partir du projet principal, je travaille avec:
mDocument = XpathUtil.createXpathDocument(xml);
Comme vous pouvez le voir , tout ce que je fais est simple appel createXpathDocument
qui se trouve à partir d'un fichier JAR séparé qui a été importé avec succès et inclus dans mon chemin de construction via Eclipse (tout autre appel que je fais à différentes classes de ce pot fonctionne bien). Donc, je ne suis pas trop sûr de la question. Je ai essayé de faire un nettoyage et de construire sur le projet principal et l'autre projet que j'utilise que je l'exporte ensuite dans un fichier jar réel pour les applications tierces à utiliser, mais pour une raison étrange, ce XpathUtil ne fonctionne pas.
edit: voici l'exception:
Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
java.lang.RuntimeException: An error occured while executing doInBackground()
at
android.os.AsyncTask$3.done(AsyncTask.java:200)
at
java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) at
java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at
java.util.concurrent.FutureTask.run(FutureTask.java:137) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at
java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.VerifyError:
com.kc.unity.agent.util.xml.XpathUtil at com.kc.unity.agent.util.xml.ContactDescHelper.<init>
(ContactDescHelper.java:67)
at
com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.constructContactDetails
(ContactPlatformWrapper.java:218)
at
com.kc.unity.agent.federation.contacts.ContactPlatformWrapper.getContactDetails
(ContactPlatformWrapper.java:101) at
com.kc.unified.contacts.ContactDetails.setContactFields(ContactDetails.java:154) at com.kc.unified.contacts.ContactDetails.access$6
(ContactDetails.java:150) at
com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:79)
at
com.kc.unified.contacts.ContactDetails$LoadScreen.doInBackground(ContactDetails.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185) at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)... 4 more
Il serait utile de donner le texte de l'erreur, y compris la pile. Il y a plusieurs choses qui pourraient causer 'VerifyErrors' et pour l'instant il est impossible de faire plus que de deviner. –
Si vous avez la source de jar, pourriez-vous essayer d'inclure la source au lieu de jar au projet principal pour voir si le problème existe toujours? Juste pour s'assurer que l'utilitaire n'utilise pas quelque chose qui n'est pas supporté par Android. –
C'est ainsi que je l'ai fait installer Suresh, j'ai d'abord eu l'ensemble du projet ajouté dans le chemin de construction via aller à eclipse> propriétés> java build path> projets. Je vais inclure l'exception réelle – jonney