最近公司有一個需求,需要暴露當前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() {
String ip ="xxx";//可以做一個系統配置,保存服務器IP Endpoint.publish("http:/"+ip+":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,正在學習,等成功了在更新。