Создание WAR с использованием Axis2 + Rampart для Tomcat

Я пытаюсь создать веб-службу на основе оси с валом для обеспечения безопасности, и я надеялся развернуть одну войну на tomcat, а не устанавливать ось и развертывать ее внутри оси. (Хотя я не зациклен на этом... это все очень новая для меня территория, поэтому я мог бы использовать любые ваши отзывы.)

Я столкнулся с несколькими проблемами:

  • mvn jetty:run работает нормально -- я могу использовать веб-службу и получать wsdl, нажимая URL-адрес моих служб с добавлением ?wsdl в конце (например: http://localhost:8080/webservice/services/ResultService?wsdl "webservice" — это имя этого проекта), однако mvn jetty:run-war не работает , если только я сначала вручную не скопирую Rampart-1.4.mar и rahas-1.4.mar в каталог WEB-INF/lib. Если этого не сделать, то jetty:run-war создаст серию исключений о недоступных модулях валов, и при нажатии того же URL-адреса wsdl, что и выше, будет возвращена пустая страница. (вообще никакого контента, хотя это должен быть хороший кусок wsdl) Вот трассировки стека: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=12058#a12058

  • Независимо от расположения файлов mar в сгенерированной войне, мне никогда не удавалось заставить tomcat правильно обслуживать веб-службу. Он не выводит ничего примечательного в журнал (только ИНФОРМАЦИЯ о том, что веб-приложение было развернуто), и для приведенных выше URL-адресов не предоставляется wsdl. http://localhost:8180/infoassist/services/ResultService?wsdl ничего не возвращает. («infoassist.war» — это имя сгенерированной войны, поэтому URL-адрес отличается от URL-адреса причала)

Если я запрашиваю URL-адрес, который не заканчивается на ?wsdl, я получаю исключение оси в браузере. Вероятно, это нормально — это происходит даже при запуске функционального сервера jetty:run, и я пока не ожидаю «настоящего» вывода в браузере, поскольку все, что я делал до сих пор, — это просто тестирование мыла. Однако это указывает на то, что ось используется с Tomcat, поэтому по крайней мере некоторые зависимости войны работают:

org.apache.axis2.AxisFault: The service cannot be found for the
endpoint reference (EPR) /infoassist/ at
org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:65)
at org.apache.axis2.engine.Phase.invoke(Phase.java:334) at
org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:251) at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:160) at
org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:135)
at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)
at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:838)
at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:262)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)

Я действительно хватаюсь за соломинку здесь - любая помощь будет очень признательна, и, конечно, я могу предоставить гораздо больше деталей, я просто не знаю, что будет полезно.


person rcreswick    schedule 11.11.2009    source источник


Ответы (2)


Вопрос с последующим предложением.

В: Вы создали WSDL через eclipse? Если да, то убедились ли вы, что это правильная версия Axis?

СУБЪЕКТ: Я бы поместил все в EAR, который, как мне кажется, поддерживает tomcat. EAR — это каталог, в котором могут храниться несколько файлов WAR и JAR.

person Woot4Moo    schedule 12.11.2009
comment
На стороне сервера нет статического WSDL. Клиентская сторона использует java2wsdl для получения WSDL, который затем используется в качестве входных данных для wsdl2java для создания классов, необходимых для клиента. Насколько я знаю, ось на стороне сервера автоматически генерирует WSDL из классов обслуживания во время выполнения. Я пытаюсь сделать aar прямо сейчас и поместить его в установку оси + вал, которая находится в tomcat. Я попробую ваше предложение EAR, если подход aar не сработает. Спасибо! - person rcreswick; 12.11.2009

Я понял это со значительной помощью из разных источников:

Первый,

Следуйте этим инструкциям:

Однако при сборке войны осей вы должны сначала настроить сборку так, чтобы axis2-codegen-1.5.jar не исключался из архива в соответствии с инструкциями здесь:

Чтобы использовать код Rampart в установке сервера Axis2, необходимо создать новый файл axis2.war, содержащий добавленные файлы Rampart .jar и .mar. Вы можете использовать Ant build.xml из каталога webapp для создания axis2.war, если вы сделаете одно изменение: удалите строку ‹exclude name="axis2-codegen*.jar"/› в конце файла. Затем откройте консоль в каталоге веб-приложений Axis2 и запустите ant. После запуска build.xml вы можете найти созданное веб-приложение axis2.war в каталоге дистрибутива установки Axis2.

Этого должно быть достаточно, чтобы увидеть вал в списке загруженных модулей со страницы администрирования оси (которая, вероятно, находится по адресу http://localhost:8080/axis2/axis2-admin/listModules. Однако, если вы используете бинарные дистрибутивы этих библиотек (axis/rampart), вы также должны позаботиться о том, чтобы скомпилировать свой код в спецификация класса java, совместимая с 1.5. Я этого не делал, поэтому постоянно сталкивался с java.lang.UnsupportedClassVersionError ошибками, но ничто не давало понять, что на самом деле вызывает проблему - я подозревал, что axis2-codegen-1.5.jar, который был отвлекающим маневром - на самом деле проблемы были с версией байт-кода моих скомпилированных файлов классов. Это также произошло, когда я собрал образцы валов из дистрибутива, потому что они были распространены в исходной форме, а мой компилятор по умолчанию - java 1.6.

person rcreswick    schedule 13.11.2009
comment
Я пробовал шаги по ссылке, которую вы упомянули, http://wso2.com/library/knowledge-base/run-rampart-samples-apache-tomcat/, но при выполнении клиентского запроса я получаю сообщение об ошибке на сервере, например org.apache.ws .security.WSSecurityException: Токен безопасности не может быть аутентифицирован или авторизован. У вас есть идеи, почему возникает эта ошибка? - person dileepVikram; 10.03.2015
comment
Не могли бы вы изучить это вопрос - person dileepVikram; 11.03.2015
comment
@dileepVikram Боюсь, я не могу помочь - за последние пять лет я не работал с веб-сервисами на основе Java. - person rcreswick; 12.03.2015
comment
Хорошо, спасибо за комментарий. У вас есть еще документы или полезные ссылки, касающиеся политики ws и валов. Я застрял с этой проблемой в течение некоторого времени. Также я не видел хороших руководств по этому вопросу. Я использую axis2 с валом. - person dileepVikram; 12.03.2015
comment
@dileepVikram Я не знаю, извините, я не могу помочь - в последнее время я работаю почти исключительно с Haskell. - person rcreswick; 13.03.2015