spring集成环境下的axis webservice的发布,调试
在spring集成的环境下,无论你是ssh集成,还是ssi集成的情况下,发布webservice往往在调用的时候会出错。
特别是,如果你是这个方式: 将webservice打aar包,放到tomcat下,然后启动tomcat,写客户端调用,出错之后你根本没法调试,都不知道是哪里出了问题。
例如:
webservice代码:调用了一个service方法,而service类是通过spring注入的。这个时候,往往会有注入失败的情况,而导致异常。
@Service("testWebservice")
public class TestWebservice{ @Resource public Personservice personservice; public String updatePerson(String pname,int pid){ String operateResult=""; try{ Person p= personservice.getPersonById(pid); p.setName(pname); personservice。updatePerson(p); operateResult="更新成功"; }catch(Exception e){ operateResult="操作失败"; e.print.......(e); } return operateResult; } }
解决方法:
第一步:和往常一样 大号aar包,用好压打开aar文件,
找到,aar包下 META-INF 文件夹,将里边的 services.xml 拷贝出来,用编辑器打开,如下:添加一些类容。
<service name="PublishWebService" > <description> Please Type your service description here </description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass">com.tkbs.digitalproduct.service.PublishWebService</parameter> <!--这里是添加的类容-->
//spring 集成axis的配置, <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter> <parameter name="SpringBeanName">testWebservice</parameter> //这里是你所写的webservice的类名,如这里我是 上面的那个TestWebservice 类。 </service>
第二步:然后将aar文件粘贴到服务器端的webroot下 web-inf下 建立一个services文件下,就像这样:
webroot----web-inf
--------services
-----------xxx.aar
注:什么是服务端,什么是客户端? 服务端就是包含你写是webservice类的那个web项目就可以成为服务端,而你另外写的 调用这个webservice的方法的项目就是客户端。
第二步:在服务端的 web.xml 中加入如下代码
<servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
第三步:将整个项目 部署到到tomcat下,
(这个时候 我们的webservice就随着项目一起部署到tomcat了,和之前的单独将aar文件放到tomcat下 相比有很多好处,比如:这种情况下可以方便调试)
然后debug模式启动tomcat,在浏览器输入:http://localhost:8080/你项目名称/services/weservice服务端的名称?wsdl 可以看到webservice是否发布成功
以我这个项目为例:我需要输入:http://locahost:8080/myservice/services/TestWebservice?wsdl
然后写好客户端代码,将服务端的webservice类 的方法打上断点之后,运行客户端代码,就可以 对webservice进行调试。
这个时候通过,断点,可以看到,service方法已经注入成功了。。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构