2010-11-05 2 views
2

Я работаю над проектом Android, который использует классы и методы из отдельного JAR-файла, который я также создаю, и проблема связана с определенным классом util, который называется XpathUtil, который бросает VerifyError каждый раз, когда я пытаюсь вызывая один из своих статических методов.java.lang.VerifyError

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

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; 
} 
} 

И это точная линия, где происходит исключение из основного проекта, я работаю с:

mDocument = XpathUtil.createXpathDocument(xml); 

Как вы можете видеть , все, что я делаю, это простое вызов createXpathDocument, который находится из отдельного файла jar, который был успешно импортирован и включен в мой путь сборки через eclipse (любой другой вызов, который я делаю для разных классов из этой банки, отлично работает). Поэтому я не уверен, в чем проблема.

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

редактировать: здесь исключение:

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

Было бы полезно, если бы вы указали фактический текст ошибки, включая стек. Есть несколько вещей, которые могут вызвать «VerifyErrors», и на данный момент невозможно сделать больше, чем предполагать. –

+0

Если у вас есть источник jar, можете ли вы попробовать включить источник вместо jar в основной проект, чтобы узнать, существует ли проблема? Просто чтобы убедиться, что утилита не использует то, что не поддерживается в Android. –

+0

Вот как я установил Suresh, я сначала добавил весь проект в путь сборки, перейдя в eclipse> properties> java build path> projects. Я включу фактическое исключение – jonney

ответ

2

Типичный сценарий, который приводит к VerifyErrors: у вас есть две различные версии библиотеки, компилировать с версии 1 и работать с версии 2. В этом случае, особенно если подписи метода изменились, JVM может жаловаться на VerifyError.

Итак, для вашего случая: дважды проверьте, что вы используете тот же самый файл XPathUtil.class для создания и выполнения. Возможно, JVM имеет старую версию этого класса в пути к классам (возможно, у нее есть даже несколько версий и выбрать неправильную).

+0

Возможно, я могу видеть, что произойдет, если я реорганизую и переименую класс XPathUtil? насколько я знаю, у меня нет двух версий класса библиотеки, которые я реализовал. просто тот, который связан с моим главным проектом – jonney

+0

@jonney - хорошая идея. Если вы работаете со старой библиотекой, вы можете получить NoClassDefFoundError, если все ошибки исчезли, тогда у вас было две записи этого класса в пути к классам. –

+0

Нет, он еще не работал после рефакторинга имени класса для включения в s в конце ot – jonney

2

Когда я updata ADT инструмент для версии 18.0.0.v201203301601-306762 я получаю исключение при запуске приложения .... наконец я нашел решение с ADT выпуска обновлений. Когда вы создаете проект приложения для Android, вам нужно перейти к проекту Properties-> Order and Export, а также проверить флажок сторонней банки, а также очистить и перестроить проект. Проблема будет исправлена ​​...... for example let the third party jar checkbox to be checked