2008-12-04 10 views
3

Nous travaillons avec Tomcat + Axis2 + POJO pour la mise en œuvre du service Web, et nous avons rencontré quelques problèmes avec POJO et Axis2 qui sont une vitrine pour nous. Il semble que l'implémentation Axis2 et POJO de l'analyse SOAP ignore les noms des éléments XML et affecte simplement des valeurs aux arguments en fonction de l'ordre des éléments XML dans le message SOAP. Cette chose cause beaucoup de problèmes dans les API complexes. Après avoir nagé dans la documentation marécageuse de l'Axis2, j'étais plus confus que moi, donc j'ai vraiment besoin d'aide.Nécessaire: Tomcat + Axis2 + Guide JAX-WS pour les nuls

Je comprends que JAX-WS et Axis2 n'ont pas ces problèmes (corrigez-moi si je me trompe), mais je n'arrive pas à savoir comment développer et déployer une telle solution.

J'ai écrit un POJO, et annotées avec les annotations JAX-WS, je wsgen exécuté sur la classe et remballés dans un fichier AAR avec ce services.xml fichier:

<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> 

lorsque je tente d'exécuter un appel de service Web, je reçois une exception dans 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) 

S'il vous plaît aidez-moi en expliquant comment déployer une JAX-WS avec Tomcat + Axis2 (si CXF fonctionne avec Tomcat je peux aussi l'utiliser), ou me diriger vers un bon tutoriel ers Tomcat + Axe2.

Merci!

Répondre

3

Directement à partir du site Web Axis2, this est un tutoriel couvrant Axis2 et Jax-Ws. Vous obtenez l'erreur ci-dessus probablement parce que le fichier axis2-jaxws-1.3.jar est manquant. Vérifiez votre chemin de classe.

Vous pouvez bien sûr utiliser CXF avec Tomcat et mon opinion personnelle est que vous en feriez mieux.

+0

Merci pour la réponse rapide. J'ai vu le tutoriel que vous avez aimé, et je suis ses étapes, à ce résultat. Je vais essayer de voir si je n'ai pas le fichier axis2-jaxws-1.3.jar et le rapport. Pouvez-vous élaborer sur l'utilisation de tomcat + cxf + jax-ws? – user24640

1

En plus de CXF, une autre bonne option serait Apache Tuscany - rend les POJO dans les services extrêmement facile.

1

On m'a conseillé d'utiliser l'implémentation officielle de la couche JAX-WS de Sun (Metro 1.4) et cela a très bien fonctionné jusqu'ici. La chose principale est qu'il sait comment générer les artefacts au besoin lors de l'exécution à l'intérieur du serveur web.

Lorsque j'aurai atteint la qualité de production sur nos produits ici, je ferai probablement une description des étapes nécessaires.