`
qinjingkai
  • 浏览: 262142 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论
阅读更多

spring的强悍之处就在与它能和很多框架进行无缝的结合;在这里讲述一下它和axis的步骤(注意是axis不是axis2);

为了能说明问题,以一个demo为例;说到webservice自然不外乎服务端和客户端的开发了 ,在这里分别说明;

 

一 服务端的开发:

1 把需要的jar放到工程目录下(必须的包为:wsdl4j-1.5.1.jar,spring.jar,saaj.jar,mail-1.4.jar,log4j-1.2.8.jar,

   jaxrpc.jar,commons-logging-1.0.4.jar,commons-discovery-0.2.jar,axis-ant.jar,axis.jar,activation-1.1.jar)

 

2 开发源代码:因为这一步和业务相关,在这里不做讨论,但是必须有一个类继承ServletEndpointSupport,该类将发布成webService

 具体的代码形如:

package com.ecgit.eccm.webservice;



import javax.xml.rpc.ServiceException;
import javax.xml.rpc.server.ServiceLifecycle;

import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

import com.skywin.service.MyService;

public class InterchangeDataServiceImpl extends ServletEndpointSupport {

	private MyService service;
	
	protected void onInit() throws ServiceException {
		service=(MyService) getApplicationContext().getBean("MyService");
		
	}

	public String getMonthInterchange(String marketDate) {
		System.out.println("到达了Facade");
		service.doTrans(marketDate);
		return marketDate;
	}

}

 

 

业务层代码(仅仅写实现类,接口比较简单,所以省略):

package com.skywin.service;

import com.skywin.dao.MyDao;

public class MyServiceImpl implements MyService{
    private MyDao myDao;
	public void doTrans(String message) {
		myDao.doTrans(message);
		System.out.println("服务层运行了"+this.getClass().getName()+"----"+message);
		
	}
	public MyDao getMyDao() {
		return myDao;
	}
	public void setMyDao(MyDao myDao) {
		this.myDao = myDao;
	}
      
}
 

 

 

持久层代码(仅仅写实现类,接口比较简单,所以省略)

3 在web-inf目录下,建立一个名字为server-config.wsdd的文件,里面指定那些包的哪些类的哪些方法发布成webService,内容如下

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<handler name="URLMapper"
		type="java:org.apache.axis.handlers.http.URLMapper" />

	<!-- 系统服务 -->

	<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>

	<!-- 自定义服务 -->
	<service name="MPSWebService" provider="java:RPC">
		<parameter name="className" value="com.ecgit.eccm.webservice.InterchangeDataServiceImpl" />
		<parameter name="allowedMethods" value="*" />
		 
	</service>
	 <!--  
	<beanMapping languageSpecificType="java:com.skywin.mps.sa.model.SPParamObject"
      			qname="ns1:SPParamObject" xmlns:ns1="urn:BeanService" /> 
   
      <beanMapping languageSpecificType="java:com.skywin.mps.sa.model.OrderSubItem"
      			qname="ns2:OrderSubItem" xmlns:ns2="urn:BeanService" />
      			
     <beanMapping languageSpecificType="java:java.util.List"
      			qname="ns3:List" xmlns:ns3="urn:BeanService" />  
     <beanMapping languageSpecificType="java:java.util.ArrayList"
      			qname="ns4:ArrayList" xmlns:ns4="urn:BeanService" />  
      -->
	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
		</requestFlow>
	</transport>
</deployment>




 4在web-inf目录下,建立spring配置文件(名字为applicationContext.xml),内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	 <bean id="serviceFace" class="com.ecgit.eccm.webservice.InterchangeDataServiceImpl"></bean>
	 <bean id="MyService" class="com.skywin.service.MyServiceImpl">
	    <property name="myDao" ref="myDao"></property>
	 </bean>
	 <bean id="myDao" class="com.skywin.dao.MyDaoImpl"></bean>
</beans>

 

5 修改web.xml文件,主要是目的是增加一个和axis相关的servlet和启动spring ,内容大家都很熟悉了,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<servlet>
		<servlet-name>AxisServlet</servlet-name>
		<servlet-class>
			org.apache.axis.transport.http.AxisServlet
		</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>
	
	
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
</web-app>

 

到这里服务端的开发完毕了,如果每一步都没有问题,则将工程发布到应用服务器,在地址栏中输入:http://localhost:8080/aspring/services/MPSWebService?wsdl 回车就可以看到刚才分布的服务了;

 

二 客户端的开发:

    其实客户端没有怎么开发可言的,主要的工作就是利用服务的uri(即上面说的http://localhost:8080/aspring/services/MPSWebService?wsdl) 生成几个类,然后利用生成的类,传入参数就可以了,大体的步骤如下:

1 把 需要的jar包引入工程,需要的jar基本上和服务端的一样,只是不需要spring.jar而已,在这里不在赘述;

2 利用服务端提供的uri生成类:

          需要输入的命令如下

java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/aspring/services/MPSWebService?wsdl -p com.skywin.mps.webservice.client

其中org.apache.axis.wsdl.WSDL2Java为包axis里面的类,用户需要进入到对应目录执行上述的命令;该类在编译时候需要 其他的类,所以在执行上述命令中需要把下面的包加到classpath中 commons-logging-1.0.4.jar,commons-discovery-0.2.jar,jaxrpc.jar,saaj.jar,wsdl4j-1.5.1.jar

 

3 执行第2步的命令后,在client端可以得到四个类(InterchangeDataServiceImpl,InterchangeDataServiceImplService,InterchangeDataServiceImplServiceLocator,MPSWebServiceSoapBindingStub);

 

4,传入参数来调用服务端的服务:代码如下:

package aspring;

import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;


import com.skywin.mps.webservice.client.InterchangeDataServiceImpl;
import com.skywin.mps.webservice.client.InterchangeDataServiceImplService;
import com.skywin.mps.webservice.client.InterchangeDataServiceImplServiceLocator;


public class Test {
	
	
	public static void main(String[] args) throws ServiceException, RemoteException {
		InterchangeDataServiceImplService server= new InterchangeDataServiceImplServiceLocator();
	    InterchangeDataServiceImpl serverDo=server.getMPSWebService();
	    serverDo.getMonthInterchange("funk");
	}
	
	
	
}

  另外客户端也可以直接书写如下程序,运行下面的类也可以得到和上面一样的结果

package aspring;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class Test2 {
	
	public static void main(String[] args) {
		
		

          try 

          {

                 String wsdlUrl= "http://localhost:8080/aspring/services/MPSWebService?wsdl";

                 String nameSpaceUri = "http://localhost:8080/aspring/services/MPSWebService";

                 // 创建调用对象 <o:p> </o:p>

                 Service service = new Service();

                 Call call = null;

                 call = (Call) service.createCall();

                 // 调用 getMessage

                 System.out.println(">>>getMessage");

                 call.setOperationName(new QName(nameSpaceUri, "getMonthInterchange"));

                 call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));

                 String ret = (String) call.invoke(new Object[] { "ABC" });

                 System.out.println("return value is " + ret);

          } 

          catch (Exception e) 

          {

                 e.printStackTrace();

          } 
		
	}

}
 

 

三下载说明:asrping为服务端工程,aspringClient为客户端工程;鉴于流量问题,两个工程中的lib目录中都没有jar包,如果想下载的 话,只需要把lib_001,lib_002中的包放到工程的lib目录就可以了(由于流量问题spring.jar和axis.jar没有上传)

 

分享到:
评论
4 楼 dplead 2011-03-08  
多谢共享,让我对这方面的了解有个好的开始
3 楼 qinjingkai 2010-10-13  
bushkarl 写道
按照您的方法试了下能跑起来了。很方便哦

呵呵,多谢关注!
2 楼 bushkarl 2010-10-12  
按照您的方法试了下能跑起来了。很方便哦
1 楼 liaofeng_xiao 2010-06-12  
如果服务器端和客户端不是运行在同一个spring容器中,

InterchangeDataServiceImpl 还有什么用?


再启动一个项目,作为客户端调用InterchangeDataServiceImpl,能够或得到Spring容器中的Bean么?

相关推荐

    使用Axis2整合Spring(二)

    将Axis2与Spring整合的主要目的是利用Spring的DI和AOP特性来管理和控制Web服务的生命周期。这可以通过在Axis2中使用SpringBeanServiceHost和SpringBeanAxisServlet实现。SpringBeanServiceHost允许将Spring的bean...

    spring与axis的整合

    #### 一、Spring与Axis整合概述 Spring与Axis的整合,是指在Java环境中利用Spring框架管理和配置Axis Web服务的一种技术。这种整合方式充分利用了Spring框架的强大功能(如依赖注入、面向切面编程等)以及Axis作为...

    axis2整合spring

    当我们谈论"Axis2整合Spring"时,我们实际上是在讨论如何将这两个框架结合在一起,以实现更强大、更灵活的分布式服务架构。 首先,让我们深入理解 Axis2。Axis2 是基于 Axis1 进行重构的,它提供了一种模块化的结构...

    spring和axis 整合

    当我们谈论"Spring和Axis2整合"时,我们实际上是在讨论如何将Spring的优秀特性应用到基于Axis2的Web服务中,以提高服务的管理和维护效率。这种整合通常涉及到以下关键步骤: 1. **配置Spring上下文**:首先,我们...

    axis 和spring 集成

    "工具"标签可能意味着会介绍一些辅助工具,比如IDE插件、构建工具(如Maven或Ant)以及服务器环境(如Tomcat),这些工具在整合Axis和Spring时可能会用到。 在提供的文件名称列表中,我们看到: - `.classpath`和`....

    axis2+spring webservice

    描述中提到的“简单例子:axis2整合spring发布webservice”,意味着我们将学习如何将这两个框架结合,以便通过Spring来管理和控制Web服务的生命周期,同时利用Axis2的Web服务处理能力。此外,“以及session的管理”...

    Axis2与Spring整合发布多个WebService

    在IT行业中,开发Web服务是常见的任务,而Axis2和Spring框架的整合为开发者提供了强大的工具来实现这一目标。本文将深入探讨如何利用这两个技术来发布多个WebService,并着重讲解项目管理和整合过程。 首先,让我们...

    spring-axis2-test.rar_Axis2 Spring3_axis2_axis2 spring3_axis2 s

    ”这意味着项目的核心功能是展示如何将Apache Axis2与Spring 3框架整合,以便利用Spring的依赖注入和管理能力来构建和控制Web服务。此外,资料是一个MyEclipse的Web工程,意味着它是用MyEclipse IDE创建的,开发者...

    spring axis2整合

    整合Spring和Axis2的主要目的是利用Spring的灵活性和管理能力来控制Axis2的生命周期,以及通过Spring的IoC容器管理Web服务的部署和调用。这样可以避免在代码中硬编码Web服务客户端和服务器端的实例化,使得代码更加...

    axis2+spring整合实例

    标题"axis2+spring整合实例"表明了这个压缩包内容是关于如何将Apache Axis2服务框架与Spring框架进行集成的实践案例。Apache Axis2是用于构建Web服务和SOA(Service-Oriented Architecture)的高性能、灵活的开源...

    Spring整合axis2经典

    整合Spring和Axis2,主要是为了利用Spring的依赖注入和管理能力,以及Axis2的Web服务处理能力。整合过程主要包括以下步骤: - 配置Spring容器:首先在Spring配置文件中定义Web服务的bean,这些bean通常代表了服务...

    axis2 + spring3.2.0

    通过这样的整合,开发人员可以充分利用Spring的便利性和Axis2的Web服务功能,构建出高效且易于维护的企业级应用。 在提供的链接(http://blog.csdn.net/linlinv3/article/details/9017767)中,你可以找到更具体的...

    springboot集成axis2-1.7.9实例

    在本文中,我们将深入探讨如何将Apache Axis2与Spring Boot集成,以构建一个高效、可扩展的Web服务应用。Apache Axis2是Java平台上的一个Web服务框架,它提供了高性能、灵活的服务开发和部署机制。而Spring Boot是...

    Axis2 Spring整合POJO开发Web服务

    当我们谈论"Axis2 Spring整合POJO开发Web服务"时,这意味着我们将使用Axis2来创建Web服务,并通过Spring框架来管理和控制这些服务,同时利用POJO(Plain Old Java Object)作为业务逻辑的核心。 首先,让我们深入...

    axis2+spring2.5整合(webservice)

    当我们谈论“Axis2+Spring2.5整合(Web服务)”时,我们指的是将Apache Axis2和Spring框架结合在一起,以便更高效地开发和管理Web服务。 Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了SOAP消息...

    Axis2WebService与Spring的整合

    5. **整合Spring AOP和事务管理**: 通过Spring的AOP,我们可以方便地为Web服务接口添加日志、安全检查、事务控制等切面。此外,Spring的事务管理功能可以确保Web服务操作的原子性和一致性。 6. **测试和调试**: ...

    Spring集成axis2实现webservice所用到的包

    通过整合Spring和Axis2,我们可以利用Spring的依赖注入(DI)和管理功能,同时享受Axis2的高性能和易用性。 集成Spring和Axis2的过程大致分为以下几个步骤: 1. **配置Axis2**:在Spring项目中,首先需要将Axis2的...

    axis2-spring-1.5.4.jar

    《 Axis2 与 Spring 整合详解:axis2-spring-1.5.4.jar 入门指南》 在Java Web服务开发领域,Apache Axis2 和 Spring 框架都是不可或缺的重要工具。Apache Axis2 是一个高效且可扩展的Web服务引擎,用于处理SOAP...

Global site tag (gtag.js) - Google Analytics