axis1.4整合spring2.5开发webservice
jar包
axis1.4jar包有:
axis-ant.jar
axis.jar
commons-discovery-0.4.jar
commons-httpclient-3.1.jar
jaxrpc.jar
saaj.jar
wsdl4j.jar
<!-- axis --> <!--webService--> <display-name>Apache-Axis</display-name> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping>
在WEB-INF下增加 server-config.wsdd文件,可以直接复制下面进行修改
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration> <parameter name="sendMultiRefs" value="true" /> <parameter name="disablePrettyXML" value="true" /> <parameter name="adminPassword" value="admin" /> <parameter name="attachments.Directory" value="D:\JavaSoft\apache-tomcat-7.0.20\apache-tomcat-7.0.20\webapps\ljtoa\WEB-INF\attachments" /> <parameter name="dotNetSoapEncFix" value="true" /> <parameter name="enableNamespacePrefixOptimization" value="false" /> <parameter name="sendXMLDeclaration" value="true" /> <parameter name="sendXsiTypes" value="true" /> <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> <requestFlow> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="session" /> </handler> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="request" /> <parameter name="extension" value=".jwr" /> </handler> </requestFlow> </globalConfiguration> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> <service name="SyncUserInfoService" provider="java:RPC"> <parameter name="className" value="com.lsq.webservice.service.inner.impl.SyncUserInfoServiceImpl" /> <parameter name="allowedMethods" value="*" /> </service> <service name="AdminService" provider="java:MSG"> <parameter name="allowedMethods" value="AdminService" /> <parameter name="enableRemoteAdmin" value="false" /> <parameter name="className" value="org.apache.axis.utils.Admin" /> <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="Version" provider="java:RPC"> <parameter name="allowedMethods" value="getVersion" /> <parameter name="className" value="org.apache.axis.Version" /> </service> <transport name="http"> <requestFlow> <handler type="URLMapper" /> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> </requestFlow> <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" /> <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /> <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler" /> <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler" /> <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" /> <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /> </transport> <transport name="local"> <responseFlow> <handler type="LocalResponder" /> </responseFlow> </transport> </deployment>
修改上面的SyncUserInfoService为自已的service就行了
package com.lsq.webservice.service.inner; public interface SyncUserInfoService { /** * * @param updateDate 格式: 2013-05-05 * @return */ public String getUser(String updateDate); }
public class SyncUserInfoServiceImpl implements SyncUserInfoService { private final Log logger = LogFactory.getLog(SyncUserInfoServiceImpl.class); @Override public String getUser(String updateDate) { AppUserService appUserService = (AppUserService)AppUtil.getBean("appUserService"); List list = appUserService.findByUpdateTime(updateDate); List<SyncUserInfo> userList = this.assembleData(list); XStream xstream = new XStream(); xstream.setMode(XStream.NO_REFERENCES); NullConverter nullConverter = new NullConverter(); xstream.registerConverter(nullConverter); xstream.alias("syncUserInfo", SyncUserInfo.class); String str = xstream.toXML(userList); return XmlUtil.reponseXml(str); }
测试类:
import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class TestClient3 { public static void main(String[] args) { testSync(); } public static void testSync(){ try { String wsdlUrl = "http://localhost:8080/lsq/services/SyncUserInfoService?wsdl"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(wsdlUrl); call.setOperationName("getUser");//WSDL里面描述的接口名称 call.addParameter("updateDate", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 String result = (String)call.invoke(new Object[]{"2013-05-05"}); //给方法传递参数,并且调用方法 System.out.println(result); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
为webservice增加简单访问权限控制
增加handler
package com.lsq.webservice.handler; import java.util.Date; import org.apache.axis.AxisFault; import org.apache.axis.Handler; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class LogHandler extends BasicHandler { private final Log logger = LogFactory.getLog(LogHandler.class); /** invoke,每一个handler都必须实现的方法。 */ public void invoke(MessageContext msgContext) throws AxisFault { //每当web服务被调用,都记录到log中。 logger.info("日志记录 : invoke : start"); try { Handler handler = msgContext.getService(); Integer counter = (Integer)handler.getOption("accesses"); if (counter == null) counter = new Integer(0); counter = new Integer(counter.intValue() + 1); Date date = new Date(); msgContext.getMessage().writeTo(System.out); String result = "在" + date + ": Web 服务 " + msgContext.getTargetService() + " 被调用,现在已经共调用了 " + counter + " 次."; handler.setOption("accesses", counter); logger.info(result); } catch (Exception e) { throw AxisFault.makeFault(e); } } }
package com.lsq.webservice.handler; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; import org.apache.axis.security.AuthenticatedUser; import org.apache.axis.security.SecurityProvider; import org.apache.axis.security.simple.SimpleSecurityProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; //此handler的目的是对用户认证,只有认证的用户才能访问目标服务。 public class AuthenticationHandler extends BasicHandler { Log log = LogFactory.getLog(AuthenticationHandler.class); String securityProvider = "securityProvider"; String unauthenticated = "unauthenticated"; String authenticatedUser = "authenticatedUser"; String cantAuth = "cantAuth"; public void invoke(MessageContext msgContext) throws AxisFault { log.info("身份验证 : 开始"); SecurityProvider provider = (SecurityProvider)msgContext.getProperty(securityProvider); if(provider == null) { provider = new SimpleSecurityProvider(); msgContext.setProperty(securityProvider, provider); } if(provider != null) { String userId = msgContext.getUsername(); String password = msgContext.getPassword(); //对用户进行认证,如果authUser==null,表示没有通过认证, log.info(userId + ", " + password); //抛出Server.Unauthenticated异常。 AuthenticatedUser authUser = provider.authenticate(msgContext); if(authUser == null) throw new AxisFault(unauthenticated, "error", null, null); //用户通过认证,把用户的设置成认证了的用户。 msgContext.setProperty(authenticatedUser, authUser); } log.info("身份验证 : 结束"); } }
package com.lsq.webservice.handler; import java.util.StringTokenizer; import org.apache.axis.AxisFault; import org.apache.axis.Handler; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; import org.apache.axis.i18n.Messages; import org.apache.axis.security.AuthenticatedUser; import org.apache.axis.security.SecurityProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class AuthorizationHandler extends BasicHandler { Log log = LogFactory.getLog(AuthorizationHandler.class); /** invoke,每一个handler都必须实现的方法。 */ public void invoke(MessageContext msgContext) throws AxisFault { log.info("start"); AuthenticatedUser user = (AuthenticatedUser)msgContext.getProperty("authenticatedUser"); if(user == null) throw new AxisFault("Server.NoUser", Messages.getMessage("needUser00"), null, null); String userId = user.getName(); Handler serviceHandler = msgContext.getService(); if(serviceHandler == null) throw new AxisFault(Messages.getMessage("needService00")); String serviceName = serviceHandler.getName(); String allowedRoles = (String)serviceHandler.getOption("allowedRoles"); if(allowedRoles == null) { log.info("不需要验证"); return; } SecurityProvider provider = (SecurityProvider)msgContext.getProperty("securityProvider"); if(provider == null) throw new AxisFault(Messages.getMessage("noSecurity00")); for(StringTokenizer st = new StringTokenizer(allowedRoles, ","); st.hasMoreTokens();) { String thisRole = st.nextToken(); if(provider.userMatches(user, thisRole)) { log.info("通过验证"); return;//访问授权通过。 } } //没有通过授权,不能访问目标服务,抛出Server.Unauthorized异常。 throw new AxisFault("Server.Unauthorized", Messages.getMessage("cantAuth02", userId, serviceName), null, null); } }
然后在WEB-INF下新增users.lst
里面是用户名密码信息,只有这里面的用户才能访问webservice
user1 pass1 user2 pass2 user3 pass3 admin 123456
在server-config.wsdd中的SyncUserInfoService增加handler处理
<service name="SyncUserInfoService" provider="java:RPC"> <requestFlow> <handler name="authen" type="java:com.xpsoft.webservice.handler.AuthenticationHandler"/> <handler name="author" type="java:com.xpsoft.webservice.handler.AuthorizationHandler"/> <handler name="logging" type="java:com.xpsoft.webservice.handler.LogHandler"/> </requestFlow> <parameter name="className" value="com.lsq.webservice.service.inner.impl.SyncUserInfoServiceImpl" /> <parameter name="allowedMethods" value="*" /> </service>
修改测试类:新增请求用户名和密码
public static void testSync(){ try { String wsdlUrl = "http://localhost:8080/lsq/services/SyncUserInfoService?wsdl"; Service service = new Service(); Call call = (Call) service.createCall(); call.getMessageContext().setUsername("admin"); call.getMessageContext().setPassword("123456"); call.setTargetEndpointAddress(wsdlUrl); call.setOperationName("getUser");//WSDL里面描述的接口名称 call.addParameter("updateDate", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 String result = (String)call.invoke(new Object[]{"2013-05-05"}); //给方法传递参数,并且调用方法 System.out.println(result); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
参考:
http://www.ibm.com/developerworks/cn/webservices/ws-secaxis1/
http://www.ibm.com/developerworks/cn/webservices/ws-handler/index.html
相关推荐
### 使用Axis 1.4开发WebService:关键技术与实践 #### 一、Axis 1.4 简介 Axis是一个开放源代码的Web服务引擎,它由Apache软件基金会开发和维护,支持SOAP协议,用于创建和部署Web服务。Axis 1.4版本是其稳定且...
Axis1.4是Apache软件基金会提供的一个开源工具,专门用于开发和部署Web服务。本教程将详细讲解如何使用Axis1.4进行Web服务的开发,包括创建服务端和客户端。 首先,我们需要了解Web服务的基本概念。Web服务是通过...
总结,使用Axis1.4开发Web服务涉及到的主要步骤包括创建服务类、生成WSDL、打包服务、部署服务以及编写和运行客户端。了解并掌握这些步骤,有助于开发者快速构建基于Java的Web服务应用程序。同时,注意保持代码的...
3. **创建WebService**:在Spring Boot应用中,你可以通过Axis1.4创建一个WebService。首先,定义一个Java类,包含你想要公开的方法。然后,使用Axis的工具生成服务端点接口和服务类。 4. **配置Spring Boot**:...
标题中的“手把手教你用axis1.4搭建webservice”是指一篇教程,旨在指导读者如何使用Axis1.4这个开源工具来创建和部署Web服务。Axis是Apache软件基金会的一个项目,它提供了一种简单的方式来实现Java到SOAP(Simple ...
AXIS1.4是Apache软件基金会开发的一个开源Java库,用于构建和使用Web服务。它提供了在Java平台上创建Web服务的工具和API,使得开发者能够快速实现SOAP(Simple Object Access Protocol)通信。在这个"AXIS1.4 ...
标题中的“手写Axis1.4发布WebService以及客户端调用”指的是使用Apache Axis1.4框架来创建和消费Web服务的过程。Apache Axis是用于构建Web服务的一个开源工具,它允许开发者将Java类转换为Web服务,并且提供客户端...
Spring Boot以其简化配置和快速开发能力而受到广泛欢迎,而Axis1.4是Apache软件基金会的一个开源项目,主要用于生成和消费SOAP Web服务。当我们需要在Spring Boot应用程序中集成Web服务时,Axis1.4提供了一个强大的...
Axis1.4是Apache软件基金会开发的一个开源Java框架,用于创建和部署Web服务。这个框架在Web服务领域中扮演着重要角色,特别是在早期的Web服务实现中。标题和描述提到的知识点主要集中在如何使用Axis1.4来部署Web服务...
### Axis 1.4 发布WebService接口步骤详解 #### 一、概述 本文档旨在详细介绍如何使用Axis 1.4框架在Java环境下发布WebService接口。Axis是一个由Apache组织开发的开源项目,它提供了用于实现基于SOAP协议的Web...
2. **开发指南**:《Axis1.4开发指南》是理解Axis1.4的入门资料,通常会涵盖安装配置、创建服务、发布服务、调用服务等步骤,还会讲解如何处理各种错误和异常,以及如何调试Web服务。 3. **jar包**:在开发过程中,...
当我们需要在Spring Boot项目中集成旧版的 Axis1.4 来发布Web服务时,这通常涉及到对传统SOAP(简单对象访问协议)服务的支持。以下将详细讲解如何在Spring Boot应用中集成Axis1.4以及使用wsdd文件发布Web服务。 ...
在Java开发中,Axis1.4是一个常用的开源工具,用于构建和部署Web服务。本实例主要探讨如何将Axis1.4与Java项目整合,搭建Web服务的服务端。下面我们将详细阐述Axis1.4、Web服务以及如何在服务端进行设置。 一、 ...
在Java开发中, Axis1.4 是一个广泛使用的开源框架,用于构建和部署Web服务。本文将深入探讨如何使用Axis1.4与Java项目整合,搭建Web服务客户端,并通过具体的客户端代码实例进行详解。 首先,我们需要理解Web服务...
标题 "axis1.4带lib包java开发webservice客户端和服务端" 涉及到的是一个基于Java的Web服务开发工具包,Axis1.4,它包含必要的库文件(lib)来支持创建和消费Web服务。这个压缩包是为MyEclipse集成开发环境设计的,...
- **简单易用**:Axis1.4提供了一个简单的命令行工具,可以快速地生成服务端点和客户端代理类,大大简化了Web服务的开发过程。 - **广泛的协议支持**:除了支持SOAP 1.1,Axis1.4还支持HTTP、HTTPS等多种传输协议...
使用Axis 1.4开发Web服务的过程主要包括以下步骤: 1. **创建Web服务**:可以使用 Axis 提供的 wsdl2java 工具,从WSDL文件自动生成Java服务端代码,也可以直接编写Java类并使用 Axis 注解来定义服务接口。 2. **...
综上所述,Axis1.4开发指南是一份针对使用Axis1.4版本开发WebService的详尽文档,它介绍了WebService的基本概念、Axis框架的安装与使用、WebService开发和部署的关键技术,以及如何处理复杂对象传递、异常和文件传递...