2010-11-05 5 views
2

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 
+2

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. –

+0

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. –

+0

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

Répondre

2

Un scénario typique qui conduit à VerifyErrors: vous avez deux versions différentes d'une bibliothèque, la compilation contre la version 1 et exécuter avec la version 2. Dans ce cas, en particulier Si les signatures de méthode ont changé, la JVM peut se plaindre avec un VerifyError.

Donc, pour votre cas: vérifiez que vous utilisez le même fichier XPathUtil.class pour la construction et l'exécution. Peut-être que la JVM a une ancienne version de cette classe sur le classpath (peut-être a-t-elle plus d'une version et choisit la mauvaise).

+0

peut-être que je peux voir ce qui se passe si je refactorise et renomme la classe XPathUtil? pour autant que je sache, je n'ai pas deux versions de la classe de la bibliothèque que j'ai mis en œuvre. juste celui qui est lié à mon projet principal – jonney

+0

@jonney - bonne idée. Si vous utilisez une ancienne bibliothèque, vous pouvez obtenir une erreur NoClassDefFoundError, si toutes les erreurs ont disparu, alors vous avez deux entrées de cette classe sur le classpath. –

+0

Non, il diddnt encore travail après refactoring le nom de la classe à inclure à s à la fin de ot – jonney

2

Quand j'Updata outil ADT version 18.0.0.v201203301601-306762 Je reçois aussi l'exception quand je lance l'application .... J'ai finalement trouvé la solution avec problème de mise à jour HAA. Lorsque vous créez le projet d'application Android, vous devez accéder au projet Propriétés-> Commander et exporter et laisser la case à cocher JAR tiers à cocher, puis nettoyer et reconstruire le projet. Le problème serait corrigé ...... for example let the third party jar checkbox to be checked

Questions connexes