1、用jdk自带的webservice不能发布web的服务,也就是不能通过tomcat等服务器发布服务,利用一个webservice框架,也就是CXF可以实现,cxf框架是apache的开源框架,下载页面如下:
2、下载好后,对cxf进行解压,解压后的目录如下:
有时,为了利用cxf框架带的命令(如wsdl2java),还要对cxf进行配置,我在学习的过程中并没有用到,所以并没有配置。cxf框架是依赖Spring框架的,所以cxf的一个缺点就是jar包太多!!
3、创建cxf服务端
1)创建工程如下:
这个工程中,一共包含了三种发布webservice服务的形式,主要体现在cxf-servlet.xml文件中,
2)要通过cxf发布webservice服务,首先要配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>CXF-service</display-name> <!-- 通过上下文参数指定spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:cxf-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 配置CXF的核心Servlet --> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <!-- 通过初始化参数指定cxf配置文件的位置 --> <!-- <init-param> <param-name>config-location</param-name> <param-value>classpath:cxf-servlet.xml</param-value> </init-param> --> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/cxf/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
3)cxf的使用非常方便,主要就是在cxf-servlet.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-3.0.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"> <!-- 引入CXF Bean定义如下,早期的版本中使用 --> <!-- <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> --> <!-- 第一种发布方式:简单发布(没有接口的发布) --> <!-- id:唯一标示 implementor:提供服务的类 address:服务的请求url--> <jaxws:endpoint id="helloService" implementor="com.wang.cxf.service.HelloService" address="/hello"> <!-- 加入请求的消息拦截器 --> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:inInterceptors> <!-- 加入响应的消息拦截器 --> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:outInterceptors> </jaxws:endpoint> <!-- 第二种发布方式:带有接口的发布 --> <!-- id:唯一标示 serviceClass:接口类型 address:服务的请求url--> <jaxws:server id="hiService" serviceClass="com.wang.cxf.i.service.IHiService" address="/hi"> <jaxws:serviceBean> <!-- 服务的实现类 --> <bean class="com.wang.cxf.i.service.HiServiceImpl"></bean> </jaxws:serviceBean> <!-- 加入请求的消息拦截器 --> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:inInterceptors> <!-- 加入响应的消息拦截器 --> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:outInterceptors> </jaxws:server> <!-- 传输实体对象 --> <jaxws:server id="personService" serviceClass="com.wang.cxf.domain.service.IPersonService" address="/person"> <jaxws:serviceBean> <!-- 服务的实现类 --> <bean class="com.wang.cxf.domain.service.PersonServiceImpl"></bean> </jaxws:serviceBean> <!-- 加入请求的消息拦截器 --> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:inInterceptors> <!-- 加入响应的消息拦截器 --> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:outInterceptors> </jaxws:server> </beans>
4) 这里面一共三种形式,不一一举例了,最后会附上源代码,感兴趣的读者可以自行下载,就用传输实体对象为例(也是最常用的),首先创建一个person的pojo,代码如下:
package com.wang.cxf.domain.service; public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
创建服务的接口,代码如下:
package com.wang.cxf.domain.service; import javax.jws.WebService; @WebService public interface IPersonService { public Person getPersonById(int id); }
注意,一定要在发布的接口上写@WebService注解,表明是发布的服务,否则发布不了的,最后是实现类:
package com.wang.cxf.domain.service; public class PersonServiceImpl implements IPersonService { @Override public Person getPersonById(int id) { System.out.println("person id = " + id); Person person = new Person(); person.setId(id); person.setName("tom"); return person; } }
这里要注意的是cxf-servlet.xml中的配置
这两个一定不要写反了。。。
5)下面将工程发布到tomcat上面,测试是否发布成功:
在浏览器上出现下图证明发布成功
4、cxf服务的调用
1)为了调用cxf发布的服务,我们新建文本工程:
2)通过JQuery的ajax实现调用cxf服务,jquery_ws.html文件中的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jquery_ws.html</title> <script type="text/javascript" src="js/jquery-1.6.2.js"></script> <script type="text/javascript"> function sendMsg(){ $.ajax({ url:'http://localhost:8080/CXF-service/cxf/hi', type:'post', dataType:'xml', contentType:'text/xml;charset=utf-8', data:'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.i.cxf.wang.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><q0:sayHi><arg0>wangwang</arg0></q0:sayHi></soapenv:Body></soapenv:Envelope>', success:function(data,status,xhr){ var v = $(data).find('return').eq(0).text(); alert(v); }, error:function(){ alert('error!'); } }); } </script> </head> <body> <input type="button" value="使用jquery的ajax方法调用Webservice服务" onclick="sendMsg();"> </body> </html>
通过在tomcat上发布该工程,测试效果。
注意,必须将这个html文件发布到tomcat(或其他服务器上),否则不能访问cxf发布的服务程序。
2)另一个值得一说的就是,调用有实体对象服务的方式,其实与其他没有实体对象的一样,通过wsimport指令,能够直接将实体对象和其他见过的类、接口一起导出到客户端,这样客户端就能够直接用了。
最后,工程中还有很多细节,都在代码中注释了。在这就不再累赘了,,附上源代码,,,只是源码,工程中并没有jar包,jar包实在太多了,将工程下载后,把cxf框架的lib包中的jar包放到项目中就可以了。。。
下载地址:http://pan.baidu.com/s/1ntCGyOL
相关推荐
CXF提供了丰富的API和工具,使得开发者可以快速构建服务提供者和服务消费者。同时,CXF也集成了多种传输协议,如HTTP、JMS和JBI,增强了其灵活性和可扩展性。 在使用CXF调用Web服务时,通常会经历以下步骤: 1. **...
本教程将深入探讨如何使用CXF框架发布Web服务。 首先,"5-采用CXF框架发布webservice.avi"这个视频很可能详细介绍了使用CXF的基本步骤。发布一个Web服务通常包括以下过程: 1. **环境准备**:确保你的开发环境中...
通过这个项目,开发者不仅可以了解SpringBoot和CXF的基本概念,还能掌握两者如何协同工作,发布和调用Web服务。同时,对于SpringBoot应用的打包、部署和测试也有了一定的认识。这个例子是一个理想的实践项目,对于...
这个“cxf框架实现webservice调用demo”应该是为了演示如何使用CXF来发布和调用Web服务。下面我们将深入探讨CXF框架在实现Web服务中的关键知识点。 1. **CXF简介**: CXF全称CXF Commons eXtensible Framework,它...
3. **创建Web服务**:在CXF中,可以通过注解或XML配置文件定义服务接口和服务实现。例如,可以使用`@WebService`注解标记一个Java类为Web服务接口,并使用`@Path`注解来定义RESTful服务的URL路径。 4. **CXF服务...
**SpringBoot框架** SpringBoot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用...这两个部分可以作为学习和实践SpringBoot发布和消费Web服务的起点,帮助开发者深入理解SpringBoot与CXF的协同工作方式。
【压缩包内容】"webservice[CXF]发布和调用[ 带数据库]demo"这个压缩包很可能包含了以下内容: 1. Java源代码:包括服务接口、实现和数据库访问相关的类。 2. 配置文件:如cxf-servlet.xml用于服务发布和Spring配置...
CXF是一个开源框架,它简化了创建和使用Web服务的过程,支持WS-I(Web Services Interoperability)规范,确保跨平台和跨语言的互操作性。 首先,让我们深入理解CXF的核心概念。CXF允许开发者使用Java编程模型来...
CXF框架是Apache组织开发的一款开源的Web服务框架,它支持SOAP、RESTful等多种Web服务标准,同时也提供了客户端和服务端的实现。在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行...
CXF是一个用于构建和服务导向架构(SOA)应用程序的开源框架。它支持多种Web服务标准,如SOAP、WSDL、WS-Security等,并且提供了JAX-WS和JAX-RS实现。对于客户端调用,CXF允许开发者通过简单API直接与Web服务交互,...
而Apache CXF则是一个强大的Web服务框架,用于创建和消费Web服务。本教程将详细介绍如何利用Spring Boot与CXF进行集成,以发布Web服务并实现用户和密码验证的客户端调用。 首先,我们需要在Spring Boot项目中引入...
总结来说,"webservice天气预报例子cxf实例"是一个展示如何使用Apache CXF创建和使用Web服务的示例,涵盖了Web服务的基本概念、CXF框架的功能,以及如何通过Java编写和调用Web服务接口。这个实例不仅有助于理解Web...
【描述】中提到的“webservice对外发布接口全部源码拿起来就能用”,这表明这是一个关于使用Apache CXF框架创建和发布的Web服务项目。Apache CXF是一个开源的Java框架,主要用于构建和开发Web服务。它支持SOAP、...
2. **定义WebService接口和服务实现**:编写一个Java接口,该接口声明了WebService提供的操作。然后,实现这个接口,添加具体的业务逻辑。接口和实现类都应带有JAXB或JAX-WS相关的注解,如`@WebService`、`@...
在本实战教程中,我们将深入探讨如何在服务器端使用CXF来发布和调用Web服务接口。 ### 1. CXF框架基础 CXF的核心在于其强大的服务引擎,它允许开发者以Java编程模型来定义服务接口,并自动生成相应的服务实现和...
CXF基于JAX-WS(Java API for XML Web Services)标准,提供了一套工具和服务,用于创建服务端和客户端的应用程序。CXF的核心组件包括: - **服务接口和服务实现**:定义Web服务的公共API和服务的具体业务逻辑。 - ...
### 使用CXF发布和调用WebService之HelloWorld入门详解 #### 一、概述 本文将详细介绍如何使用Apache CXF框架来实现一个简单的WebService——HelloWorld示例。此示例不仅适用于初学者理解WebService的基本概念,...
本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...
本教程将详细讲解如何使用Apache CXF框架在Java环境中调用C#编写的Web服务。 **CXF简介** Apache CXF是一个开源的Java框架,用于构建和服务导向架构(SOA)。它支持多种Web服务标准,如SOAP、RESTful API等,同时也...
当我们谈论“使用CXF发布WebService”时,我们实际上是在讨论如何利用Apache CXF框架创建和部署Web服务。Apache CXF是一个开源的Java框架,专门用于构建和消费Web服务,支持多种协议,如SOAP和RESTful。 首先,我们...