- 浏览: 68593 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (49)
- Server (3)
- JavaSE (6)
- Cache (2)
- Web (18)
- Struts1/Struts2 (7)
- Spring (3)
- eclipse/myeclipse (2)
- Linux (1)
- Freemarker/Jsp (3)
- Ibatis (0)
- Hibernate (1)
- Ajax (3)
- webservice (3)
- Exceptions (1)
- Android (7)
- Android permission (1)
- DataBase (0)
- DataBase Sqlite3 (1)
- DataBase Oracle (3)
- sina微博 分享 (1)
- 微博接口 (1)
最新评论
-
trx999:
为什么拿到了key了以后还是看不见地图啊?这是什么情况啊?貌似 ...
android google map key 申请变更[记录] -
wxlgzxx_1988:
achun 写道这个问题其实是http head中的Conte ...
ajax js跨域后乱码原因及解决办法 -
achun:
这个问题其实是http head中的Content-Type没 ...
ajax js跨域后乱码原因及解决办法 -
cmjcmj8080:
...
eclipse优化 -
wxlgzxx_1988:
上下文就是整个应用程序的运行环境,在这个环境里边可以保存一些对 ...
Struts2中OGNL极其用法
首先,新建项目名为cxf_Spring,
拷贝所需jar包至lib目录,CXF和spring整合需要准备如下jar包文件,目录结构的截图如附件中的1.jpg文件: web.xml的配置如下:
然后在src目录中,新建一个applicationContext-server.xml文件,文件内容如下:
下面开始写服务器端代码,实体操作bean的代码如下:
首先定制服务器端的接口,代码如下:
下面编写WebService接口的实现类,代码如下:
注意的是和Spring集成,这里一定要完成接口实现,如果没有接口的话会有错误的。 下面要在applicationContext-server.xml文件中添加如下配置: 下面将项目部署到tomcat,启动tomcat服务器后,在浏览器中请求如下地址: http://localhost:8088/cxf_Spring/users?wsdl
如果你能看到wsdl的xml文件的内容,就说明你成功了,注意的是上面地址的users就是上面xml配置中的address的名称,是一一对应的。
下面编写客户端请求的代码,代码如下: 在main函数中调用WSClientTest()方法,运行后可以在控制台中看到如下信息:
这个server端是通过Spring整合配置的,client端是我们手动访问发布的地址来实现访问。下面我们将Client端也通过Spring配置完成整合。 首先在src下增加applicationContext-client.xml配置文件,文件内容如下:
在客户端UserWSClient类中添加一个Spring实现的方法,请求代码如下: 在main函数中运行 springWsClientTest()方法后,结果如下:
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 加载Spring容器配置 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 设置Spring容器加载配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext**.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- CXF配置 -->
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
package com.wxl.bean;
public class User {
private Integer id;
private String name;
private String email;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "id:" + this.id + " name:" + this.name + " email:" + this.email
+ " address:" + this.address;
}
}
package com.wxl.server.service;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import com.wxl.bean.User;
/**
* 定制客户端请求WebService所需要的接口
*
* @author wangxl
*
*/
@WebService
@SOAPBinding(style = Style.RPC)
public interface IComplexUserService {
public User getUserByName(@WebParam(name = "name")
String name);
public void setUser(User user);
}
package com.wxl.server.service.impl;
import java.util.Date;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import com.wxl.bean.User;
import com.wxl.server.service.IComplexUserService;
@WebService
@SOAPBinding(style = Style.RPC)
@SuppressWarnings("deprecation")
public class ComplexUserServiceImpl implements IComplexUserService {
public User getUserByName(String name) {
User user = new User();
user.setId(new Date().getSeconds());
user.setName(name);
user.setEmail(name + "@yahoo.cn");
user.setAddress("Chian");
return user;
}
public void setUser(User user) {
System.out.println("############Server setUser###########");
System.out.println("setUser:" + user);
}
}
<!-- 注入接口实现类 -->
<bean id="userServiceBean"
class="com.wxl.server.service.impl.ComplexUserServiceImpl" />
<!-- 日志拦截器 -->
<bean id="inMessageInterceptor"
class="org.apache.cxf.interceptor.LoggingInInterceptor">
<constructor-arg value="receive" />
</bean>
<bean id="outLoggingInterceptor"
class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
<!-- 注意下面的address,这里的address的名称就是访问的WebService的name -->
<jaxws:server id="userService"
serviceClass="com.wxl.server.service.IComplexUserService"
address="/users">
<jaxws:serviceBean>
<!-- 要暴露的 bean 的引用 -->
<ref bean="userServiceBean" />
</jaxws:serviceBean>
<jaxws:inInterceptors>
<ref bean="inMessageInterceptor" />
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="outLoggingInterceptor" />
</jaxws:outInterceptors>
</jaxws:server>
package com.wxl.client.test;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.wxl.bean.User;
import com.wxl.server.service.IComplexUserService;
//client端java的实现
public class UserWSClient {
public static void main(String[] args) {
new UserWSClient().WSClientTest();
}
public void WSClientTest() {
// 调用WebService
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(IComplexUserService.class);
factory.setAddress("http://localhost:8088/cxf_Spring/users");
// 添加日志拦截器
factory.getInInterceptors().add(new LoggingInInterceptor());// 请求的
factory.getOutInterceptors().add(new LoggingOutInterceptor());// 发送出去的
IComplexUserService service = (IComplexUserService) factory.create();
System.out.println("#############JAxWs Client getUserByName##############");
User user = service.getUserByName("wxl");
System.out.println(user.toString());
user.setAddress("China-Hangzhou");
service.setUser(user);
}
}
2012-2-28 16:23:12 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.server.wxl.com/}IComplexUserServiceService from class com.wxl.server.service.IComplexUserService
#############JAxWs Client getUserByName##############
2012-2-28 16:23:13 org.apache.cxf.services.IComplexUserServiceService.IComplexUserServicePort.IComplexUserService
信息: Outbound Message
---------------------------
ID: 1
Address: http://localhost:8088/cxf_Spring/users
Encoding: UTF-8
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getUserByName xmlns:ns1="http://service.server.wxl.com/"><name>wxl</name></ns1:getUserByName></soap:Body></soap:Envelope>
--------------------------------------
2012-2-28 16:23:13 org.apache.cxf.services.IComplexUserServiceService.IComplexUserServicePort.IComplexUserService
信息: Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {Content-Length=[302], content-type=[text/xml;charset=UTF-8], Date=[Tue, 28 Feb 2012 08:23:13 GMT], Server=[Apache-Coyote/1.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getUserByNameResponse xmlns:ns1="http://service.server.wxl.com/"><return><address>Chian</address><email>wxl@yahoo.cn</email><id>13</id><name>wxl</name></return></ns1:getUserByNameResponse></soap:Body></soap:Envelope>
--------------------------------------
id:13 name:wxl email:wxl@yahoo.cn address:Chian
2012-2-28 16:23:13 org.apache.cxf.services.IComplexUserServiceService.IComplexUserServicePort.IComplexUserService
信息: Outbound Message
---------------------------
ID: 2
Address: http://localhost:8088/cxf_Spring/users
Encoding: UTF-8
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:setUser xmlns:ns1="http://service.server.wxl.com/"><arg0><address>China-Hangzhou</address><email>wxl@yahoo.cn</email><id>13</id><name>wxl</name></arg0></ns1:setUser></soap:Body></soap:Envelope>
--------------------------------------
2012-2-28 16:23:13 org.apache.cxf.services.IComplexUserServiceService.IComplexUserServicePort.IComplexUserService
信息: Inbound Message
----------------------------
ID: 2
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {Content-Length=[195], content-type=[text/xml;charset=UTF-8], Date=[Tue, 28 Feb 2012 08:23:13 GMT], Server=[Apache-Coyote/1.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:setUserResponse xmlns:ns1="http://service.server.wxl.com/"></ns1:setUserResponse></soap:Body></soap:Envelope>
--------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<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" />
<!-- client端的spring实现 -->
<jaxws:client id="userWsClient"
serviceClass="com.wxl.server.service.IComplexUserService"
address="http://localhost:8088/cxf_Spring/users">
</jaxws:client>
</beans>
public void springWsClientTest() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext-client.xml");
IComplexUserService service = ctx.getBean("userWsClient",
IComplexUserService.class);
System.out
.println("#############Spring Client getUserByName##############");
User user = service.getUserByName("wxl");
System.out.println(user.toString());
user.setAddress("China-Hangzhou");
service.setUser(user);
}
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
2012-2-28 16:25:20 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.server.wxl.com/}IComplexUserServiceService from class com.wxl.server.service.IComplexUserService
#############Spring Client getUserByName##############
id:20 name:wxl email:wxl@yahoo.cn address:Chian
发表评论
-
Struts1.x Spring2.x Hibernate3.x DWR2.x整合笔记
2012-05-07 23:25 1000Struts1.x Spring2.x H ... -
HttpClient连接SSL
2012-02-08 15:33 36751.生成keystore 打开cmd, ... -
HttpClient基本功能使用(结合Struts2传参)
2012-02-07 17:49 4430HttpClient基本功能的使用 a) 环境准 ... -
HttpClient学习笔记
2012-02-02 15:51 2241HTTP 协议可能是现在 Internet 上使用得 ... -
Java类初始化顺序学习笔记
2011-12-22 16:54 936一,单个类的初始化 对于静态变量、 ... -
JDBC连接数据库的各种配置
2011-12-20 12:45 9371 将数据库的JDBC驱动加载到classpath中,在基于J ... -
Java程序开发中的简单内存分析
2011-12-16 17:13 861在Java开发过程中,对内存进行分析是十分重要的 ... -
Java线程池的原理与实现
2011-11-27 01:54 777简单介绍 创 ... -
Spring定时器用法
2011-08-17 13:45 1001Spring定时器用法 步骤一:定义JOB类,实现org.s ...
相关推荐
标题"webservice(cxf)与spring整合源码+文档"表明这是一个关于如何将CXF Web服务与Spring框架集成的学习资源。文档和源代码一起提供,使得学习者能够通过实践来理解这一过程。 描述中提到"webservice与spring整合...
CXF与Spring的集成是常见的实践,这使得服务的生命周期管理、依赖注入等变得更加便捷。通过Spring配置文件可以声明CXF服务 bean,同时也可以利用Spring的事务管理、数据访问等功能。 本学习笔记将继续深入探讨CXF的...
在IT行业中,CXF是一个广泛使用的开源框架,用于构建和服务导向架构...通过这种方式,可以更加专注于业务逻辑,减少与基础设施相关的繁琐工作。对于开发者而言,熟悉这种结合方式对于提升开发效率和维护性至关重要。
然后,当你开始使用CXF和Spring整合时,你将学习如何在Spring配置文件中声明和配置CXF服务,以及如何将服务接口实现类注入到Spring容器中。此外,你还会了解到如何通过CXF的端点发布功能将服务暴露出来,以及如何...
4. **Spring集成**:CXF与Spring框架的良好集成,使得服务的配置和管理更加灵活。 5. **安全性**:学习如何实现WS-Security和其他安全策略,确保Web服务的安全通信。 在深入学习这两个框架时,你可能还会关注如何...
- **CXF与Spring集成例子**:CXF可以方便地与Spring框架集成,利用Spring的依赖注入特性,实现服务的松耦合和灵活配置。这包括在Spring配置文件中声明CXF服务和客户端,以及利用Spring的AOP功能进行事务管理等。 ...
Spring框架与CXF的集成使得服务的生命周期管理更加方便。你可以将CXF服务定义为Spring Bean,并利用Spring的依赖注入特性。此外,Spring还提供了AOP(面向切面编程)功能,可以用来处理服务的事务、安全等跨切面关注...
本文将深入探讨如何整合Spring Boot与CXF,以便利用Spring Boot的便捷性和CXF的强大Web服务功能。我们将通过源码分析,了解整合过程中的关键步骤和核心配置。 首先,Spring Boot是Spring框架的一种快速开发工具,它...
有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的...
本篇CXF学习笔记详细介绍了使用CXF框架结合Spring框架发布Web服务的基本流程和技术要点。从简单的Hello World示例入手,逐步深入到复杂的数据类型处理、大数据传输以及安全性保障等方面。通过这些实践案例的学习,...
### Apache CXF 学习笔记知识点汇总 #### 一、CXF简介 ##### 1.1 CXF概述 - **背景介绍**:Apache CXF 是一个高性能、功能丰富的开源框架,用于构建和消费 Web 服务。它融合了 Celtix 和 XFire 两个开源项目的...
2. **CXF与Spring的集成** "CXF+SPRING.doc"可能介绍了如何将Apache CXF与Spring框架结合使用。Spring框架在企业级Java应用中广泛应用,它可以提供依赖注入、AOP(面向切面编程)等功能。通过集成,开发者可以利用...
本笔记将探讨CXF的基本概念、如何使用CXF构建Webservice以及与之相关的技术栈,如Spring、Struts2等。 1. **CXF简介** - CXF(CXF Xfire + XWS)是两个项目的合并,提供了SOAP、RESTful、XML/HTTP、WS-*等协议的...
【CXF笔记】是关于Apache CXF框架的深入学习记录,该笔记可能涵盖了CXF的基本概念、使用方法、源码解析以及与开发工具的结合应用。Apache CXF是一个开源服务框架,它允许开发者构建和部署多种Web服务。通过CXF,我们...
- **部署服务**:使用CXF的Servlet或Spring整合来部署服务。 - **创建客户端**:使用CXF的工具,如wsimport,生成客户端代理类,并调用服务。 4. **SOAP与RESTful的区别**: - SOAP是基于XML的消息协议,主要...