2010-11-05 76 views
2

我正在使用一个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 
+2

如果您给出包括堆栈跟踪在内的错误的实际文本将会很有用。有几件事可能会导致'VerifyErrors',目前不可能做更多的猜测。 – 2010-11-05 11:53:30

+0

如果你有jar的源代码,你可以尝试在主项目中包含源代码而不是jar,看看问题是否仍然存在?只是为了确保实用程序不使用Android中不支持的内容。 – 2010-11-05 11:56:13

+0

这就是我设置Suresh的方式,我首先通过eclipse> properties> java build path> projects将整个项目添加到构建路径中。 我将包括实际的异常 – jonney 2010-11-05 12:04:50

回答

2

导致VerifyErrors一个典型的例子:你有两个不同版本的库,编译于version 1和2与版本上运行。在这种情况下,特别是如果方法签名已更改,则JVM可能会投诉VerifyError

因此,对于你的情况:仔细检查你使用非常相同的XPathUtil.class文件来构建和执行。也许JVM在类路径中有这个类的旧版本(也许它有多个版本并选择错误版本)。

+0

也许我可以看到如果我重构并重命名XPathUtil类会发生什么?据我所知,我没有两个版本的我已经实施的图书馆类。只是那个链接到我的主项目 – jonney 2010-11-05 13:22:27

+0

@jonney - 好主意。如果你运行一个旧的库,如果所有的错误消失了,你可能会得到一个NoClassDefFoundError,那么你在类路径中有两个这个类的入口。 – 2010-11-05 13:25:33

+0

没有它仍然diddnt工作后重构类的名称包括在ot – jonney 2010-11-05 14:12:18

2

当我updata ADT工具版本18.0.0.v201203301601-306762 我也得到例外,当我运行应用程序.... 终于我找到解决方案与ADT更新问题。 当您构建android应用程序项目时,您需要进入项目Properties-> Order and Export,并让第三方jar复选框被选中,并清理并重建项目。 该问题将被修复...... for example let the third party jar checkbox to be checked

相关问题