webService学习记录-关于web项目配置的几点说明

来源:互联网 发布:管家婆软件创业版 编辑:程序博客网 时间:2024/05/18 03:24


一)

Java项目代码调用服务:

注意,此处所说的是在Java项目中调用Spring的服务,并不是在JavaEE项目中调用

使用纯Java项目调用方法
1、根据客户端生成的代码来调用。(优选这种方式)
      请先生成然后在任意的Java项目中调用 。
2、客户端只拥有一个接口,使用JaxWsProxyFactoryBean来调用。
•因为以下使用了JaxWsProxyFactoryBean,所以,仍然需要CXF的环境,而使用此环境就会造成Jar文件的大量冗余,所以大家要谨慎选择。

二)

Spring项目中,通过配置文件调用:
以下是使用Spring的配置文件调用:
1.新建立一个Java项目,并加载cxf的所有包。
2.只需要生成的接口文件。
利用wsdl2java命令生产代码,我们只需要一个接口文件,命令:wsdl2java -d . http://localhost:8080/CXF_3/cxf/hi?wsdl;
只把接口类拷贝到客户端代码中即可,把出错的地方删掉即可。如将生成的接口IHiService类拷贝到项目中,
package cn.itcast.cxf;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.bind.annotation.XmlSeeAlso;import javax.xml.ws.RequestWrapper;import javax.xml.ws.ResponseWrapper;import com.cxf.client.ObjectFactory;/** * This class was generated by Apache CXF 2.4.2 * 2015-08-20T15:15:00.693+08:00 * Generated source version: 2.4.2 *  */@WebService(targetNamespace = "http://cxf.itcast.cn/", name = "IHiService")@XmlSeeAlso({ObjectFactory.class})public interface IHiService {    @WebResult(name = "return", targetNamespace = "")    @RequestWrapper(localName = "sayHi", targetNamespace = "http://cxf.itcast.cn/", className = "cn.itcast.cxf.SayHi")    @WebMethod    @ResponseWrapper(localName = "sayHiResponse", targetNamespace = "http://cxf.itcast.cn/", className = "cn.itcast.cxf.SayHiResponse")    public java.lang.String sayHi(        @WebParam(name = "arg0", targetNamespace = "")        java.lang.String arg0    );}


3.在classpath下新建立一个ClientBeans.xml文件.
创建ClientBeans.xml文件,文件名可以随便取,例如:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans.xsd            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">                        <!-- id:唯一性标示  address:请求的服务地址(不是发布的服务地址) serviceClass:依赖额接口类 --><jaxws:client id = "hiService" address = "http://localhost:8080/CXF_3/cxf/hi"               serviceClass = "cn.itcast.cxf.IHiService"></jaxws:client></beans>

4.创建App类,访问服务:
package cn.itcast.cxf;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * 通过spring配置文件的方式调用webService服务 * @author wangz_ing * */public class App {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext("cn/itcast/cxf/ClientBean.xml");IHiService s = (IHiService) cxt.getBean("hiService");String ret = s.sayHi("aa");System.out.println(ret);}}


优点与缺点:
•此种情况,适合于一个Javaweb项目已经集成了Spring。并希望通过CXF配置的方式调用Web服务。
•此种情况,仍然需要导入CXF的大量jar包。
•这种情况也存在一定人优点,如可以将外部的Web服务通过配置文件注入(DI)到Action类中。




关于web项目配置的说明1
l如果在项目中仅发布webservice,则可以只配置以下内容。
l同时默认即是读取WEB-INF/cxf-servlet.xml文件,所以是否指定都可以。

l但一般情况下,一个web项目,在使用了Spring之后,往往会通过ApplicationContext获取一些服务,此时则必须注册Spring的监听器。即以下代码:

下面为一个完整的web.xml文件
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>  /WEB-INF/cxf-itcast.xml  </param-value>  </context-param>  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <servlet>  <servlet-name>cxf</servlet-name>  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>  <servlet-name>cxf</servlet-name>  <url-pattern>/ws/*</url-pattern>  </servlet-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

l在上页中出现的重复引入问题,可以修改cxf-servlet.xml文件。
l修改后,CXFServlet类将不能自动加载cxf-servlet.xml文件,此时将导致名为cxfbean加载不成功。
l为解决此问题必须在重新命名的配置文件中加入以下代码,以启动CXF

即:如果你是用contextConfigLocation加载的配置文件,则必须要加入以下代码。

 <!--关于cxf配置的注意事项

   如果没有提供给cxf默认的/WEB-INF/cxf-servlet.xml配置文件,则必须要在spring的配置文件

   中配置以下三行配置。否则将不能加载名称为cxfbean.从而启动失败。

   -->

  <import resource="classpath:META-INF/cxf/cxf.xml"/><importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/><importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>



0 0