Java InvocationTargetException

Я использовал базовые классы EMC Documentum для выполнения некоторых действий в репозитории documentum. Код работал нормально. Я экспортировал проект как исполняемый JAR, а затем попытался запустить его. Однако я получил следующую ошибку, и я не могу ее понять.

введите здесь описание изображения

А вот код для DocMovementHandler.getSession() На самом деле это не новый код, а обычный код для получения сессии documentum

public IDfSession getSession(String userName, String password)
{
    DfClientX clientx = null;
    IDfClient client = null;
    IDfSession session = null;
    try {
        // create a client object using a factory method in DfClientX
        clientx = new DfClientX();
        client = clientx.getLocalClient();   //takes time

        // call a factory method to create the session manager
        IDfSessionManager sessionMgr = client.newSessionManager();

        // create an IDfLoginInfo object and set its fields
        IDfLoginInfo loginInfo = clientx.getLoginInfo();
        loginInfo.setUser(userName);
        loginInfo.setPassword(password);

        // set single identity for all docbases
        sessionMgr.setIdentity("xyz_repo", loginInfo);
        session = sessionMgr.getSession("xyz_repo");   //takes time 
        //sessionMgr.beginTransaction();
        System.out.println("Session obtaied.");         
    }
    catch (DfServiceException dse)
    {
        DfLogger.debug(this, "Error while beginning transaction. ", null, dse);
        dse.printStackTrace();
    }

    catch (Exception e) 
    {
        DfLogger.debug(this, "Error while creating a new session. ", null, e);
        e.printStackTrace();
    } 
    return session;
}

И эта строка 38 client = clientx.getLocalClient();


person Mahesha999    schedule 15.11.2013    source источник
comment
Вам нужно обратиться в службу поддержки documentum, если вы не можете опубликовать код для этой строки.   -  person Peter Lawrey    schedule 15.11.2013
comment
ref: stackoverflow.com/questions /6020719/   -  person codeMan    schedule 15.11.2013
comment
Почему у вас часть текста консоли зачеркнута? Мы не сможем помочь вам решить ваши проблемы, если вы не можете сказать нам, в чем они заключаются.   -  person AJMansfield    schedule 15.11.2013
comment
Очевидно, вы помещаете нулевое значение в коллекцию (карту, набор или что-то в этом роде). Может быть, каких-то свойств не хватает?   -  person agad    schedule 15.11.2013
comment
@AJMansfield на самом деле это имена пакетов для моей организации, которые я не хочу раскрывать. Но поверьте мне, это просто имена методов, в которых возникает исключение.   -  person Mahesha999    schedule 15.11.2013
comment
обновить исходный вопрос   -  person Mahesha999    schedule 15.11.2013
comment
Тот же вопрос: stackoverflow.com/questions/ 16525570/ ..., но ответа нет.   -  person agad    schedule 15.11.2013
comment
@Mahesha999 Mahesha999 Да, это методы, в которых возникает исключение. А если серьезно, нет никаких причин, по которым вам нужно было бы скрывать имена, если только это не соответствует какой-то сверхзащитной политике компании. (И если это так, просто скажите «политика компании», а не «мне неудобно ее раскрывать».)   -  person AJMansfield    schedule 15.11.2013
comment
Да, к сожалению, это политика компании, но я предоставил требуемую трассировку стека, я думаю, то, что я выделил, - это просто цепочка вызовов. И кажется, что, как указал @agad, нет простого решения этой проблемы.   -  person Mahesha999    schedule 15.11.2013
comment
@Mahesha999 Какую версию DFC (Documentum CS) вы используете?   -  person Alex K    schedule 17.11.2013


Ответы (6)


InvocationTargetException — это оболочка. В нем говорится: «За этим вызовом отражения произошло исключение», и вы используете getCause() для получения внутреннего исключения.

Трассировка стека содержит внутреннее исключение. Это ExceptionInInitializerError. Это другая обертка. В нем говорится: «Все, что вы сделали, вызвало загрузку нового класса, и статический инициализатор этого класса выдал исключение».

Последним исключением в этой цепочке является NullPointerException. Это то, что вам нужно решить. Это означает, что вам нужно отладить эту com.documentum штуку. Как указывалось в комментариях, это будет непросто.

person Sebastian Redl    schedule 15.11.2013
comment
хорошо, что com.documentum это JAR. Я не понимаю, почему это не вызывается, когда я запускаю проект через eclipse. Упаковка его в JAR вызывает адские проблемы - person Mahesha999; 15.11.2013
comment
В этом случае я хотел бы знать лучшие/не очень подверженные ошибкам шаги для экспорта проекта в виде исполняемого JAR. - person Mahesha999; 15.11.2013

Вот наиболее вероятная проблема:

Статический инициализатор в одном из классов, имена которых вы вычеркнули, добавляет запись либо с ключом null, либо со значением null к Hashtable, что не позволяет использовать ключи или значения null.

Он использует Hashtable как место для хранения множества постоянных свойств и всего такого, и я предполагаю, что значение для одной из записей было null (что является вполне разумным способом указать, что какая-то функция недоступна или что-то в этом роде). как это).

Устаревший Hashtable необходимо заменить на более современный HashMap.

Если это библиотека, которую вы не можете просто изменить, вам следует заменить всю библиотеку обновленной версией.

person AJMansfield    schedule 15.11.2013
comment
Кстати, я знаю, что Hashtable официально не @Depricated. Но javadoc ясно дает понять, что вам больше не следует его использовать. - person AJMansfield; 15.11.2013

Вот некоторые подсказки, которые могут быть полезны. NullPointerException вызывается Hashtable#put, и обычно это происходит потому, что либо ключ, либо значение равно null.

Hashtable#put вызывается PreferenceManager.readPersistenceProperties, поэтому, скорее всего, это связано с тем, что в файле свойств чего-то не хватает, поэтому значение равно null.

Этот NPE привел к невозможности загрузки класса DfClient.

person Changgeng    schedule 15.11.2013

DfPreferences — это класс, загружающий файл конфигурации DFC dfc.properties. Должно быть что-то не так.

person David Pierre    schedule 28.11.2013

Окей, я не указал основную причину, но нашел решение, которое обязательно сработает каждый раз. EMC предоставляет разновидность Eclipse под названием Documentum Composer для работы с Documentum Projects. Начиная с варианта Eclipse, мы можем создавать другие типы проектов, такие как обычный проект Java, динамический веб-проект, веб-сервисы. Итак, я воссоздал свой проект в Documetnum Composer и экспортировал его как JAR, и это сработало.

Я пробовал это много раз, и это работало все время.

Некоторые моменты, на которые следует обратить внимание:

  • Вы должны заменить файл dfc.properties в папке установки Composer файлом в Content Server.
  • Мастер экспорта в JAR в Composer немного отличается от мастера в Eclipse.
person Mahesha999    schedule 28.11.2013

Обычно это вызвано неправильным значением dfc.properties.

Настройки хранятся в глобальном репозитории реестра, а детали подключения должны быть указаны в dfc.properties. Если нет, то может возникнуть эта (или аналогичная ошибка).

Кроме того, всегда пытайтесь очищать кеш и использовать правильную версию jar-файла dfc (для сервера содержимого v6.7 требуются jar-файлы 6.7 и т. д.).

person B.T.    schedule 22.04.2014