zoukankan      html  css  js  c++  java
  • 项目结尾公共模块WebService封装

          在杭州出差一年有余,终于结束那个炼狱式的出差生活,心里一个High啊!虽然知道明年还要过去...

          年末公司其他项目组看起来都是硕果累累啊,唯独我们项目组的兄弟都很萎,一是项目没有验收,另一个是我们项目做了一年多却不能拿出来给公司领导show一下(这个主要原因是因为我们做的这个项目是几家公司合伙做的,穿插的东西太多,很多有亮点的东西都无法玩儿,尤其是项目中和权限挂钩的模块)。我们老大想了一想把我和熊磊磊喊过去,吩咐道:项目我们也做了一年多了,我希望你们能够把项目中独立起来的模块抽出来包装成WebService,以供后期使用或者给其他兄弟项目组的使用。把你们认为能够独立的列一个清单,然后想想怎么实现。

         老大的一番话,我感觉很有道理,我们不光可以温习曾经做过的东西,同事也算是一种学习吧。

         谈到WebService我在浙江项目也封装过,不过是使用了WebService框架,需要引入N多东西(这也是我一直比较反感的)。现在我首先想到的是简单,易用。再说,在之前我已经研究过Jax-WS\JAXB,如果使用Jax-WS来做,对我来说也是小case。好了,不扯远了,步入我们的正题吧!

        接下来我们逐步来探讨技术吧。

      首先,打开Eclipse开发工具,创建一个名为GeoWS的Web Project。新建ICityService.java和IPOIManager.java两个接口,这两个接口分别做“城市定位查询”和“兴趣点查询”。接口都是简单的测试,没有仔细设计。

    ICityService.java 代码如下:

    package com.geostar.commonws.city;
    
    import com.geostar.commonws.city.domain.UserDTO;
    
    public interface ICityService {
         public  String  getCityInfo(String cityName);
         public  UserDTO  getUserInfo(UserDTO user);
    }
    

     其中UserDTO是我测试JAX-WS能不能返回自定义的对象,这个对象我采用jaxb注解对象,其代码如下:

    package com.geostar.commonws.city.domain;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class UserDTO {
    	private String userName;
    	private String password;
    	public String getUserName() {
    		return userName;
    	}
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    }
    

     IPOIManager.java 代码如下:

    package com.geostar.commonws.city;
    
    import com.geostar.commonws.city.domain.PoiDTO;
    
    public interface IPOIManager {
        public  PoiDTO  getPOINInfo(String name);
    }
    

     其中的PoiDTO与UserDTO类似,也是我测试用的。 代码如下:

    package com.geostar.commonws.city.domain;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class PoiDTO {
    	private String oid;
    	private String standardname;
    	private long weight;
    	private String addressName;
    	private String  imageUrl;
    	public String getOid() {
    		return oid;
    	}
    	public void setOid(String oid) {
    		this.oid = oid;
    	}
    	public String getStandardname() {
    		return standardname;
    	}
    	public void setStandardname(String standardname) {
    		this.standardname = standardname;
    	}
    	public long getWeight() {
    		return weight;
    	}
    	public void setWeight(long weight) {
    		this.weight = weight;
    	}
    	public String getAddressName() {
    		return addressName;
    	}
    	public void setAddressName(String addressName) {
    		this.addressName = addressName;
    	}
    	public String getImageUrl() {
    		return imageUrl;
    	}
    	public void setImageUrl(String imageUrl) {
    		this.imageUrl = imageUrl;
    	}
    
    }
    

     接口已经写好了,接下来便是接口实现类了,接口实现类也是很简单的测试:

    package com.geostar.commonws.city.impl;
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    
    import com.geostar.commonws.city.ICityService;
    import com.geostar.commonws.city.domain.UserDTO;
    
    @WebService(targetNamespace = "http://www.geostar.com.cn/geoglobe/", serviceName = "CityService", portName = "CityServicePort") 
    public class CityServiceImpl implements ICityService{
    	@WebMethod(action="http://www.geostar.com.cn/geoglobe/CityService/getCityInfo", operationName="getCityInfo")
    	public  String  getCityInfo(@WebParam(name="cityName")String cityName){
    		return "浙江";
    	};
    	@WebMethod(action="http://www.geostar.com.cn/geoglobe/CityService/getUserInfo", operationName="getUserInfo")
    	 public  UserDTO  getUserInfo(UserDTO user){
    		 UserDTO u=new UserDTO();
    		 u.setPassword(user.getPassword());
    		 u.setUserName(user.getUserName());
    		 return u;
    	 };
    }
    
    package com.geostar.commonws.city.impl;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    import com.geostar.commonws.city.IPOIManager;
    import com.geostar.commonws.city.domain.PoiDTO;
    @WebService(targetNamespace = "http://www.geostar.com.cn/geoglobe/", serviceName = "POIManager", portName = "POIManagerPort") 
    public class POIManagerImpl implements IPOIManager{
    	@WebMethod(action="http://www.geostar.com.cn/geoglobe/POIManager/getPOINInfo", operationName="getPOINInfo")
    	public  PoiDTO getPOINInfo(String name){
    		 PoiDTO  poi=new PoiDTO();
    		 poi.setOid("xxxxxxxxxxxxxxxxxxxx");
    		 poi.setAddressName("浙江省测绘局");
    		 poi.setImageUrl("/image/poi/point.gif");
    		 poi.setWeight(10);
    		 return poi;
    	 };
    } 
    

     接口和接口实现类都完了,下面该来写配置文件了,首先来看看jax-ws的配置文件 sun-jaxws.xml(位置在web-inf目录下,下同web.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
        <endpoint    
            name="POIComponent"  
            implementation="com.geostar.commonws.city.impl.POIManagerImpl"  
            url-pattern="/POIManager"/>  
             <endpoint    
            name="CityComponent"  
            implementation="com.geostar.commonws.city.impl.CityServiceImpl"  
            url-pattern="/CityQuery"/>  
    </endpoints>
    

    web.xml的配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <listener>
        <listener-class>
            	com.sun.xml.ws.transport.http.servlet.WSServletContextListener
            </listener-class>
      </listener>
      <servlet>
        <servlet-name>GeoWS</servlet-name>
        <servlet-class>
            	com.sun.xml.ws.transport.http.servlet.WSServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>GeoWS</servlet-name>
        <url-pattern>/POIManager</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>GeoWS</servlet-name>
        <url-pattern>/CityQuery</url-pattern>
      </servlet-mapping>
      <session-config>
        <session-timeout>120</session-timeout>
      </session-config>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

     ok,整个工程差不多了,接下来便是让这个工程怎么在tomcat下跑起来了,上面的代码如果编译是能通过的,但是如果想运行起来,还需要在tomcat安装目录下的lib文件夹下丢一些jar包,他们是:

    jaxb-impl.jar
    jaxws-api.jar
    jaxws-rt.jar
    gmbal-api-only.jar
    management-api.jar
    stax-ex.jar
    streambuffer.jar
    policy.jar

    这些jar包 你可以在http://jax-ws.java.net/ 这个网站下载的。

    ok,我们可以编译运行了。

    如果tomcat启动无错,会显示以下信息:

    2012-1-17 13:39:07 org.apache.catalina.core.AprLifecycleListener init
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: E:\Oracle\Middleware\jdk160_11\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/java/jdk1.6.0_03/bin/../jre/bin/client;D:/java/jdk1.6.0_03/bin/../jre/bin;D:/java/jdk1.6.0_03/bin/../jre/lib/i386;G:\product\11.1.0\client_1;G:\app\DELL\product\11.1.0\db_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\java\jdk1.6.0_03\bin;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;E:\GeoGlobe\Server\TASTool\win64\instantclient_11_2;E:\Oracle\Middleware\jdk160_11\bin;C:\Program Files\Common Files\Adobe\AGL;E:\Program Files\Tencent\QQPCMgr\6.3.2078.201;E:\Program Files\TortoiseSVN\bin;E:\Program Files\Tencent\QQPCMgr\6.3.2078.201
    2012-1-17 13:39:07 org.apache.tomcat.util.digester.SetPropertiesRule begin
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:GeoWS' did not find a matching property.
    2012-1-17 13:39:08 org.apache.coyote.http11.Http11Protocol init
    信息: Initializing Coyote HTTP/1.1 on http-8080
    2012-1-17 13:39:08 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 792 ms
    2012-1-17 13:39:08 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2012-1-17 13:39:08 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.29
    2012-1-17 13:39:08 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
    信息: WSSERVLET12: JAX-WS context listener initializing
    2012-1-17 13:39:09 com.sun.xml.ws.server.MonitorBase createRoot
    信息: Metro monitoring rootname successfully set to: null
    2012-1-17 13:39:10 com.sun.xml.ws.server.MonitorBase createRoot
    信息: Metro monitoring rootname successfully set to: null
    2012-1-17 13:39:10 com.sun.xml.ws.transport.http.servlet.WSServletDelegate <init>
    信息: WSSERVLET14: JAX-WS servlet initializing
    2012-1-17 13:39:10 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8080
    2012-1-17 13:39:10 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8009
    2012-1-17 13:39:10 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/31  config=null
    2012-1-17 13:39:10 org.apache.catalina.startup.Catalina start
    信息: Server startup in 2173 ms
    2012-1-17 13:40:17 org.apache.coyote.http11.Http11Protocol pause
    信息: Pausing Coyote HTTP/1.1 on http-8080
    2012-1-17 13:40:18 org.apache.catalina.core.StandardService stop
    信息: Stopping service Catalina
    

     那我们可以在浏览器下敲入:http://localhost:8080/GeoWS/POIManager?wsdl 和 http://localhost:8080/GeoWS/CityQuery?wsdl 来查看这两个webservice,为了能更好的测试webservice,我们可以下载一个WebService客户端工具,比如我使用SOAPUI来测试,具体这个工具怎么使用,我想聪明的大家三两下能搞定的。测试完毕,我们发现webservice接口可以返回复杂的对象。

       今天就写到这里了,如果有什么疑问可以联系我,我的QQ:570777808。

        转载请注明出处:http://www.cnblogs.com/likehua/archive/2012/01/17/2324643.html

  • 相关阅读:
    Android开发CheckBox控件,全选,反选,取消全选
    华为OJ平台——放苹果(典型整数划分问题)
    华为OJ平台——查找组成一个偶数最接近的两个素数
    华为OJ平台——输出最小的k个数
    华为OJ平台——完美数
    华为OJ平台——杨辉三角的变形
    Inconsistant light map between PC and Mobile under Unity3D
    How to Effectively crack .JAR Files?
    OpenGL 3 and OpenGL 4 with GLSL
    Dynamic Ambient Occlusion and Indirect Lighting
  • 原文地址:https://www.cnblogs.com/likehua/p/2324643.html
Copyright © 2011-2022 走看看