`

axis1.4开发webservice

阅读更多

 

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

分享到:
评论
1 楼 我不是剑客 2017-06-09  
萌萌哒[b][/b]

相关推荐

    [原创]使用Axis1.4开发WebService

    ### 使用Axis 1.4开发WebService:关键技术与实践 #### 一、Axis 1.4 简介 Axis是一个开放源代码的Web服务引擎,它由Apache软件基金会开发和维护,支持SOAP协议,用于创建和部署Web服务。Axis 1.4版本是其稳定且...

    axis1.4及webService开发教程

    Axis1.4是Apache软件基金会提供的一个开源工具,专门用于开发和部署Web服务。本教程将详细讲解如何使用Axis1.4进行Web服务的开发,包括创建服务端和客户端。 首先,我们需要了解Web服务的基本概念。Web服务是通过...

    axis1.4开发webservice详细实例

    总结,使用Axis1.4开发Web服务涉及到的主要步骤包括创建服务类、生成WSDL、打包服务、部署服务以及编写和运行客户端。了解并掌握这些步骤,有助于开发者快速构建基于Java的Web服务应用程序。同时,注意保持代码的...

    springboot+axis1.4

    3. **创建WebService**:在Spring Boot应用中,你可以通过Axis1.4创建一个WebService。首先,定义一个Java类,包含你想要公开的方法。然后,使用Axis的工具生成服务端点接口和服务类。 4. **配置Spring Boot**:...

    手把手教你用axis1.4搭建webservice

    标题中的“手把手教你用axis1.4搭建webservice”是指一篇教程,旨在指导读者如何使用Axis1.4这个开源工具来创建和部署Web服务。Axis是Apache软件基金会的一个项目,它提供了一种简单的方式来实现Java到SOAP(Simple ...

    AXIS1.4webservice服务端和客户端例子

    AXIS1.4是Apache软件基金会开发的一个开源Java库,用于构建和使用Web服务。它提供了在Java平台上创建Web服务的工具和API,使得开发者能够快速实现SOAP(Simple Object Access Protocol)通信。在这个"AXIS1.4 ...

    手写Axis1.4发布WebService以及客户端调用

    标题中的“手写Axis1.4发布WebService以及客户端调用”指的是使用Apache Axis1.4框架来创建和消费Web服务的过程。Apache Axis是用于构建Web服务的一个开源工具,它允许开发者将Java类转换为Web服务,并且提供客户端...

    springboot使用axis1.4的demo

    Spring Boot以其简化配置和快速开发能力而受到广泛欢迎,而Axis1.4是Apache软件基金会的一个开源项目,主要用于生成和消费SOAP Web服务。当我们需要在Spring Boot应用程序中集成Web服务时,Axis1.4提供了一个强大的...

    axis1.4 部署webservice说明

    Axis1.4是Apache软件基金会开发的一个开源Java框架,用于创建和部署Web服务。这个框架在Web服务领域中扮演着重要角色,特别是在早期的Web服务实现中。标题和描述提到的知识点主要集中在如何使用Axis1.4来部署Web服务...

    axis1.4发布webservice接口步骤(java).docx

    ### Axis 1.4 发布WebService接口步骤详解 #### 一、概述 本文档旨在详细介绍如何使用Axis 1.4框架在Java环境下发布WebService接口。Axis是一个由Apache组织开发的开源项目,它提供了用于实现基于SOAP协议的Web...

    webservice axis1.4 开发资料

    2. **开发指南**:《Axis1.4开发指南》是理解Axis1.4的入门资料,通常会涵盖安装配置、创建服务、发布服务、调用服务等步骤,还会讲解如何处理各种错误和异常,以及如何调试Web服务。 3. **jar包**:在开发过程中,...

    Springboot集成axis1.4的demo

    当我们需要在Spring Boot项目中集成旧版的 Axis1.4 来发布Web服务时,这通常涉及到对传统SOAP(简单对象访问协议)服务的支持。以下将详细讲解如何在Spring Boot应用中集成Axis1.4以及使用wsdd文件发布Web服务。 ...

    【java项目整合Axis1.4webservice搭建实例】服务端代码

    在Java开发中,Axis1.4是一个常用的开源工具,用于构建和部署Web服务。本实例主要探讨如何将Axis1.4与Java项目整合,搭建Web服务的服务端。下面我们将详细阐述Axis1.4、Web服务以及如何在服务端进行设置。 一、 ...

    【java项目整合Axis1.4webservice搭建实例】客户端代码

    在Java开发中, Axis1.4 是一个广泛使用的开源框架,用于构建和部署Web服务。本文将深入探讨如何使用Axis1.4与Java项目整合,搭建Web服务客户端,并通过具体的客户端代码实例进行详解。 首先,我们需要理解Web服务...

    axis1.4带lib包java开发webservice客户端和服务端

    标题 "axis1.4带lib包java开发webservice客户端和服务端" 涉及到的是一个基于Java的Web服务开发工具包,Axis1.4,它包含必要的库文件(lib)来支持创建和消费Web服务。这个压缩包是为MyEclipse集成开发环境设计的,...

    webservice axis1.4服务实例

    - **简单易用**:Axis1.4提供了一个简单的命令行工具,可以快速地生成服务端点和客户端代理类,大大简化了Web服务的开发过程。 - **广泛的协议支持**:除了支持SOAP 1.1,Axis1.4还支持HTTP、HTTPS等多种传输协议...

    axis_1.4 for webservice 开发

    使用Axis 1.4开发Web服务的过程主要包括以下步骤: 1. **创建Web服务**:可以使用 Axis 提供的 wsdl2java 工具,从WSDL文件自动生成Java服务端代码,也可以直接编写Java类并使用 Axis 注解来定义服务接口。 2. **...

    Axis1.4_开发指南

    综上所述,Axis1.4开发指南是一份针对使用Axis1.4版本开发WebService的详尽文档,它介绍了WebService的基本概念、Axis框架的安装与使用、WebService开发和部署的关键技术,以及如何处理复杂对象传递、异常和文件传递...

Global site tag (gtag.js) - Google Analytics