2014-07-15 65 views
2

OTAClient.dll版本10.0.0.2532无法使用Com4j

以下是我用来连接到QC,应用滤镜和获取qcpath和现场数据的代码连接到HP质量中心。它与java 32位版本1.7工作正常。

import com.oracle.qcTasks.ClassFactory; 
    import com.oracle.qcTasks.IList; 
    import com.oracle.qcTasks.ISubjectNode; 
    import com.oracle.qcTasks.ITDConnection; 
    import com.oracle.qcTasks.ITDFilter; 
    import com.oracle.qcTasks.ITest; 
    import com.oracle.qcTasks.ITestFactory; 
    import com4j.Com4jObject; 

    public class qcClient { 

    public static void main(String[] args) { 

    ITest qcTestCase; 
    ISubjectNode qcTestCasePath; 
    Com4jObject SubjectField; 
    //QC url 
    String url = "http://fusionqc.us.oracle.com/"; 
    //username for login 
    String username = "username"; 
    //password for login 
    String password = ""; 
    //domain 
    String domain = "domain"; 
    //project 
    String project = "project"; 
    ITDConnection itdc = ClassFactory.createTDConnection(); 
    itdc.initConnectionEx(url); 
    itdc.connectProjectEx(domain, project, username, password); 
    boolean flag = itdc.connected(); 

    System.out.println(itdc.projectName());  
    ITestFactory qcTestFactory = itdc.testFactory().queryInterface(ITestFactory.class); 
    ITDFilter qcFilter=qcTestFactory.filter().queryInterface(ITDFilter.class);  


    String query="^Subject\\path^";   
    qcFilter.clear(); 

    qcFilter.filter("TS_SUBJECT", query);  

    IList qcTestList = qcFilter.newList();  
    for (Com4jObject com4jObject : qcTestList) { 
     qcTestCase = com4jObject.queryInterface(ITest.class); 
     System.out.println(qcTestCase.name()); 
     System.out.println(qcTestCase.field("TS_USER_09")); 


     SubjectField = (Com4jObject)qcTestCase.field("TS_SUBJECT"); 
     qcTestCasePath = SubjectField.queryInterface(ISubjectNode.class); 
     System.out.println(qcTestCasePath.path()); 
     break; 
    } 


    System.out.println("command output :: "+flag); 

    System.out.println("OUT");  
    itdc.disconnectProject(); 


} 

}

工程要求,我已经降级的Java版本为1.6的64位版本。发布降级后,我收到以下错误。

 Exception in thread "main" com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153 
at com4j.ComThread.execute(ComThread.java:203) 
at com4j.Task.execute(Task.java:25) 
at com4j.COM4J.createInstance(COM4J.java:97) 
at com4j.COM4J.createInstance(COM4J.java:72) 
at com.oracle.qcTasks.ClassFactory.createTDConnection(ClassFactory.java:16) 
at com.oracle.qcCode.qcClient.main(qcClient.java:32) 
     Caused by: com4j.ComException: 80040154 CoCreateInstance failed : Class not registered : .\com4j.cpp:153 
at com4j.Native.createInstance(Native Method) 
at com4j.COM4J$CreateInstanceTask.call(COM4J.java:117) 
at com4j.COM4J$CreateInstanceTask.call(COM4J.java:104) 
at com4j.Task.invoke(Task.java:51) 
at com4j.ComThread.run0(ComThread.java:153) 
at com4j.ComThread.run(ComThread.java:134) 

我发现了类似的线程,但没有找到相同的解决方案。请帮忙。是否对java版本有任何影响

回答

0

你使用什么版本的com4j?请参阅this post在64位Windows机器上使用com4j。有没有可以在64位环境中使用的COM对象?

根据this blog entry当您尝试访问64位环境中的32位COM对象时,您将收到类未注册异常。它甚至包含使用一些注册表黑客的解决方法。也许它工作?