我正在使用一個Android項目,該項目使用來自單獨JAR文件的類和方法我也在創建,並且問題出在一個名爲XpathUtil
的特定util類,每次嘗試時拋出一個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中的不同類運行良好)。所以我不太確定問題是什麼。
我嘗試做一個乾淨的和建立在主要項目和我使用的其他項目上,然後將它導出到一個實際的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
如果您給出包括堆棧跟蹤在內的錯誤的實際文本將會很有用。有幾件事可能會導致'VerifyErrors',目前不可能做更多的猜測。 – 2010-11-05 11:53:30
如果你有jar的源代碼,你可以嘗試在主項目中包含源代碼而不是jar,看看問題是否仍然存在?只是爲了確保實用程序不使用Android中不支持的內容。 – 2010-11-05 11:56:13
這就是我設置Suresh的方式,我首先通過eclipse> properties> java build path> projects將整個項目添加到構建路徑中。 我將包括實際的異常 – jonney 2010-11-05 12:04:50