Невозможно подключиться к HP Quality Center с помощью Com4j

OTAClient.dll версия 10.0.0.2532

Ниже приведен код, который я использовал для подключения к qc, применения фильтра и извлечения qcpath и данных поля. Он работает нормально с 32-битной версией Java 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 до 64-битной версии 1.6. После публикации рейтинга я получаю следующую ошибку.

      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?

1 ответ

Какую версию com4j вы используете? См. Этот пост для использования com4j на 64-битной Windows-машине. Существуют ли какие-либо COM-объекты, которые вы можете использовать в своей 64-битной среде?

Согласно этой записи в блоге вы получите исключение Class not Registered (Исключение класса не зарегистрировано) при попытке доступа к 32-битному COM-объекту в 64-битной среде. Он даже содержит обходной путь, использующий некоторые взломы реестра. Может это работает?

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