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文件,此时将导致名为cxf的bean加载不成功。
l为解决此问题必须在重新命名的配置文件中加入以下代码,以启动CXF:
即:如果你是用contextConfigLocation加载的配置文件,则必须要加入以下代码。
<!--关于cxf配置的注意事项
如果没有提供给cxf默认的/WEB-INF/cxf-servlet.xml配置文件,则必须要在spring的配置文件
中配置以下三行配置。否则将不能加载名称为cxf的bean.从而启动失败。
-->
<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
- webService学习记录-关于web项目配置的几点说明
- 关于移动Web开发的几点记录
- 关于const reference的几点说明
- 关于Gtalk的几点说明
- 关于String的几点说明
- 关于const的几点说明
- 关于招聘的几点说明
- 关于String类的几点说明
- 关于"引用"的几点说明
- 关于Android线程的几点说明
- 关于Android线程的几点说明
- 关于fragment 嵌套的几点说明
- 关于输入输出函数的几点说明
- 关于WebConfig文件的几点说明
- 关于ArrayList的几点说明
- 关于NSTimer的几点说明
- 关于"引用"的几点说明
- 关于开博客的几点说明
- Hadoop之文件系统Shell
- Maven学习总结(八)——使用Maven构建多模块项目
- 桃7
- BZOJ 4245 ONTAK2015 OR-XOR
- 黑马程序员-OC关于类的练习题
- webService学习记录-关于web项目配置的几点说明
- JavaScipt练习<filter()>
- Linux 下 gcc 与 g++的差别
- iphone手机上的抓包流程和原理概述
- Android Call requires API level 11 (current min is 8)的解决方案
- POJ-2676-Sudoku-DFS
- Maven学习总结(九)——使用Nexus搭建Maven私服
- setInterval()和setTimeout()
- ORA-12519, TNS:no appropriate service handler found