- 浏览: 932931 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
一、准备环境
Apache Cxf 2.4.5
二、服务端
由于最近再写一个发送邮件的东西,于是在这个东西上稍加修改成为我们的服务端程序。这里只是用来表达CXF的工作流程及配置!
1、服务接口
package com.webservice.server; import javax.jws.WebService; /** * * @author WY * @version 2011-12-23 */ @WebService public interface IMailSendService { /** * 邮件发送成功返回true;否则返回false * @param userName 邮箱名称 * @param password 邮箱密码 * @param mailSubject 邮件主题 * @param to 邮件接收人 * @param mailBody 邮件内容 * @return */ public boolean sendMail(String userName, String password, String mailSubject, String to, String mailBody); }
服务接口实现类
package com.webservice.server.impl; import org.apache.log4j.Logger; import javax.jws.WebService; import com.util.mail.SendMail; import com.webservice.server.IMailSendService; /** * * @author WY * @version 2011-12-23 */ @WebService public class MailSendServiceImpl implements IMailSendService { private static Logger log = Logger.getLogger(MailSendServiceImpl.class); public boolean sendMail(String userName, String password, String mailSubject, String to, String mailBody){ if(userName == null || password == null){ log.error("请输入用户名或密码!"); return false; } if(to == null){ log.error("请输入邮件接收人的邮箱地址!"); return false; } if(userName.indexOf('@') == -1){ log.error("请输出完整的邮箱名称!"); return false; } String hostName = userName.substring(userName.indexOf('@')); String smtp = hostName.replace("@", "smtp."); boolean need = true; SendMail sendMail = new SendMail(smtp, need, userName, password); //创建MIME邮件对象 boolean mimeMessage = sendMail.createMimeMessage(); if(mimeMessage == true){ boolean subject = sendMail.setSubject(mailSubject); if(subject == true){ boolean tto = sendMail.setTo(to); if(tto == true){ boolean from = sendMail.setFrom(userName, null); if(from == true){ boolean body = sendMail.setBody(mailBody); if(body == true){ boolean bool = sendMail.sendout(userName, password); return bool; }else{ log.error("设置邮件正文时发生异常!"); return false; } }else{ log.error("设置邮件发送人时异常!"); return false; } }else{ log.error("设置邮件接收人时异常!"); return false; } }else{ log.error("设置邮件主题时异常!"); return false; } }else{ log.error("创建MIME邮件对象时异常!"); return false; } } }
2、服务端配置文件
<?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:cxf="http://cxf.apache.org/core" xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.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 http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd"> <!-- CXF需要import的 --> <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" /> <!-- CXF的log配置 --> <cxf:bus> <cxf:features> <cxf:logging></cxf:logging> </cxf:features> </cxf:bus> <!--配置默认客户端超时时间,连接超时为45秒,响应等待超时为5分钟 --> <http-conf:conduit name="*.http-conduit"> <http-conf:client ConnectionTimeout="45000" ReceiveTimeout="600000"/> </http-conf:conduit> <!-- (第一种方式)CXF服务端配置 --> <jaxws:endpoint id="mailSendService" implementor="com.webservice.server.impl.MailSendServiceImpl" address="${ws_address}/${contextPath}/ws/mailSendService" publish="true" > <jaxws:features> <bean class="org.apache.cxf.feature.LoggingFeature" /> </jaxws:features> </jaxws:endpoint> <!-- (第二种方式)CXF服务端配置 <bean id="mailSendServiceImpl" class="com.webservice.server.impl.MailSendServiceImpl" /> <jaxws:endpoint id="mailSendService" implementor="#mailSendServiceImpl" address="${ws_address}/${contextPath}/ws/mailSendService" publish="true" > <jaxws:features> <bean class="org.apache.cxf.feature.LoggingFeature" /> </jaxws:features> </jaxws:endpoint> --> </beans>
GlobalConstants.properties
#contextPath contextPath=eis #webService ws_address=http\://127.0.0.1\:8090
3、发布服务
发布服务时一定要注意接口服务的端口不要和应用程序的端口一样。我的应用程序发布到tomcat中端口是8080,而接口服务的端口我修改为8090.
否则就会出现接口服务发布成功即wsdl可以正常访问,而应用程序无法访问(404)
三、客户端
1、生成客户端
利用cxf中的wsdl2java.bat生成客户端,也可以使用soapui来生成客户端(简单使用介绍http://exceptioneye.iteye.com/blog/1276869)
虽然客户端生成了但是却报出异常
---------------------------- ID: 7 Address: http://localhost:8090/eis/ws/mailSendService?wsdl=IMailSendService.wsdl Http-Method: GET Content-Type: Headers: {Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2], Cache-Control=[no-cache], connection=[keep-alive], Content-Type=[null], Host=[localhost:8090], Pragma=[no-cache], User-Agent=[Java/1.6.0_16]} -------------------------------------- [DEBUG][2011-12-24 00:04:54][org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:260)]:Invoking handleMessage on interceptor org.apache.cxf.interceptor.AttachmentInInterceptor@f1e2d9 [DEBUG][2011-12-24 00:04:54][org.apache.cxf.interceptor.AttachmentInInterceptor.handleMessage(AttachmentInInterceptor.java:53)]:AttachmentInInterceptor skipped in HTTP GET method [DEBUG][2011-12-24 00:04:54][org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:260)]:Invoking handleMessage on interceptor org.apache.cxf.transport.https.CertConstraintsInterceptor@177b6fc [DEBUG][2011-12-24 00:04:54][org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:260)]:Invoking handleMessage on interceptor org.apache.cxf.interceptor.StaxInInterceptor@643c06 [DEBUG][2011-12-24 00:04:54][org.apache.cxf.interceptor.StaxInInterceptor.handleMessage(StaxInInterceptor.java:61)]:StaxInInterceptor skipped. [DEBUG][2011-12-24 00:04:54][org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:260)]:Invoking handleMessage on interceptor org.apache.cxf.frontend.WSDLGetInterceptor@179997b [DEBUG][2011-12-24 00:04:54][org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:338)]:Finished servicing http request on thread: Thread[qtp17215886-26 - /eis/ws/mailSendService?wsdl=IMailSendService.wsdl,5,main] [DEBUG][2011-12-24 00:04:54][org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:70)]:RESPONSE /eis/ws/mailSendService 200 [DEBUG][2011-12-24 00:04:56][org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:70)]:closed org.eclipse.jetty.server.nio.SelectChannelConnector$SelectChannelHttpConnection@8fd6f7@127.0.0.1:8090<->127.0.0.1:1966 [DEBUG][2011-12-24 00:04:56][org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:80)]:EXCEPTION java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233) at sun.nio.ch.IOUtil.read(IOUtil.java:206) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236) at org.eclipse.jetty.io.nio.ChannelEndPoint.fill(ChannelEndPoint.java:165) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:289) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529) at java.lang.Thread.run(Thread.java:619) [DEBUG][2011-12-24 00:05:50][org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:70)]:closed org.eclipse.jetty.server.nio.SelectChannelConnector$SelectChannelHttpConnection@12d2e71@127.0.0.1:8090<->127.0.0.1:1965 [DEBUG][2011-12-24 00:05:50][org.eclipse.jetty.util.log.Slf4jLog.debug(Slf4jLog.java:80)]:EXCEPTION java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25) at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233) at sun.nio.ch.IOUtil.read(IOUtil.java:206) at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236) at org.eclipse.jetty.io.nio.ChannelEndPoint.fill(ChannelEndPoint.java:165) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:289) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529) at java.lang.Thread.run(Thread.java:619)
如果哪位有解决方法还请指点!
虽然报异常,但是却不影响功能!
如果出现 Service(URL, QName, WebServiceFeature[]) is undefined
解决方法:http://exceptioneye.iteye.com/blog/1177361
2、客户端配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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-2.5.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> <!-- CXF 客户端配置 --> <bean id="iMailSendServiceClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="com.webservice.client.IMailSendService" /> <property name="address" value="${ws_address}/${contextPath}/ws/mailSendService?wsdl" /> </bean> <bean id="mailSendServiceClient" class="com.webservice.client.IMailSendService" factory-bean="iMailSendServiceClientFactory" factory-method="create" /> </beans>
四、测试
业务处理
IMailSendService mailSendService = (IMailSendService) ApplicationContextHelper.getBean("mailSendServiceClient"); mailSendService.sendMail("", "", "邮件测试", "", "邮件测试!");
邮件发送成功,OK。
发表评论
-
WebService CXF --- 传输文件MTOM
2011-12-25 14:06 13183一、几个相关的概念 ... -
WebService CXF JAXB角色及简单使用
2011-12-24 22:23 3655WebService传递XML文档,当然也可以传递JSON对象 ... -
WebService CXF SOAP基本结构
2011-12-24 18:20 2087SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP ... -
WebService CXF WSDL描述
2011-12-24 18:16 1296原文http://www.ibm.com/develo ... -
WebService CXF下的Service(URL, QName, WebServiceFeature[]) is undefined
2011-09-21 21:11 2704Service(URL, QName, WebServiceF ... -
WebService CXF 如何设置 timeout
2011-05-21 09:31 4383由于用CXF构建的webservice使用的是spring配置 ... -
让Apache CXF 支持传递java.sql.Timestamp和java.util.HashMap类型
2011-05-02 12:46 2484让Apache CXF 支持传递java.sql.Timest ... -
WebService CXF 中的拦截器(Interceptor)
2011-05-02 12:38 3594CXF的Interceptor在每个请求响应之前或响应之后,做 ... -
WebService CXF中传递复杂类型对象
2011-05-02 12:07 12979前面一篇文章介绍的都是传递简单的字符串,现在开始介绍传递复杂类 ... -
WebService CXF --- 由WSDL文件开发Client端
2011-04-30 17:49 3870WSDL文件:http://www.webxml.com.cn ... -
WebService CXF----JAX-RPC 与 JAX-WS
2011-04-30 10:00 4393Web服务: 1、SOAP 2、WSDL ... -
WebService CXF --- 创建基础的示例
2011-04-09 16:11 15781、开发环境: cxf-2.3.3 ... -
WebService CXF --- CXF简单介绍
2011-04-09 14:48 41791、WebService介绍 WebService让 ... -
Web Service中的XFire 传输List、Map 自定义对象
2011-04-05 09:14 7839简单记录XFire中怎么传输对象的实现,以备查阅;又不正确的地 ... -
一个基础的XFire WebService快速开发
2011-04-03 09:03 1567环境: XFire-1.2.6 JDK1.5 MyEcl ... -
axis和xfire以及CXF
2011-04-03 08:51 1554由于最近使用WebService,于是到网上疯狂搜索,找点资料 ...
相关推荐
3. 创建CXF服务:定义Web服务接口,实现该接口并配置到CXF中。CXF提供了基于注解的Web服务开发方式,可以轻松地将接口暴露为Web服务。 4. 发布Web服务:使用CXF的Servlet或者Spring的CXF非Servlet方式来发布Web服务...
Struts2则是一个用于构建MVC(模型-视图-控制器)架构的Java web应用框架。这个组合使得开发者能够高效地构建、管理和部署基于Web的服务。 【CXF】是Java世界中广泛使用的Web服务框架,支持SOAP和RESTful两种Web...
在Spring+CXF的整合中,CXF作为服务提供者,通过Spring的配置,可以将业务逻辑暴露为Web服务,方便其他系统进行调用。 **MyBatis框架** MyBatis是一个轻量级的持久层框架,它简化了数据库操作,通过SQL映射文件或...
在IT行业中,SpringMVC和CXF是两个非常重要的开源框架,它们分别在Web应用程序开发和Web服务提供方面发挥着核心作用。SpringMVC是Spring框架的一部分,专注于处理HTTP请求和响应,提供了一种优雅的方式来组织和构建...
在IT行业中,Spring框架和Apache CXF是两个非常...总的来说,"spring4+cxf3"的整合是现代企业级应用开发中的常见实践,它结合了Spring的强大功能和CXF的Web服务处理能力,为开发高质量、高性能的服务提供了坚实的基础。
5. **Spring的DispatcherServlet和HandlerMapping**: 在Web应用中,Spring的DispatcherServlet负责请求的分发,而HandlerMapping则将请求映射到相应的处理方法。在CXF整合中,这些组件可以用来处理Web服务的请求。 ...
在Web服务环境中,Tomcat作为服务器,承载CXF和Spring构建的服务端应用。 **服务端**:在"testwebseviceserver"目录下,包含了服务端的代码和配置。服务端通常定义了Web服务的接口和实现,通过CXF提供的注解或者XML...
在下载的"spring3+cxf2.7 整合jar包"中,可能包含了Spring 3.x版本和CXF 2.7版本的库文件,以及相关的示例配置文件,这些可以帮助开发者快速搭建和运行一个Spring+CXF的环境。使用时,开发者需要根据自己的项目需求...
总结来说,"idea + spring4.3.7.RELEASE + cxf3.1.0"的整合项目涵盖了企业级Java应用开发的关键技术点:Spring框架的使用、Maven项目的构建、Apache CXF的Web服务发布和调用。通过对这些知识点的掌握,开发者可以更...
SSM框架是Java Web开发中常用的三大组件:Spring、SpringMVC和Mybatis的组合,它们各自负责不同的职责,协同工作以构建出高效、松耦合的Web应用程序。在这个项目中,开发者进一步集成了Apache CXF框架,用于发布Web...
在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"spring4+mybatis3+webservice+cxf框架整合"就是一个典型的解决方案。这个项目结合了四个关键的技术组件,以构建一个强大的后端系统。 首先,Spring 4是Java...
2. **Struts**:Struts 是一个MVC(Model-View-Controller)架构的Java web应用框架,用于构建更结构化的应用程序。它处理HTTP请求,管理视图与控制器之间的交互,使业务逻辑与用户界面分离,提高了代码的可维护性...
### WebService技术应用:Spring 3 + CXF 3.4与Axis 1.4的交互 在现代软件开发中,Web服务作为一种重要的技术手段,被广泛应用于不同系统之间的通信。其中,Spring框架与Apache CXF是实现RESTful或SOAP风格的Web...
这样的架构既具备了Spring的灵活性,又利用了MyBatis的简单易用,还利用了CXF的Web服务功能,为企业级应用提供了强大的支持。 在提供的压缩包文件中,"myWebService"可能是包含了上述整合的源码、测试说明、必要的...
在Java开发领域,Spring框架以其强大的依赖注入和面向切面编程能力被广泛应用,而CXF则是一个优秀的开源服务开发框架,支持SOAP和RESTful服务。当Spring与CXF结合使用时,可以方便地创建和消费Web服务。本篇文章将...
3. **Web Service**:Web服务是一种通过网络进行通信的软件系统,通常使用SOAP消息协议,可以通过WSDL(Web服务描述语言)进行描述,允许不同平台和语言的应用程序之间进行互操作。 4. **SOAP**:简单对象访问协议...
通过这个整合项目,开发者可以学习到如何利用Spring 4进行服务端控制流的管理,使用CXF 3发布和消费Web服务,以及Maven 3如何帮助管理整个项目的构建流程。这将为开发者提供一个实际的平台,以实践和掌握这些技术的...
总的来说,这个DEMO为学习和实践Spring、MyBatis和CXF的集成提供了一个很好的起点,可以帮助开发者了解如何在实际项目中构建基于Web服务的系统。通过深入研究这个DEMO,可以掌握服务端开发的基本流程和技巧,提升在...
综上所述,"Spring+cxf配置接口+mybatis配置"这个项目可能是在构建一个集成了后端服务、Web服务接口和数据库操作的企业级应用。开发者需要理解这三个框架的基本原理和配置方式,才能有效地整合它们,实现高效、稳定...
Spring是企业级应用开发的强大框架,而CXF是一个开源的服务栈,用于构建和部署Web服务。这个Demo旨在帮助初学者理解这两个组件的集成过程以及Web服务的基本原理。 在Spring框架中,我们通常会用到Spring的IoC(控制...