java.lang.VerifyError
Я работаю над проектом Android, который использует классы и методы из отдельного файла JAR, который я также создаю, и проблема связана с определенным утилитным классом, который называется XpathUtil
это бросает 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-файла, работает нормально). Так что я не слишком уверен, в чем проблема.
Я попытался выполнить очистку и сборку как основного проекта, так и другого проекта, который я использую, и затем экспортирую его в фактический файл 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: у вас есть две разные версии библиотеки, скомпилируйте с версией 1 и запустите с версией 2. В этом случае, особенно если сигнатуры методов изменились, JVM может жаловаться на VerifyError
,
Итак, для вашего случая: дважды проверьте, что вы используете то же самое XPathUtil.class
файл для сборки и исполнения. Может быть, у JVM есть старая версия этого класса на пути к классам (может быть, у него есть даже более одной версии и выбрана неправильная).
Когда я обновляю ADT tool до версии 18.0.0.v201203301601-306762, я также получаю исключение при запуске приложения.... наконец-то я нашел решение проблемы обновления adt. Когда вы создаете проект приложения для Android, вам нужно перейти в свойства проекта-> Порядок и экспорт, и позволить установить флажок стороннего jar-файла, очистить и перестроить проект. Проблема будет решена...... например