在java项目中使用webservice

今天学习webservice,主要参考了网络上的一些文章。html

1.关于原理的介绍:我的认为这篇文章写得不错了,戳这里。java

2.关于demo的编写:我的认为这篇文章很简洁,也能运行成功,戳这里。web

按照上面那篇文章的demo运行成功之后,我想在java web中加入一个webservice服务,供其余的java web项目调用。spring

1.首先,在项目中添加com.xdx.webservice包,如图所示。浏览器

2.在其中加入WetherServiceInter接口和其实现类WeatherService类。代码以下。websocket

package com.xdx.webservice; import javax.jws.WebMethod; import javax.jws.WebService; import com.xdx.entity.TAdmin; @WebService public interface WeatherServiceInter { @WebMethod public String getWeatherByCityname(String name); public TAdmin getAdminById(int adminId); }
package com.xdx.webservice; import javax.jws.WebService; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import com.xdx.entity.TAdmin; import com.xdx.service.AdminService; @WebService public class WeatherService implements WeatherServiceInter { public String getWeatherByCityname(String name) { System.out.println(name+"天气晴朗"); return name+"天气晴朗"; } public TAdmin getAdminById(int adminId){ WebApplicationContext webApplicationContext = ContextLoader .getCurrentWebApplicationContext(); AdminService adminService=(AdminService) webApplicationContext.getBean("adminService"); TAdmin admin = adminService.getAdminById(adminId); return admin; } }

3.发布webservice服务,这边咱们在web项目启动的时候发布webservice服务,创建一个filter,在filter中写入以下代码,负责启动websocket(以前的demo)和webservice。这边咱们选用8085端口做为webservice的端口。网络

package com.xdx.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.xml.ws.Endpoint; import org.java_websocket.WebSocketImpl; import com.xdx.webservice.WeatherService; import com.xdx.websocket.WsServer; public class StartFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { } public void init(FilterConfig arg0) throws ServletException { this.startWebsocketInstantMsg(); } /** * 启动即时聊天服务 */
    public void startWebsocketInstantMsg() { WebSocketImpl.DEBUG = false; WsServer s; s = new WsServer(8887); s.start(); System.err.println("websocket启动了"); //启动webservice
        Endpoint.publish("http://localhost:8085/ws_server/weather", new WeatherService()); System.out.println("webservice启动了"); } }

4.在web.xml中配置filter,配置以下。app

    <!-- filter -->
    <filter>
        <filter-name>startFilter</filter-name>
        <filter-class>com.xdx.filter.StartFilter</filter-class>
    </filter>

5.运行项目,在浏览器输入http://localhost:8085/ws_server/weather?wsdl  测试一下,会出现以下的xml文件。socket

 

说明已经发布成功了。学习

6.接下来咱们在另一个web项目(名为m_gecko)中来调用该webservice服务里面的方法。首先,经过cmd进入m_gecko项目的src/main/java目录下,如图所示,输入wsimport -keep http://localhost:8085/ws_server/weather?wsdl

出现上述提示,说明已经在m_gecko项目中生成了webservice的客户端代码,咱们刷新一下m_gecko项目看看。果真是的。

7.在m_gecko项目中咱们来写调用webservice服务的方法。首先咱们来调用getWeatherByCityname方法。

    @ResponseBody
    @RequestMapping(value="webserviceDemo1", produces = "text/html; charset=utf-8")
    public String webserviceDemo1(){
        WeatherServiceService factory=new WeatherServiceService();
        WeatherService service=factory.getWeatherServicePort();
        String result=service.getWeatherByCityname("厦门");
        return result;
    }

运行m_gecko项目(同时也要运行webservice服务所在的项目warrior项目),在浏览器中输入http://localhost:8080/m_gecko/webserviceDemo1。

 而后再来调用getAdminById方法。

@ResponseBody @RequestMapping(value="webserviceDemo2") public TAdmin webserviceDemo2(){ WeatherServiceService factory=new WeatherServiceService(); WeatherService service=factory.getWeatherServicePort(); TAdmin admin=service.getAdminById(5); return admin; }

效果以下

相关文章
相关标签/搜索