Необходимо: Tomcat + Axis2 + JAX-WS руководство для чайников - PullRequest
3 голосов
/ 04 декабря 2008

Мы работаем с Tomcat + Axis2 + POJO для реализации веб-сервиса, и мы столкнулись с некоторыми проблемами с POJO и Axis2, которые являются для нас демонстрацией. Кажется, что реализация анализа SOAP в Axis2 и POJO игнорирует имена элементов XML и просто присваивает значения аргументам в соответствии с порядком элементов XML в сообщении SOAP. Это вызывает много проблем в сложных API.

После некоторого плавания в документации болота Axis2 я был более растерян, чем пришел, поэтому мне действительно нужна помощь.

Я понимаю, что JAX-WS и Axis2 не имеют этих проблем (поправьте меня, если я ошибаюсь), но я не могу понять, как разработать и развернуть такое решение.

Я написал POJO и аннотировал его аннотациями JAX-WS, я выполнил wsgen для класса и упаковал все в файл aar вместе с этим services.xml файлом:

<service name="TESTService" >
    <description>
        TEST web service
    </description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">com.test.WsdlImpl</parameter>
</service>

Когда я пытаюсь выполнить вызов веб-службы, в Tomcat появляется исключение:

 [ERROR] The service class cannot be found for this AxisService.
java.lang.RuntimeException: The service class cannot be found for this AxisService.
    at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:95)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

Пожалуйста, помогите мне, объяснив, как развернуть JAX-WS с Tomcat + Axis2 (если CXF работает с Tomcat, я тоже могу его использовать) или направьте меня к ХОРОШЕМУ учебнику, который охватывает Tomcat + Axis2.

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 04 декабря 2008

Прямо с веб-сайта Axis2, this - это учебное пособие, охватывающее Axis2 и Jax-Ws. Вы получаете вышеупомянутую ошибку, вероятно, потому что axis2-jaxws-1.3.jar отсутствует. Проверьте ваш путь к классу.

Конечно, вы можете использовать CXF с Tomcat, и я лично считаю, что вам будет лучше с ним.

1 голос
/ 20 февраля 2009

Мне посоветовали использовать официальную реализацию Sun слоя JAX-WS (Metro 1.4), и до сих пор он работал очень хорошо. Главное, что он знает, как генерировать артефакты по мере необходимости во время выполнения внутри веб-сервера.

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

1 голос
/ 03 января 2009

Как и CXF, другим хорошим вариантом будет Apache Tuscany - делает превращение POJO в сервисы чрезвычайно простым.

...