So easy Webservice 8.spring整合CXF 发布WS
1.添加jar包(cxf的jar包中包含了spring的jar包),添加spring配置文件
2.web.xml中配置CXFServlet,过滤WS服务的地址
<!-- 配置CXFServlet,实现地址过滤的功能,项目启动时实例化 -->
<servlet>
<servlet-name>cxfServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>csfServlet</servlet-name>
<!-- 访问 http://localhost:8080/工程名/ws/ 下的所有请求,都会交给当前servlet过滤 -->
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
<!-- 由于上面的url-pattern中配置了过滤路径,所有ws服务地址应配置为:http://localhost:8080/工程名/ws/xxxService -->
3.配置applicationContext.xml
3.1 web.xml中配置spring监听器,在项目启动时加载spring配置文件
<!-- 配置监听器:加载spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.2 添加ws服务实现类(必须添加注解@WebService),在spring中配置服务实现类的bean
import java.util.ArrayList;
import java.util.List; import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; @WebService(
serviceName="UserService",
name="user",
portName="UserServicePort",
targetNamespace="com.mlxs.ws.cxfws.spring"
)
public class UserServiceImpl { private static List<User> ulist = new ArrayList<User>(); @WebMethod(operationName="add")
public void add(@WebParam(name="u") User u) {
ulist.add(u);
} @WebMethod(operationName="query")
//@WebResult 如果是集合,指定的是集合中存放的对象名称
public @WebResult(name="user") List<User> query() {
return ulist;
} }
<bean id="userService" class="com.mlxs.ws.cxfws.spring.UserServiceImpl"/>
3.3 添加jaxws标签
在cxf.jar中,找到/schemas/jaxws.xsd,再查找命名空间:targetNamespace="http://cxf.apache.org/jaxws",将内容复制到spring文件中:
xmlns:jaxws="http://cxf.apache.org/jaxws"
再在xsi:schemaLocation中添加(别名 实际地址):
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
3.4 配置CXF, 把服务实现类bean配置发布成WS服务 ;
address="/user"中不用配置前缀,ws地址在web.xml中servlet的配置的:http://localhost:8080/工程名/ws/user;
配置日志;
<jaxws:server address="/user">
<jaxws:serviceBean>
<ref bean="userService"/>
</jaxws:serviceBean>
<!-- 配置日志 -->
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
</jaxws:outInterceptors>
</jaxws:server>
4.部署到tomcat,启动服务,使用浏览器访问http://localhost:8080/webservice_cxf_server/ws/user?WSDL
<wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="com.mlxs.ws.cxfws.spring" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService" targetNamespace="com.mlxs.ws.cxfws.spring">
<wsdl:types>
<xs:schema xmlns:tns="com.mlxs.ws.cxfws.spring" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="com.mlxs.ws.cxfws.spring" version="1.0">
<xs:element name="add" type="tns:add"/>
<xs:element name="addResponse" type="tns:addResponse"/>
<xs:element name="query" type="tns:query"/>
<xs:element name="queryResponse" type="tns:queryResponse"/>
<xs:complexType name="query">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="queryResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="user" type="tns:user"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="user">
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="add">
<xs:sequence>
<xs:element minOccurs="0" name="u" type="tns:user"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="addResponse">
<xs:sequence/>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="queryResponse">
<wsdl:part element="tns:queryResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="add">
<wsdl:part element="tns:add" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part element="tns:addResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="query">
<wsdl:part element="tns:query" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="user">
<wsdl:operation name="query">
<wsdl:input message="tns:query" name="query"></wsdl:input>
<wsdl:output message="tns:queryResponse" name="queryResponse"></wsdl:output>
</wsdl:operation>
<wsdl:operation name="add">
<wsdl:input message="tns:add" name="add"></wsdl:input>
<wsdl:output message="tns:addResponse" name="addResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="UserServiceSoapBinding" type="tns:user">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="query">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="query">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="queryResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="add">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="add">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserService">
<wsdl:port binding="tns:UserServiceSoapBinding" name="UserServicePort">
<soap:address location="http://localhost:8080/webservice_cxf_server/ws/user"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
5.使用myeclipse SOAP浏览器浏览:


调用add服务接口添加数据:

