Не удается загрузить модуль Rampart в клиентском проекте Axis2

1

Хотя мой проект является веб-приложением Java, я использую веб-службы только как клиент.

Я успешно создал заглушки с Apache Axis2 и протестировал их с помощью SoapUI. Теперь пришло время реализовать безопасность. Это одна из услуг, которые я должен интегрировать. Он отправляет политику WS-Security, чтобы я мог правильно передать мои учетные данные.

Я хочу интегрировать Apache Rampart в свой проект. Я нашел много трудностей с загрузкой необходимых файлов JAR и MAR для использования, но я это сделал.

Теперь у меня есть следующая структура проекта:

webapp
   -- WEB-INF
       -- classes
       -- conf
          -- axis2.xml
       -- modules
          -- several -mar files
          -- rampart-1.6.2.mar
          -- modules.list
       -- spring
          -- various context files
       -- web.xml

Я использую Spring для инициализации всех компонентов, включая заглушки веб-сервисов. Если я позволяю Spring создавать экземпляр их нормально, они работают так, как ожидалось. Но когда я использую BeanPostProcessor для взаимодействия с модулем rampart, он будет терпеть неудачу

Caused by: org.apache.axis2.AxisFault: Unable to engage module : rampart
at org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:363)
at it.csttech.edwin.security.SecurityHandler.engage(SecurityHandler.java:52)

В моем axis2.xml я добавил <module ref="rampart"/> после addressing

Я разрешаю Rampart со следующим кодом:

    RampartConfig rc = new RampartConfig();
    rc.setUser(user);
    Policy policy = PolicyEngine.getPolicy(new StAXOMBuilder(policyStream).getDocumentElement()); //XML policy file in classpath
    policy.addAssertion(rc);
    serviceClient.engageModule("rampart"); //this fails
    Options options = serviceClient.getOptions();
    options.setProperty(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); //This will provide password
    options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy); //This will provide policy

Я обнаружил, что если я делаю Map<String, AxisModule> modules = serviceClient.getAxisConfiguration().getModules(); Я просто получаю пустую карту !!!!

Таким образом, модули не загружаются вообще.

Затем я попытался переместить каталог modules/directory в другое место на моем жестком диске и связать его с помощью системного свойства axis2.repo но даже если Axis2 не будет загружаться, если я по умолчанию установил плохой путь, он просто не будет загружать rampart-1.6.2.mar и карта будет по-прежнему пуста.

Я сошел с ума. Я не знаю, как правильно загрузить Rampart в мою настройку. Я даже не знаю, можно ли использовать Spring IoC для правильной настройки и/или использования Rampart во всех сервисах.

Теги:
web-services
ws-security
axis2
rampart

1 ответ

0

Вы можете попробовать создать ConfigurationContext и использовать его для получения ServiceClient.

// create configuration context
ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(RESOURCES_DIR, null);

// create service client
ServiceClient serClient = new ServiceClient(ctx, null);

// engage modules
serClient.engageModule("rampart");

Где "RESOURCES_DIR" должен указывать на расположение ваших файлов.mar.

  • 0
    Та же ошибка. Я трижды проверил, что System.getProperty ("axis2.repo") оценивается для правильной директории, то есть "C: / path / to / modules /"
  • 0
    RESOURCES_DIR ("axis2.repo") должен указывать на родительский каталог модуля, и этот родительский каталог должен также включать каталог служб. Взгляните на axis.apache.org/axis2/java/core/docs/adv-userguide.html (найдите главу под названием «Хранилище Axis2», где объясняется структура репозитория)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню