eclipse 开发webservices以及整合Spring开发webservices

开发webservices方式:

1.jax

2.xfire ---下面要介绍的

3.axis-- eclipse 里创建dynamic web project→create web servcies 即可成功

eclipse 使用xfire开发webservices client 和 server,(没有整合Spring)

1.开发服务端,

 @1.手动编写(推荐方式),利用xfire jar自动生成 wsdl,部署到tomcat等应用服务器,进而请求发布webservices

重要一点就是:jar包导入全;services.xml需要在web-info下classes的meta-info下的xfire文件里.参考代码


eclipse 开发webservices以及整合Spring开发webservices_第1张图片

备注:


  @1.这里是在eclipse中开发的,需要开发者明确wsdl地址组成部分:

  http://localhost:8080/xfireDemo/services/MathService?wsdl

  http://localhost:8080/xfireDemo是请求项目的

  services存在是在web.xml中配置的,为了调用xfire

  MathService是在services.xml文件定义的你的服务实现类的别名

  ?wsdl是传递给xfire的请求参数

 @2.services.xml文件要存放在meta-info下,但是在新建立的Dynamic web project是可以很容易的建立的,但是在已经建立过的web项目建立classes文件是不好弄的。此时,需要切换到naviagtor导航中,不然常常提示classes文件已经存在。windows→preferences→show other → n。然后看到classes,拖动meta-info到classes即可。有事需要clean下项目,然后拖动。

@3.另外services.xml中,services中namespace,类似于spring中的命名空间原则。带查证。逐级查询。

@4.在启动项目是,会出现

eclipse 开发webservices以及整合Spring开发webservices_第2张图片


此时需要针对services.xml进行修改下:

 @1.必须先确保beans,service等标签写的对,譬如:service写错services,那么也会出现上述问题

 @2.修改beans和services中xmlns的位置即可。

@5.web.xml配置:

 <-- 用来配置xFire -->  
          <servlet>  
        <servlet-name>XFireServlet</servlet-name>  
        <servlet-class>    
                     org.codehaus.xfire.transport.http.XFireConfigurableServlet    
             </servlet-class>  
        <load-on-startup>0</load-on-startup>  
      </servlet>  
      <servlet-mapping>  
        <servlet-name>XFireServlet</servlet-name>  
        <url-pattern>/servlet/XFireServlet/*</url-pattern>  
      </servlet-mapping>  
      <servlet-mapping>  
        <servlet-name>XFireServlet</servlet-name>  
        <url-pattern>/services/*</url-pattern>  
      </servlet-mapping>  
@6.进行wsdl测试

  .将eclipse切换到j2ee模式,然后我们可以看到:

eclipse 开发webservices以及整合Spring开发webservices_第3张图片
  .然后点击该按钮,我们可以看到

eclipse 开发webservices以及整合Spring开发webservices_第4张图片
  .我们点击右侧的按钮后,点击左侧的,我们得到
eclipse 开发webservices以及整合Spring开发webservices_第5张图片

  .然后输入我们请求的wsdl地址
eclipse 开发webservices以及整合Spring开发webservices_第6张图片

  .在左侧我们可以看到一个树形结构,而且下方的方法与右侧的一一对应
eclipse 开发webservices以及整合Spring开发webservices_第7张图片

  .然后点击左侧树中的某个方法,有入参的话,输入入参,点击go,我们可以得到输出
eclipse 开发webservices以及整合Spring开发webservices_第8张图片
 

----------------------------------------------------------------------------------------------------------------

 @2.利用xifre eclipse plugin jar ,放置到eclipse→plugins,生成wsdl文件,手动的编写wsdl,但是要求很高,也是不可取的。
eclipse 开发webservices以及整合Spring开发webservices_第9张图片

2.开发客户端

使用eclipse xfire插件,利用已知的wsdl地址,生成客户端

 安装xfire插件,安装过程耗时,请耐心等待

  .eclipse→help→install new softares

  .输入如下的地址:http://dist.codehaus.org/xfire/update/

  .进行插件的安装,然后重启eclipse

然后利用wsdl→生成webservices client 。当然可以利用上述的代码例子,进行客户端代码开发。

3.eclipse+xfire+Spring开发webServices

  在上述的开发例子之上,当我们整合Spring时,我们自然而然的会想到接口+Spring注入,但是这个不同于SSH框架的MVC模式,因为MVC是请求时,容器帮我们已经实例化了交给它管理的类,可是我们此时没有请求。我们在项目中添加了接口以及其实现类:
 package com.capinfo.service;  
    public interface SelectInterface {  
        public String selectList();  
    }  
    //接口实现类  
    package com.capinfo.service;  
      
    import java.util.ArrayList;  
    import java.util.List;  
      
    import com.capinfo.system.manage.business.BuildBusiness;  
      
    public class InterfaceImpl implements SelectInterface{  
        private BuildBusiness buildBusiness ;  
          
        public String selectList() {  
            List list = new ArrayList();  
            list = buildBusiness.selectAllState();  
              
            System.out.println("list---"+list.size());  
            return "222";  
        }  
        //get and set  
      
        public BuildBusiness getBuildBusiness() {  
            return buildBusiness;  
        }  
        public void setBuildBusiness(BuildBusiness buildBusiness) {  
            this.buildBusiness = buildBusiness;  
        }  
              
    }  
同时,我们在applicationContext.xml文件中进行实现类的Spring管理:
  <!-- 把service中的实现类交给spring管理 -->  
        <bean id="HelloWorldBean" class="com.capinfo.service.InterfaceImpl" scope="prototype">  
            <property name="buildBusiness" ref="buildBusiness"></property>  
        </bean>  
此时,理论上,我们会认为类似于没有整合spring时,我们可以发布成功。可是,我们失败了。。。,我们得到null point exception(buildBusiness)

此时,我们需要思考:我们此时没有请求,我们是对外发布,给别人调用,我们是主动者。整合Xfire,此时这就需要用导出器XFireExporter.借助于接口,我们可以发布我们想发布的服务而且我们还可以方便后期的扩展;另外,XFire的导出器也需要服务接口的支持,因为它采用基于接口的动态代理技术

基于以上的代码和配置,下面介绍xfire+Spring+eclipse整合:

1.接口开发完毕,我们需要让Spring知道,我们把xfire集成到Spring里,此时我们就需要在Spring的配置文件applicationContext.xml里:

两者配置方式:两者选择其一均可

 @1.指定请求的服务名
    <servlet>     
          <servlet-name>xfire</servlet-name>     
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
       </servlet>     
       <servlet-mapping>   
          <servlet-name>xfire</servlet-name>  
          <url-pattern>*.ws</url-pattern>  
       </servlet-mapping>  
 @2.命名空间限定+特定的服务名
    <servlet>  
       <!-- 配合Spring容器中XFire一起工作的Servlet-->  
       <servlet-name>xfireServlet</servlet-name>  
       <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>  
    </servlet>  
    <servlet-mapping>  
       <servlet-name>xfireServlet</servlet-name>  
       <!-- 在这个URI下开放Web Service服务 -->  
       <url-pattern>/service/*</url-pattern>  
    </servlet-mapping>  
2.在用户请求了特定的服务名是,我们要让Spring明白,转发到哪个xfire服务类上,此时需要配置xfire bean --xfire-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
    <beans>  
      
      <!-- 引入XFire预配置信息 -->  
        <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />  
          
        <!--     定义访问的url -->  
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
            <property name="urlMap">  
                <map>  
                    <entry key="/HelloService.ws">  
                        <ref bean="HelloService"/>  
                    </entry>  
                </map>  
            </property>  
        </bean>  
          
          <!-- 使用XFire导出器 -->  
        <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">  
           <!-- 引用xfire.xml中定义的工厂 -->  
           <property name="serviceFactory" ref="xfire.serviceFactory" />  
           <!-- 引用xfire.xml中的xfire实例 -->  
           <property name="xfire" ref="xfire" />  
        </bean>  
          
        <bean id="HelloService" parent="baseWebService">  
           <!-- 业务服务bean -->  
           <property name="serviceBean" ref="HelloWorldBean" />  
           <!-- 业务服务bean的窄接口类 -->  
           <property name="serviceClass" value="com.capinfo.service.SelectInterface" />  
        </bean>  
      
    </beans>  
3.还需要在web.xml中指定xfire-servlet.xml位置
 <!-- 用来定位Spring XML文件的上下文配置 -->  
    <context-param>  
          <param-name>contextConfigLocation</param-name>  
          <param-value>  
            classpath:/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml          
          </param-value>  
    </context-param>  

4.针对不同的Web.xml的配置方式,请求的路径会产生不同;常常使用第一个配置方式即可。到此配置完毕,切记不可缺少jar。


你可能感兴趣的:(eclipse,S,webservces)