需要:Tomcat + Axis2 + JAX-WS傻瓜指南

时间:2008-12-04 07:36:25

标签: java web-services tomcat jax-ws axis2

我们正在使用Tomcat + Axis2 + POJO进行Web服务实现,我们遇到了POJO和Axis2的一些问题,这些问题对我们来说是一个显而易见的问题。 看起来,SOAP解析的Axis2和POJO实现忽略了XML元素的名称,只是根据SOAP消息中XML元素的顺序为参数赋值。这件事在复杂的API中引起了很多问题。

在Axis2的文档沼泽中游泳后,我更加困惑,然后我进来了,所以我真的需要一些帮助。

据我所知,JAX-WS和Axis2没有这些问题(如果我错了,请纠正我),但我似乎不知道如何开发和部署这样的解决方案。

我编写了一个POJO,并使用JAX-WS注释对其进行了注释,我在类上执行了wsgen,并将所有文件与 services.xml 文件打包在一个aar文件中:

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

当我尝试执行Web服务调用时,我在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)

请帮助我解释如何使用Tomcat + Axis2部署JAX-WS(如果CXF与Tomcat一起使用,我也可以使用它),或者指导我阅读涵盖Tomcat + Axis2的GOOD教程。

谢谢!

3 个答案:

答案 0 :(得分:3)

直接来自Axis2网站,this是一个涵盖Axis2和Jax-Ws的教程。您可能因为缺少axis2-jaxws-1.3.jar而得到上述错误。检查你的课程路径。

您当然可以将TomF与Tomcat一起使用,我个人认为您最好使用它。

答案 1 :(得分:1)

与CXF一样,另一个不错的选择是Apache Tuscany - 使POJO变得非常容易。

答案 2 :(得分:1)

我被建议使用JAX-WS层(Metro 1.4)的官方Sun实现,到目前为止它运行良好。主要的是它知道如何在Web服务器内的运行时根据需要生成工件。

当我在这里获得生产质量时,我可能会写下所需的步骤。