- 浏览: 1098413 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
一、接口与实现
二、相关POJO
三、发布WebService服务
四、客户端spring配置
五、测试代码
@WebService public interface IUserLogin { public boolean login(String userId, String password); public boolean logout(String userId); public boolean checkLoginState(String userId); }
@Repository @WebService(endpointInterface = "net.log_cd.ws.IUserLogin") public class UserLoginImpl implements IUserLogin{ @Resource private WebServiceContext wsContext; @Override public boolean login(String userId, String password) { MessageContext msgContext = wsContext.getMessageContext(); HttpSession httpSession = ((HttpServletRequest) msgContext.get(MessageContext.SERVLET_REQUEST)).getSession(); HttpServletRequest request = (HttpServletRequest)msgContext.get("HTTP.REQUEST"); System.out.println("request from " + request.getRemoteAddr()+", [userId = "+userId+", password="+password); httpSession.setAttribute("token", httpSession.getId()+"_"+userId); //save session into webservice context ((javax.servlet.ServletContext) msgContext.get(MessageContext.SERVLET_CONTEXT)).setAttribute("session", httpSession); return true; } @Override public boolean logout(String userId) { MessageContext msgContext = wsContext.getMessageContext(); HttpSession httpSession = (HttpSession)((ServletContext) msgContext.get(MessageContext.SERVLET_CONTEXT)).getAttribute("session"); String token = (String)httpSession.getAttribute("token"); if(null != userId && null != token && token.equals(httpSession.getId()+"_"+userId)){ httpSession.removeAttribute("token"); System.out.println("userId["+userId+"] log out success!"); return true; }else{ System.out.println("userId["+userId+"] log out fail!"); return false; } } @Override public boolean checkLoginState(String userId){ MessageContext msgContext = wsContext.getMessageContext(); HttpSession httpSession = (HttpSession)((ServletContext) msgContext.get(MessageContext.SERVLET_CONTEXT)).getAttribute("session"); String token = (String)httpSession.getAttribute("token"); return (null != userId && null != token && token.equals(httpSession.getId()+"_"+userId)); } }
@WebService public interface IFileTransfer { void uploadFile(String userId, FileInfo fileInfo); FileInfo downloadFile(String userId, FileInfo fileInfo); }
@Repository @WebService(endpointInterface = "net.log_cd.ws.IFileTransfer") public class FileTransferImpl implements IFileTransfer{ @Resource private WebServiceContext wsContext; @Resource private IUserLogin userLogin; @Override public void uploadFile(String userId, FileInfo fileInfo) { if(!userLogin.checkLoginState(userId)){ System.out.println("illegal operation!"); return; } OutputStream os = null; try{ if(fileInfo.getPosition() != 0){ os = FileUtils.openOutputStream(new File(fileInfo.getServerFilePath()), true); }else{ os = FileUtils.openOutputStream(new File(fileInfo.getServerFilePath()), false); } os.write(fileInfo.getBytes()); }catch(Exception e){ e.printStackTrace(); }finally{ IOUtils.closeQuietly(os); } } @Override public FileInfo downloadFile(String userId, FileInfo fileInfo) { if(!userLogin.checkLoginState(userId)){ System.out.println("illegal operation!"); return null; } InputStream innputStrean = null; try{ innputStrean = new FileInputStream(fileInfo.getServerFilePath()); innputStrean.skip(fileInfo.getPosition()); byte[] bytes = new byte[1024 * 1024]; int size = innputStrean.read(bytes); if (size > 0) { byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size); fileInfo.setBytes(fixedBytes); } else { fileInfo.setBytes(new byte[0]); } }catch(Exception e){ e.printStackTrace(); }finally{ IOUtils.closeQuietly(innputStrean); } return fileInfo; } }
二、相关POJO
public class FileInfo { private String clientFilePath; private String serverFilePath; private long position; private byte[] bytes; public String getClientFilePath() { return clientFilePath; } public void setClientFilePath(String clientFilePath) { this.clientFilePath = clientFilePath; } public String getServerFilePath() { return serverFilePath; } public void setServerFilePath(String serverFilePath) { this.serverFilePath = serverFilePath; } public long getPosition() { return position; } public void setPosition(long position) { this.position = position; } public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; } }
三、发布WebService服务
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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-servlet.xml" /> <context:component-scan base-package="net.log_cd.ws"/> <jaxws:endpoint id="userLoginWebService" implementor="#userLoginImpl" address="/userLogin" /> <jaxws:endpoint id="fileTransferWebService" implementor="#fileTransferImpl" address="/fileTransfer" /> </beans>
四、客户端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:jaxws="http://cxf.apache.org/jaxws" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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"> <context:component-scan base-package="com.log_cd.ws" /> <!-- proxy factory schema --> <bean id="userLogin" class="net.log_cd.ws.IUserLogin" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="net.log_cd.ws.IUserLogin" /> <property name="address" value="http://localhost:8080/cxf/ws/userLogin" /> </bean> <!-- proxy factory schema --> <bean id="fileTransfer" class="net.log_cd.ws.IFileTransfer" factory-bean="clientFactory2" factory-method="create" /> <bean id="clientFactory2" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="net.log_cd.ws.IFileTransfer" /> <property name="address" value="http://localhost:8080/cxf/ws/fileTransfer" /> </bean> </beans>
五、测试代码
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:cxf-ws-client.xml") public class CXFWebServiceSessionTest extends AbstractJUnit4SpringContextTests { public static final String clientFilePath = "D:/test/test.jpg"; public static final String serverFilePath = "D:/test/test_cp.jpg"; public static final String userId = "log_cd"; @Resource private IUserLogin userLogin; @Resource private IFileTransfer fileTransfer; @Test public void userLogin() { boolean bool = userLogin.login(userId, "85139999"); System.out.println(bool); Assert.isTrue(bool); } @Ignore public void uploadFile() { InputStream inputStream = null; try { FileInfo fileInfo = new FileInfo(); inputStream = new FileInputStream(clientFilePath); byte[] bytes = new byte[1024 * 1024]; while (true) { int size = inputStream.read(bytes); if (size <= 0) { break; } byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size); fileInfo.setClientFilePath(clientFilePath); fileInfo.setServerFilePath(serverFilePath); fileInfo.setBytes(fixedBytes); fileTransfer.uploadFile(userId, fileInfo); fileInfo.setPosition(fileInfo.getPosition() + fixedBytes.length); } } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } finally { IOUtils.closeQuietly(inputStream); } } @Test public void downloadFile() { FileInfo fileInfo = new FileInfo(); fileInfo.setServerFilePath(serverFilePath); long position = 0; while (true) { fileInfo.setPosition(position); fileInfo = fileTransfer.downloadFile(userId, fileInfo); if (fileInfo.getBytes().length <= 0) { break; } OutputStream outputStream = null; try { if (position != 0) { outputStream = FileUtils.openOutputStream(new File(clientFilePath), true); } else { outputStream = FileUtils.openOutputStream(new File(clientFilePath), false); } outputStream.write(fileInfo.getBytes()); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } finally { IOUtils.closeQuietly(outputStream); } position += fileInfo.getBytes().length; } } @Test public void userLogout() { boolean bool = userLogin.logout(userId); System.out.println(bool); Assert.isTrue(bool); } }
发表评论
-
SpringBoot开发WebService之Axis
2019-07-14 23:56 4892一、服务器端发布WebService服务 1、POM.xml文 ... -
SpringBoot开发WebService之CXF
2019-07-14 23:56 1352一、在服务器端的WebSerivce服务发布 1、POM.xm ... -
JDK6开发WebService及用户认证
2015-08-21 13:50 1430一、编写服务端并发布 1、定义接口 public inte ... -
WebService之CXF处理类型转换
2015-08-20 13:53 2793一、接口与实现 @WebService @SOAPBin ... -
以多种方式访问WebService
2015-08-20 13:58 6455一、Java访问WebService (1)使用Axis ... -
Exporting beans as web services using XFire
2015-08-20 14:07 1160Once XFire is in your buil ... -
Spring中的远程访问和web服务
2010-05-23 23:17 4533一、介绍 目前,Sp ... -
集成axis开发webservice
2009-09-16 09:09 3055一、基础知识 Web S ... -
spring使用RMI暴露服务
2008-07-11 14:03 3766(1)定义接口: package com.logcd.spri ... -
java RMI
2008-06-25 13:31 5182RMI限java之间,且使用Stream 技术(seri ...
相关推荐
下面将详细介绍如何使用CXF开发RESTful风格WebService。 一、RESTful简要介绍 RESTful是一种软件架构风格,基于HTTP协议,使用简洁、统一的接口描述语言来描述资源。RESTful风格WebService具有以下特点: * 使用...
【WebService】在本项目中,可能使用了Apache CXF来实现。CXF是一个全面的Web服务框架,支持SOAP、RESTful等多种风格的Web服务。它可以方便地生成服务端和客户端代码,提供WSDL(Web服务描述语言)的生成和解析,...
在本示例中,"带session生命周期的webservice应用工程"意味着服务端能够识别和跟踪客户端的会话。在传统的HTTP请求中,Session用于存储用户状态信息,当用户在网站的不同页面间导航时,Session能够在服务器端保持...
本文将详细介绍如何入门使用 CXF 来创建和部署 Web 服务。 **第一步:导入 CXF 相关包** 首先,你需要从官方下载地址(http://cxf.apache.org/download.html)获取 CXF 的 JAR 包,并将其添加到你的项目类路径中。...
3. **Session管理**:在分布式环境中,Axis2支持会话管理,确保跨多个WebService调用时的数据一致性。 4. **使用Spring的JavaBean发布WebService**:结合Spring框架,可以方便地将JavaBean转换为可发布的WebService...
- **WebService资源**:需要添加WebService相关的库文件,如Axis2或CXF等,以支持WebService的开发。 #### 四、生成Hibernate相关对象映射文件 1. **定义表结构**:在数据库中设计和创建所需的表结构。 2. **根据...
例如,通过在WebService中暴露NHibernate Session,客户端可以通过调用相应的方法执行CRUD操作。 7. BJCreation.Windows.DataUpLoad:根据压缩包内的文件名,我们可以推测这是一个Windows平台上的数据上传服务。在...
“工具”标签可能指的是用于开发、部署和测试ejb WebService的各种工具,例如Apache CXF、Metro(JAX-WS RI)、Eclipse IDE等。这些工具提供了从生成WebService客户端代码到调试和监控服务的全面支持,大大简化了...
可以选择使用JAX-WS(Java API for XML Web Services)或者CXF等框架来生成服务端和客户端代码。 4. **实现业务逻辑**:在Web Service的实现类中,注入Hibernate的SessionFactory,通过Session对象执行数据库操作,...
在这个项目中,CXF可能被用来发布和调用WebService,实现不同系统间的通信和数据交换,增加了系统的可扩展性和互操作性。 至于压缩包内的文件,`read me.png`可能是项目说明的截图,`shiro.sql`可能包含初始化Shiro...
2. Wink Rest服务、Webservice服务:jaxws、CXF等 3. IO 流上传下载文件,多线程操作 4. 发送邮件,配置邮件服务器,发基于html、纯文本格式的邮件(可以免费赠送网络爬虫,使其群发邮件,做到广告推送等) 5. MD...
1. **鲜果任务水果配送项目**:使用Springmvc、Spring、Mybatis、Webservice CXF、Shiro、Redis、ActiveMQ和ElasticSearch等技术。项目中,利用Webservice CXF进行服务发布,Shiro结合Ehcache进行权限验证,Redis...
在JSP页面中,可以使用内置对象(如request、response、session等)来访问HTTP请求的数据,同时通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化编程。 接下来,我们探讨Servlet...
系统中通过 cxf webservice引擎,将统计服务对外公开,可实现第三方系统的无 缝整合. .利用aop + scheduler 采用动态表实现日志管理,提高日志表的存储和访问能力. .集成 spring cache ,对 service层用户参与调查...
- **Web层**:Spring-Flex 1.0.3 (AMF)、Struts 2.3.15.1 (Service)、CXF 2.7.6 (WebService) - **Service层**:Spring 3.1 - **DAO层**:Hibernate 3.3 #### AMF通讯方式配置 为了实现Flex客户端与Java服务器端的...
Java 面试题知识点总结 ...* WebService 的主要技术亮点:WebService 是基于SOAP或RESTful的,常用的框架有 Axis、CXF 等。 * Tomcat 服务器:如何基于 JNDI 技术配置数据库连接池,如何在 Tomcat 中嵌入一个测试项目。
解决这个问题的方法包括设置 Socket 的 timeout 时间、确保连接关闭后不再发送数据和使用连接池或其他机制来管理连接。同时,我们也可以通过实践经验来了解到,timer 的方法可能会导致大量的 Socket 连接建立和关闭...
五、我们还可以使用Idea下的webservice,能够使用图形画面的方式获取本地代理和生成WSDL文件。 Activiti 介绍 Activiti5是一个业务流程管理(BPM)框架 如果我们的业务是比较复杂的话,我们才会用到...
她还运用Redis缓存来优化首页广告位的展示,使用ActiveMQ进行商品索引同步,使用FreeMarker进行商品详情页的静态化展示,同时将Session信息存储到Redis缓存服务器中,确保了数据共享和系统性能的提升。 此外,郑...