- 浏览: 1858087 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (665)
- 闲话 (17)
- ruby (1)
- javascript (40)
- linux (7)
- android (22)
- 开发过程 (11)
- 哥也读读源代码 (13)
- JVM (1)
- ant (2)
- Hibernate (3)
- jboss (3)
- web service (17)
- https (4)
- java基础 (17)
- spring (7)
- servlet (3)
- 杂记 (39)
- struts2 (10)
- logback (4)
- 多线程 (2)
- 系统诊断 (9)
- UI (4)
- json (2)
- Java EE (7)
- eclipse相关 (4)
- JMS (1)
- maven (19)
- 版本管理 (7)
- sso (1)
- ci (1)
- 设计 (18)
- 戒烟 (4)
- http (9)
- 计划 (4)
- HTML5 (3)
- chrome extensions (5)
- tomcat源码阅读 (4)
- httpd (5)
- MongoDB (3)
- node (2)
最新评论
-
levin_china:
勾选了,还是找不到
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
我用的maven-3.5.0,还没有遇到这种情况,使用jar ...
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
受益匪浅,从组织项目结构,到技术细节,讲的很到位,只是博主不再 ...
一个多maven项目聚合的实例 -
Aaron-Joe-William:
<?xml version="1.0" ...
hibernate逆向工程 -
li272355201:
http://archive.apache.org/dist/ ...
tomcat源码阅读(一)——环境搭建
上次总结了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
这里因为没有集成spring-mvc,所以web.xml就很简单
然后是spring的配置文件
这里是简化后的配置,仅包含必要的配置信息
这里分别配置了一个web service的客户端,和一个web service的服务端
这里要注意的是,jaxws:endpoint里的implementor,不能直接写xxx.xxx.ClassName,因为这里的实现类,自身也是一个bean,如果直接写的话,里面的依赖关系就没有了,要用#beanName的语法
jaxws:client里的serviceClass,写的是接口的完整类名,address是目标endpoint的地址
接下来是要发布的webservice接口代码
就是一个普通的接口声明,只是要加上@WebService注解
最后是webservice实现类代码
实现类更加简单,只需要继承刚才声明的接口就可以了,不需要额外的注解
这里用到了@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
执行之后,控制台打出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里
执行以后,输出是:
client: $Proxy42
true
如果跟进去调试,可以看得更清楚一点:
client.proxyFactory应该是cxf生成的一个内部bean,bean definition是abstract的,如果尝试用getBean()方法获取,会抛出异常
org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name 'client.proxyFactory': Bean definition is abstract
上次把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 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 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接口代码
@WebService public interface HelloWorldWebservice { String sayHello(String name); }
就是一个普通的接口声明,只是要加上@WebService注解
最后是webservice实现类代码
@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
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里
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()方法获取,会抛出异常
Object clientProxyFactory = context.getBean("client.proxyFactory");
org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name 'client.proxyFactory': Bean definition is abstract
发表评论
-
XML-RPC与web service
2013-06-05 12:44 2182前段时间公司的办公环 ... -
替换证书,造成bad_certificate
2012-05-14 21:47 5396系统调用外部的web service,走https方式,今天测 ... -
cxf配置http:conduit
2012-05-08 20:16 10922本次项目要通过https方式,调用外部的web service ... -
cxf生成endpoint,使用soap1.1和soap1.2
2012-04-25 23:31 3149开发了一个web service服务,客户居然不认,查看客户发 ... -
cxf配置方式实现日志和https请求
2012-04-21 01:21 7892这篇博客介绍一下怎么通过配置方式配置https和cxf的日志功 ... -
一次艰难的web service对接开发
2012-04-19 23:10 3767这次的需求是将我们的系统与一个客户系统对接,对接的方式是通过w ... -
根据已有的wsdl,开发web service的服务端和客户端
2012-04-11 23:13 18199折腾了好长时间,今天终于把这次web service对接的需求 ... -
用cxf生成的方式,开发web service应用
2012-04-09 23:08 9870这次开发web service对接,用的是cxf2.0.13 ... -
cxf和spring集成的一些事
2012-03-30 20:31 6443环境: cxf-2.1.3,jdk6,jboss7.0.2,s ... -
解决cxf的jar包冲突
2012-03-28 20:23 15961本次做web service开发,遇到了一些问题,最终解决了, ... -
用soapUI调试web service
2012-03-27 21:00 3057用soapUI调试web service是很方便的,可以省掉自 ... -
对web service和cxf的个人理解
2012-02-29 23:59 1879个人理解很粗浅,只是谈谈感受,希望能抛砖引玉。就从本次项目的实 ... -
用cxf发布和调用web service
2012-02-29 23:03 18082最近我们的系统需要和一个第三方系统对接,对接的方式是通过web ... -
cxf和spring mvc的集成
2012-02-29 22:27 17879Spring MVC是通过DispatcherServlet来 ... -
我个人理解的什么是web service
2012-01-05 20:26 1846有一些乱七八糟的想法,还不成章法,先记录下来,以后再回头看看 ... -
关于B/S和C/S的想法,兼谈web service
2011-08-24 20:31 3208最近做的这个项目,是 ...
相关推荐
通过提供的"**cxf集成spring_jar**"压缩包,你可以直接获取到精简版的CXF和Spring库,省去了自行下载和管理依赖的步骤,从而更快速地搭建和运行集成环境。请注意,实际使用时应根据项目的具体需求,适当调整配置和...
在“cxf-lib最精简版”压缩包中,应该包含了上述提到的关键组件,使得用户能够在不依赖大型CXF发行版的情况下,快速搭建和运行一个简单的服务端和客户端应用。然而,实际项目中,根据具体需求可能会需要更多的依赖,...
【CXF最少依赖JAR包】是针对Apache CXF框架的一种精简打包方式,旨在减少项目中的依赖体积,提高项目的加载速度和管理效率。Apache CXF是一个开源的、基于Java的Web服务框架,它允许开发者创建和消费各种类型的Web...
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
wrf转mp4播放器1.1.1
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
国网台区终端最新规范
《基于YOLOv8的智慧农业水肥一体化控制系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
GSDML-V2.33-LEUZE-AMS3048i-20170622.xml
微信小程序项目课程设计,包含LW+ppt
微信小程序项目课程设计,包含LW+ppt
终端运行进度条脚本
幼儿园预防肺结核教育培训课件资料
python,python相关资源
《基于YOLOv8的智慧校园电动车充电桩状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
deepseek 临床之理性软肋.pdf
SM2258XT量产工具(包含16种程序),固态硬盘量产工具使用
RecyclerView.zip
水务大脑让水务运营更智能(23页)
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。