我们正在使用 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 教程。
谢谢!!