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


一)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值