- 浏览: 514667 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:http://kyfxbl.iteye.com/blog/1633162
webservice http://kyfxbl.iteye.com/category/213780
评:
上次总结了spring集成cxf的方法,不过有些地方说得不清楚:http://kyfxbl.iteye.com/category/213780
上次把web service客户端接口,用注解注入到别的bean里,结果报错了。当时一直没有找到原因,现在回想,有可能是当时代码环境的问题,spring和cxf的配置都有些混乱
最近在搭建一个培训的框架,开发环境很纯净,上次那个问题没有再发生了。因此也简化了一下,重新总结一下。不过由于上次那个问题,最终也没找到原因,所以不敢保证这次也一定是正确的,只能说,在以下环境是OK的:
tomcat7.0.29
spring-framework-3.1.0
cxf-2.6.1
neethi-3.0.2
wsdl4j-1.6.2
xmlschema-core-2.0.2
本文介绍的是从代码到wsdl文件的写法,如果是从wsdl到代码,可以看另一篇博客:http://kyfxbl.iteye.com/blog/1481330
首先是web.xml
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>DevelopFramework</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
这里因为没有集成spring-mvc,所以web.xml就很简单
然后是spring的配置文件
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:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<context:component-scan base-package="com.huawei.inoc.framework" />
<jaxws:endpoint id="helloWorld" implementor="#helloWorldWebserviceImpl" address="/HelloWorld" />
<jaxws:client id="client"
serviceClass="com.huawei.inoc.dummy.webservice.IDemoSupport"
address="http://localhost:8080/Dummy/webservice/getDate" />
</beans>
这里是简化后的配置,仅包含必要的配置信息
这里分别配置了一个web service的客户端,和一个web service的服务端
这里要注意的是,jaxws:endpoint里的implementor,不能直接写xxx.xxx.ClassName,因为这里的实现类,自身也是一个bean,如果直接写的话,里面的依赖关系就没有了,要用#beanName的语法
jaxws:client里的serviceClass,写的是接口的完整类名,address是目标endpoint的地址
接下来是要发布的webservice接口代码
Java代码 收藏代码
@WebService
public interface HelloWorldWebservice {
String sayHello(String name);
}
就是一个普通的接口声明,只是要加上@WebService注解
最后是webservice实现类代码
Java代码 收藏代码
@Controller
public class HelloWorldWebserviceImpl implements HelloWorldWebservice {
@Autowired
private ITestService service;
@Autowired
private IDemoSupport support;
@Override
public String sayHello(String name) {
service.doSomething();
System.out.println(support.getDate());
return "hello " + name;
}
}
实现类更加简单,只需要继承刚才声明的接口就可以了,不需要额外的注解
这里用到了@Controller和@Autowired注解,只是为了演示把实现类自身声明为spring bean,并把下层的业务bean,和webservice client的bean注入进来
启动tomcat后,webservice就发布成功了,并且ITestService和IDemoSupport都是注入成功的
[点击查看原始大小图片]
用soapui调用一下,控制台打出如下信息:
doSomething()
Wed Aug 15 17:12:50 CST 2012
说明此时业务bean和client bean都是注入成功的。上次死活就不行,估计确实是代码环境的原因,现在也没法还原现场了,成为悬案
另外写了一个Servlet,看看当前的ApplicationContext里究竟注册了哪些bean
Java代码 收藏代码
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(request.getServletContext());
String[] beanNames = context.getBeanDefinitionNames();
for (String beanName : beanNames) {
System.out.println(beanName);
}
}
执行之后,控制台打出bean信息:
cxf
org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor
org.apache.cxf.bus.spring.Jsr250BeanPostProcessor
org.apache.cxf.bus.spring.BusExtensionPostProcessor
testService
helloWorldWebserviceImpl
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalPersistenceAnnotationProcessor
propertyConfigurer
dataSource
sessionFactory
helloWorld
client.proxyFactory
client
org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0
前4个都是cxf.xml里注册的
testService是业务bean
helloWorldWebserviceImpl是webservice实现类的bean,注意这个只是一个普通的spring bean,还没有被发布为web service,下面的helloWorld才是
helloWorld,就是<jaxws:endpoint>那行生成的bean,实际的web service
client,是<jaxws:client>那行生成的bean。这个类是cxf生成的代理类,但是实现了web service服务端接口。代码不可见,但是可以像普通的spring bean一样注入到别的bean里
Java代码 收藏代码
Object clientProxyFactory = context.getBean("client");
System.out
.println("client: " + clientProxyFactory.getClass().getName());
System.out.println(clientProxyFactory instanceof IDemoSupport);
执行以后,输出是:
client: $Proxy42
true
如果跟进去调试,可以看得更清楚一点:
client.proxyFactory应该是cxf生成的一个内部bean,bean definition是abstract的,如果尝试用getBean()方法获取,会抛出异常
Java代码 收藏代码
Object clientProxyFactory = context.getBean("client.proxyFactory");
org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name 'client.proxyFactory': Bean definition is abstract
webservice http://kyfxbl.iteye.com/category/213780
评:
上次总结了spring集成cxf的方法,不过有些地方说得不清楚:http://kyfxbl.iteye.com/category/213780
上次把web service客户端接口,用注解注入到别的bean里,结果报错了。当时一直没有找到原因,现在回想,有可能是当时代码环境的问题,spring和cxf的配置都有些混乱
最近在搭建一个培训的框架,开发环境很纯净,上次那个问题没有再发生了。因此也简化了一下,重新总结一下。不过由于上次那个问题,最终也没找到原因,所以不敢保证这次也一定是正确的,只能说,在以下环境是OK的:
tomcat7.0.29
spring-framework-3.1.0
cxf-2.6.1
neethi-3.0.2
wsdl4j-1.6.2
xmlschema-core-2.0.2
本文介绍的是从代码到wsdl文件的写法,如果是从wsdl到代码,可以看另一篇博客:http://kyfxbl.iteye.com/blog/1481330
首先是web.xml
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>DevelopFramework</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
这里因为没有集成spring-mvc,所以web.xml就很简单
然后是spring的配置文件
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:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<context:component-scan base-package="com.huawei.inoc.framework" />
<jaxws:endpoint id="helloWorld" implementor="#helloWorldWebserviceImpl" address="/HelloWorld" />
<jaxws:client id="client"
serviceClass="com.huawei.inoc.dummy.webservice.IDemoSupport"
address="http://localhost:8080/Dummy/webservice/getDate" />
</beans>
这里是简化后的配置,仅包含必要的配置信息
这里分别配置了一个web service的客户端,和一个web service的服务端
这里要注意的是,jaxws:endpoint里的implementor,不能直接写xxx.xxx.ClassName,因为这里的实现类,自身也是一个bean,如果直接写的话,里面的依赖关系就没有了,要用#beanName的语法
jaxws:client里的serviceClass,写的是接口的完整类名,address是目标endpoint的地址
接下来是要发布的webservice接口代码
Java代码 收藏代码
@WebService
public interface HelloWorldWebservice {
String sayHello(String name);
}
就是一个普通的接口声明,只是要加上@WebService注解
最后是webservice实现类代码
Java代码 收藏代码
@Controller
public class HelloWorldWebserviceImpl implements HelloWorldWebservice {
@Autowired
private ITestService service;
@Autowired
private IDemoSupport support;
@Override
public String sayHello(String name) {
service.doSomething();
System.out.println(support.getDate());
return "hello " + name;
}
}
实现类更加简单,只需要继承刚才声明的接口就可以了,不需要额外的注解
这里用到了@Controller和@Autowired注解,只是为了演示把实现类自身声明为spring bean,并把下层的业务bean,和webservice client的bean注入进来
启动tomcat后,webservice就发布成功了,并且ITestService和IDemoSupport都是注入成功的
[点击查看原始大小图片]
用soapui调用一下,控制台打出如下信息:
doSomething()
Wed Aug 15 17:12:50 CST 2012
说明此时业务bean和client bean都是注入成功的。上次死活就不行,估计确实是代码环境的原因,现在也没法还原现场了,成为悬案
另外写了一个Servlet,看看当前的ApplicationContext里究竟注册了哪些bean
Java代码 收藏代码
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(request.getServletContext());
String[] beanNames = context.getBeanDefinitionNames();
for (String beanName : beanNames) {
System.out.println(beanName);
}
}
执行之后,控制台打出bean信息:
cxf
org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor
org.apache.cxf.bus.spring.Jsr250BeanPostProcessor
org.apache.cxf.bus.spring.BusExtensionPostProcessor
testService
helloWorldWebserviceImpl
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalPersistenceAnnotationProcessor
propertyConfigurer
dataSource
sessionFactory
helloWorld
client.proxyFactory
client
org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0
前4个都是cxf.xml里注册的
testService是业务bean
helloWorldWebserviceImpl是webservice实现类的bean,注意这个只是一个普通的spring bean,还没有被发布为web service,下面的helloWorld才是
helloWorld,就是<jaxws:endpoint>那行生成的bean,实际的web service
client,是<jaxws:client>那行生成的bean。这个类是cxf生成的代理类,但是实现了web service服务端接口。代码不可见,但是可以像普通的spring bean一样注入到别的bean里
Java代码 收藏代码
Object clientProxyFactory = context.getBean("client");
System.out
.println("client: " + clientProxyFactory.getClass().getName());
System.out.println(clientProxyFactory instanceof IDemoSupport);
执行以后,输出是:
client: $Proxy42
true
如果跟进去调试,可以看得更清楚一点:
client.proxyFactory应该是cxf生成的一个内部bean,bean definition是abstract的,如果尝试用getBean()方法获取,会抛出异常
Java代码 收藏代码
Object clientProxyFactory = context.getBean("client.proxyFactory");
org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name 'client.proxyFactory': Bean definition is abstract
发表评论
-
Axis1.x WebService开发指南—目录索引
2015-11-30 15:54 641源:http://www.cnblogs.com/hoojo/ ... -
CXF WebService整合Spring
2015-11-30 15:50 503源:http://www.cnblogs.com/hoojo/ ... -
几种常用的webservice客户端和spring集成的方法
2015-11-30 15:47 562源:http://my.oschina.net/zimingf ... -
如何使用webservice
2015-04-09 15:47 5281:到http://cxf.apache.org/downlo ... -
webservice例子
2015-03-13 15:58 4081:到http://cxf.apache.org/downlo ... -
Java RMI与RPC,JMS的比较
2014-12-09 21:38 647源:http://blog.csdn.net/keda8997 ... -
用cxf生成的方式,开发web service应用
2014-12-08 17:49 448源:http://kyfxbl.iteye.com/blog/ ... -
用cxf发布和调用web service
2014-12-08 17:48 412源:http://kyfxbl.iteye.com/b ... -
cxf和spring mvc的集成
2014-12-08 17:46 741源:http://kyfxbl.iteye.com/blog/ ... -
webservice 客户端生成命令
2014-10-21 17:48 372wsdl2java -frontend jaxws21 -c ...
相关推荐
CXF集成了Spring框架,使得构建和管理Web服务变得更加简便和灵活。本篇将深入探讨CXF与Spring的集成,以及如何通过它们来发布一个WebSocket服务的代码实例。 首先,我们了解CXF的核心功能。CXF提供了SOAP和RESTful...
Cxf集成Spring的WebService接口的配置文档
总之,通过将CXF与Spring框架集成,我们可以利用Spring的强大功能来管理和配置服务,同时利用CXF的灵活性来快速开发RESTful接口。这种组合为Java开发者提供了一个高效且可扩展的解决方案,用于构建现代化的、基于...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF和Spring都是Java生态系统中的关键组件。本文将深入探讨如何将CXF与Spring框架整合,以构建高效且灵活的Web服务解决方案。 首先,让我们了解CXF。...
【CXF集成Spring Hibernate】是将三个核心的Java技术——CXF、Spring和Hibernate整合到一个应用程序中的实践。这样的集成可以构建出强大的企业级服务,其中CXF用于提供Web服务,Spring作为应用的管理和依赖注入容器...
这个"apache-cxf集成spring基本包"是用于将Apache CXF与Spring MVC框架结合使用的必要组件。Spring MVC是Spring框架的一部分,它为构建Web应用程序提供了一种模型-视图-控制器(MVC)结构。通过集成CXF,开发者可以...
- **cxfConnection**:这个名字暗示这可能是一个关于CXF连接配置的文件,可能包含了CXF与Spring集成的具体配置,例如服务的URL、认证信息、传输协议等。 - **cxfConsumer**:此文件名可能指的是CXF消费者,即...
自己总结的一个CXF集成Spring的例子,可以直接运行,附源码! 程序的详细说明请参照博客文档 http://blog.csdn.net/sunbaojin5213344/article/details/8931600
在【压缩包子文件的文件名称列表】中,"cxf-spring"可能包含的是用于集成CXF与Spring的必要jar包,如cxf-spring-integration.jar,这个文件通常包含了CXF与Spring集成所需的类和资源,使得开发者能够在Spring环境下...
在本文中,我们将深入探讨如何将Apache CXF与Spring框架集成,通过具体的Java代码实例来阐述这一过程。CXF是一个开源服务框架,它允许开发者创建和消费Web服务,而Spring框架则是一个强大的应用开发框架,提供了依赖...
Spring还提供了一个强大的集成环境,可以方便地与其他框架和库进行整合,包括CXF。 将CXF与Spring整合的主要目的是利用Spring的管理能力来配置和控制CXF组件,例如服务端点、客户端代理等。这样可以实现更细粒度的...
8. **集成测试**:利用Spring Test和CXF的模拟测试工具,可以方便地进行Web服务的单元测试和集成测试。 9. **性能优化**:可以通过调整CXF的配置,例如缓存策略、线程池大小等,优化Web服务的性能。 10. **监控与...
同时,Spring的事务管理可以与CXF服务无缝集成,确保服务操作的事务一致性。 4. jar包解析: 压缩包中的jar文件可能包括了CXF的核心库、Spring框架的核心库、以及它们之间的适配器和依赖。例如: - CXF的相关jar...
【标题】"cxf集成spring"涉及的知识点主要围绕着两个关键组件——Apache CXF和Spring框架的整合。Apache CXF是一个开源服务框架,它允许开发者创建和消费各种Web服务,而Spring则是一个广泛使用的Java企业级应用开发...
【标题】"CXF+Spring 完整版例子"是一个示例项目,它演示了如何在Spring框架中集成Apache CXF来构建一个完整的Web服务应用。Apache CXF是一个开源服务框架,它允许开发者创建和消费各种不同类型的Web服务,包括SOAP...
现在,我们将深入探讨如何将CXF与Spring集成,以构建高效、灵活的Web服务。 首先,让我们理解CXF的核心特性。CXF支持多种Web服务规范,如SOAP、RESTful以及WS-*家族,如WS-Security、WS-ReliableMessaging等。它还...
在与Spring框架集成时,Apache CXF能够利用Spring的强大功能来管理服务的生命周期和依赖注入,使得Web服务的开发更加便捷和灵活。集成过程涉及以下几个关键步骤: 1. **环境准备**:确保使用合适的开发环境,例如...
2. **CXF的Spring支持**:CXF提供了对Spring的深度集成,可以通过Spring的XML配置或注解来定义和管理Web服务。例如,使用`<jaxws:endpoint>`标签创建一个基于JAX-WS的服务端点,或者使用`<jaxrs:server>`创建基于JAX...
在企业级应用开发中,Apache CXF 和 Spring 框架的整合是非常常见的,因为它们分别提供了强大的服务端和客户端的 Web 服务支持以及灵活的依赖注入和配置管理。本教程将详细介绍如何将 CXF 与 Spring 整合,帮助...