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-файла, очистить и перестроить проект. Проблема будет решена...... напримерпозвольте стороннему банку галочки быть проверенным

Другие вопросы по тегам