3

我们正在使用 Tomcat + Axis2 + POJO 来实现 Web 服务,我们遇到了一些 POJO 和 Axis2 问题,这对我们来说是个大问题。似乎 Axis2 和 POJO 的 SOAP 解析实现忽略了 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 中出现异常:

[错误] 找不到此 AxisService 的服务类。
java.lang.RuntimeException:找不到此 AxisService 的服务类。
    在 org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:95)
    在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
    在 org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
    在 org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    在 java.lang.Thread.run(未知来源)

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

谢谢!!

4

3 回答 3

3

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

您当然可以将 CXF 与 Tomcat 一起使用,我个人的看法是使用它会更好。

于 2008-12-04T07:59:57.727 回答
1

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

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

于 2009-02-20T16:02:53.267 回答
1

与 CXF 一样,另一个不错的选择是Apache Tuscany - 将 POJO 转换为服务非常容易。

于 2009-01-03T11:01:01.293 回答