axis2总结

这次在做一个项目的时候需要进行webservice开发,以前开发webservice都是传String类型的xml数据,这次的是传的是复杂对象,其实这种复杂对象也是客户端传对象被客户端程序编译为soap包发送到服务端,服务端代码再根据soap包组成对象(若描述有错希望纠正),这次使用axis2

1.根据指定的wsdl生成服务端代码,使用axis2官方网发布包中所带工具wsdl2java,编译命令直接在它的官网user guide中有,注:编译后生成的bean的包最好不要改动,因为这里的包名跟代码中有很大关联,生成的skeleton骨架类到可以视情况变化

2.部署webservice

至于如何部署axis2,就不用多说了,网上有好多方法,有打包的和不打包的发布方式,我是不打包的方式发布的,在WEB-INF下services文件夹下将建立hello(随便命名)文件夹,再建立META-INF,然后将编译生成的resource下的services.xml及wsdl文件copy进去,然后还得配置相应的web.xml

3.The service cannot be found for the endpoint reference (EPR) ...错误解决

这个错误指webservice的接入点不正确,可能情况

               (1)你的访问路径有误,及你访问地址不正确,打到浏览器中看不到输出wsdl

       (2)打到浏览器中能看到wsdl,但客户端访问的时候仍报The service cannot be found for the endpoint reference (EPR) ...,这并不代表你的webservice没发布成功或有误,或你输入的访问连接不正确,关键看你在浏览器中输入连接打出wsdl最后的一段描述

<wsdl:service ame="isc">
  <wsdl:port name="isc_services" binding="tns:isc_services">
  <soap:address location="http://192.168.50.234:7001/WebRoot/service/isc/"/>
  </wsdl:port>
  </wsdl:service>

在这段描述中可以看到当访问wsdl连接时他会自动去转向这个地址(这个地址是axis2根据配置自动生成的),可能是这个地址访问不到,有可能你的web.xml中拦截不对,我的因为某些原因我在web.xml里面配置的axisServlet拦截/service/*,而axis2原来自动转向的地址location="http://192.168.50.234:7001/WebRoot/services/isc/,所以我的拦截不到,若想更改axis2的自动生成链接则一切尽在你部署是copy进去的conf/axis2.xml中了,在这里面有一个

<parameter name="servicePath">service</parameter>参数配置,你将这个配置成你想拦截的我的改成service,这样访问时自动转向的地址就是location="http://192.168.50.234:7001/WebRoot/service/isc/,根据web。xml中的配置即可拦截到访问了,当然axis2.xml还有很多秘密等有空再看吧,仅供参考

你可能感兴趣的:(axis2)