最近公司有一个需求,需要暴露当前web项目的接口给第三方系统调用,网上查到webservice是跨平台、跨语言的应用技术,所以作为首选。
查找了很多例子,都是很简单的加@WebService到类,加@WebMethod到暴露的方法上,然后EndPoint.publish即可,但我在web项目中使用,没有报错,但就是发布失败,在这里卡了很久,
以下是我的解决过程,做下记录备忘:
首先试着新建了一个普通java项目,同样的加接口、实现类、注解,结果发布成功。但是新建一个web项目同样的操作就是发布不成功,看了下项目结构,主要就是web项目默认加载tomcat的lib
所有JAR包,把这些包删除,重新发布,结果成功。这时我考虑到可能是我tomcat下的jar包冲突问题,于是进行排查,最后发现去掉 xfire-all-1.2.6.jar ,web项目就可以发布成功了,但是web项目
又必须有 xfire-all-1.2.6.jar,网上查了没有找到具体方法,但有提到xfire-core-1.2.6.jar,于是我把 xfire-all-1.2.6.jar 替代成 xfire-core-1.2.6.jar,web项目功能正常,webservice也可以发布成功。
因为我的项目是ssh框架,所以就创建一个filter类,配置到web.xml,启动项目的同时发布接口。
public class StartFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub } @Override public void init(FilterConfig filterConfig) throws ServletException { this.startWebservice(); } public void startWebservice() { Endpoint.publish("http://localhost:8085/service/wstest",new WsInterfaceImpl()); System.out.println("webservice发布成功"); } }
//web.xml添加配置
<filter> <filter-name>StartFilter </filter-name> <filter-class>com.cf.cfipms.interceptor.StartFilter</filter-class> </filter>
目前只是实现使用jdk自带的webservice进行发布,看到很多推荐CXF,正在学习,等成功了在更新。