查看控制台:
Address: http://localhost:8080/webservice_cxf_server/ws/user
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=utf-8
Headers: {Accept=[application/soap+xml, application/dime, multipart/related, text/*], cache-control=[no-cache], connection=[close], Content-Length=[371], content-type=[text/xml; charset=utf-8], host=[localhost:8080], pragma=[no-cache], SOAPAction=[""], user-agent=[IBM Web Services Explorer]}
Payload: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="com.mlxs.ws.cxfws.spring" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:add>
<u>
<id>1</id>
<name>admin</name>
</u>
</q0:add>
</soapenv:Body>
</soapenv:Envelope>
调用查询服务接口query:

控制台:
----------------------------
ID: 12
Address: http://localhost:8080/webservice_cxf_server/ws/user
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=utf-8
Headers: {Accept=[application/soap+xml, application/dime, multipart/related, text/*], cache-control=[no-cache], connection=[close], Content-Length=[288], content-type=[text/xml; charset=utf-8], host=[localhost:8080], pragma=[no-cache], SOAPAction=[""], user-agent=[IBM Web Services Explorer]}
Payload: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="com.mlxs.ws.cxfws.spring" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:query/>
</soapenv:Body>
</soapenv:Envelope> --------------------------------------
2016-1-28 23:38:35 org.apache.cxf.interceptor.AbstractLoggingInterceptor log
信息: Outbound Message
---------------------------
ID: 12
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:queryResponse xmlns:ns2="com.mlxs.ws.cxfws.spring"><user><id>1</id><name>admin</name></user><user><id>2</id><name>魅力小生</name></user></ns2:queryResponse></soap:Body></soap:Envelope>
--------------------------------------
也可以自己写jsp或者java测试类进行ws服务接口的访问。。。
So easy Webservice 8.spring整合CXF 发布WS的更多相关文章
- Spring整合CXF发布及调用WebService
这几天终于把webService搞定,下面给大家分享一下发布webService和调用webService的方法 添加jar包 (官方下载地址:http://cxf.apache.org/downlo ...
- Spring整合CXF之发布WebService服务
今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...
- Spring整合CXF,发布RSETful 风格WebService(转)
Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Sp ...
- Spring整合CXF,发布RSETful 风格WebService
原文地址:http://www.cnblogs.com/hoojo/archive/2012/07/23/2605219.html 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有 ...
- SpringMVC4整合CXF发布WebService
SpringMVC4整合CXF发布WebService版本:SpringMVC 4.1.6,CXF 3.1.0项目管理:apache-maven-3.3.3 pom.xml <project x ...
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...
- Java WebService 教程系列之 Spring 整合 CXF
Java WebService 教程系列之 Spring 整合 CXF 一.引入 jar 包 <dependency> <groupId>org.apache.cxf</ ...
- Spring集成CXF发布WebService并在客户端调用
Spring集成CXF发布WebService 1.导入jar包 因为官方下载的包里面有其他版本的sprring包,全导入会产生版本冲突,所以去掉spring的部分,然后在项目根目录下新建了一个CXF ...
- Spring整合CXF webservice restful 实例
webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自己对比下就可以了. 用到的基础类 User.java @Xm ...
随机推荐
- 终于有SpringMvc与Struts2的对比啦(转)
本文转自:http://www.itsource.cn/web/news/5/20150318/370.html 目前企业中使用SpringMvc的比例已经远远超过Struts2,那么两者到底有什么区 ...
- 为 Macbook 安装 enca 命令
enca 是个查看.转换编码的开源软件, 地址: http://dl.cihar.com/enca/ 安装的步骤比安装 wget 简单多了: 1.用 wget 获取最新的enca 的 tar.gz 的 ...
- V4L2读取摄像头程序流程【转】
本文转载自:https://my.oschina.net/u/1024767/blog/210801 v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl( ...
- Linux驱动开发 -- 打开dev_dbg() 【转】
转自:http://blog.chinaunix.net/uid-20672559-id-3383042.html linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函 ...
- CSS修改方法
1.在IE中,大部分情况下默认margin = 0px padding = 0px,但在Chrome中需要写明 在css.css文件开头加上(要加在最上面) html,body,ul,ol,li,ta ...
- nginx+tomcat负载均衡+动静分离+redis集中管理session
1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...
- 13、mysql/触发器
1. mysql mysql基础 1)mysql存储结构: 数据库 -> 表 -> 数据 sql语句 2)管理数据库: 增加: create database 数据库 default ...
- JavaEE基础(十八)/集合
1.集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 ...
- php socket通信(tcp/udp)
注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.php后台跑起来的时候 nohup php server.php > /var/tmp/a. ...
- http://www.cnblogs.com/xqin/p/4862849.html
一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...