Попытка сослаться на внешнюю банку через другую внешнюю банку - httpcore через httpclient

Все это отлично работает при запуске junit в eclipse. Проблема возникает, когда я развертываю свою банку на шине Oracle Serviec Bus и вызываю ее через прокси.

Моя банка использует httpClient и httpCore, httpClient также имеет некоторые зависимости от httpCore. Проблема возникает, когда httpclient ссылается на httpcore, не ссылаясь на мою банку. Я доказал, что внешний jar ссылается на другой, отредактировав манифест httpclient, чтобы он имел httpcore jar. Все работает, если я сделаю это, но я не хочу вручную редактировать внешние банки, как вы ожидаете!

В моем манифесте установлен этот путь к классу: Путь к классу: httpcore-4.3.jar httpclient-4.3.1.jar DatabaseUtil-1.0.jar commons-codec-1.8.jar

Я работаю над добавлением jar-файлов в путь к классам сервера, и я думаю, что это сработает, но проверяю, есть ли другой способ сделать это, поскольку есть другие сервисы / jar-файлы, использующие тот же jvm. Я скопировал тестовый класс ниже, чтобы показать проблему

Любая помощь очень ценится.

Спасибо, Дэниел.

public class CheckHTTPJars {

  public static String checkHttpJarsLoaded()
  {

    try {
        System.out.println("Starting...");
        System.out.println("classpath: " + System.getProperty("java.class.path"));

        HttpHost host = new HttpHost("test");

        System.out.println("Hit HTTPCore... ");

        BasicResponseHandler b = new BasicResponseHandler();

        System.out.println("Hit HTTPClient... ");

        HttpGet get = new HttpGet();

        System.out.println("Hit HTTPClient but referencing HttpCore... ");

        HttpRequest h = null;

        System.out.println("Hit HTTPCore... ");


        return("Passed");
    } catch (Exception e) {
        return (e.getMessage());
    }

  } 
}

person Daniel Mulcahy    schedule 07.11.2013    source источник


Ответы (2)


  1. Используете ли вы выноску Java для OSB?

  2. Вы получаете сообщение Класс не найден (или другие исключения)?

  3. Что такое DatabaseUtil-1.0.jar, созданный вами и используемый в callout?

Я полагаю, что ответ на эти вопросы верен в этом ответе.

Для работы кода вам понадобятся оба (немодифицированных) jar-файла.

Если вы не хотите помещать оба jar-файла в путь к классам сервера (рекомендуется Oracle для общих артефактов), вы можете связать их с помощью настраиваемого jar-файла, используемого в выноске. Это может быть нормально (зависит от варианта использования), так как обе банки составляют около 1 МБ. См. Как создать исполняемый JAR-файл с зависимостями используете Maven?

Помните, что вам нужен общий кодек и некоторые другие зависимости для этих двух, проверьте http://mvnrepository.com/ для Полный список.

person arkonautom    schedule 08.11.2013
comment
Привет, спасибо за ответ. Я использую выноску OSB Java, ошибка - java.lang.NoClassDefFoundError: org / apache / http / HttpHost. DatabaseUtil - это моя собственная утилита, которую я использую для вызова БД. Я сделал это доступным через манифест и работаю. У меня есть обе банки, и я посмотрю, как связать их с maven. В настоящий момент мы используем ant для сборки этого проекта, но все должно быть в порядке, чтобы перейти на проект maven. - person Daniel Mulcahy; 11.11.2013

В конце концов, я остановился на Ant и использовал тег zipgroupfileset. Это объединит внешние классы jar в вашу jar. Это немного беспорядочно, поскольку он извлекает классы и копирует их в вашу банку вместо того, чтобы объединять банки. Я уверен, что есть способ объединить банки, и, возможно, решение maven от arkonautom (кстати, спасибо) будет сделайте это для вас (у меня закончилось время, поэтому я так и не дошел до того, чтобы попробовать).

Другие решения, которые я встретил - Скопируйте банки в папку $ domain / lib. Это тоже сработало, но обнаружилось, что мне также пришлось развернуть банки в папку, или у меня возникли проблемы с моей выноской java, не видящей кода. Я не стал тратить время на исследования - переписал код с помощью java.net URLConnection. Это тоже работало, но возникали проблемы с авторизацией при локальном запуске, поэтому в конце концов решили отказаться.

Надеюсь, это поможет кому-то другому ...

        <zipgroupfileset dir="lib">
              <include name="httpclient-4.3.1.jar"/>
              <include name="httpcore-4.3.jar"/>
              <include name="commons-codec-1.8.jar"/>
        </zipgroupfileset> 
person Daniel Mulcahy    schedule 15.11.2013