`
log_cd
  • 浏览: 1098529 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

集成axis开发webservice

阅读更多
一、基础知识
    Web Service主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。 Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
     Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface ( DII)
2、Stubs方式
3、Dynamic Proxy方式
名词解释:
    SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
    WSDL(网络服务描述语言,Web Services Description Language)是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。
    UDDI(通用描述、发现与集成服务,Universal Description, Discovery and Integration)目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
    JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。
   JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。
二、使用axis开发webservice例一
(1)要发布的服务端程序
package com.logcd.webservice;
import com.logcd.model.OpResult;
public class Calculator {
	public int add(int i1, int i2) {
		return i1 + i2;
	}
	public int subtract(int i1, int i2) {
		return i1 - i2;
	}
	public int multiply(int i1, int i2) {
		return i1 * i2;
	}
	public int divide(int i1, int i2) {
		return i1 / i2;
	}
	public OpResult getOpResult(int i1, int i2){
		OpResult result = new OpResult();
		result.setSum(add(i1, i2));
		result.setDifference(subtract(i1, i2));
		result.setProduct(multiply(i1, i2));
		result.setQuotient(divide(i1, i2));
		return result;
	}
}

(2)web.xml中配置AxisServlet
	<servlet>
	    <display-name>Apache-Axis Servlet</display-name>
	    <servlet-name>AxisServlet</servlet-name>
	    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
	</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>

(3)配置静态发布文件server-config.wsdd
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
    xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler" xmlns="http://xml.apache.org/axis/wsdd/">
    <globalConfiguration name="defaultClientConfig">
        <requestFlow name="RequestFlow1" type="">
            <handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="session"/>
            </handler>
            <handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="request"/>
                <parameter name="extension" value=".jwr"/>
            </handler>
        </requestFlow>
    </globalConfiguration>
    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
    <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
    <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
    <transport name="http" type="">
        <requestFlow name="RequestFlow1" type="">
            <handler name="Handler1" type="URLMapper"/>
            <handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
        </requestFlow>
    </transport>
    <transport name="local" type="">
        <responseFlow name="ResponseFlow1" type="">
            <handler name="Handler1" type="LocalResponder"/>
        </responseFlow>
    </transport>
    <service name="AdminService" type="" 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" type="" provider="java:RPC">
        <parameter name="allowedMethods" value="getVersion"/>
        <parameter name="className" value="org.apache.axis.Version"/>
    </service>
    <service name="Calculator" type="" provider="java:RPC" style="rpc" use="encoded">
        <parameter name="scope" value="Request"/>
        <parameter name="className" value="com.logcd.webservice.Calculator"/>
        <parameter name="allowedMethods" value="*"/>
        
        <!--
        	 typeMapping:需要自定义deserializer和serializer的时候使用这个标签
			beanMapping:使用axis默认的deserializer和serializer
         -->
		<beanMapping languageSpecificType="java:com.logcd.model.OpResult"
		 qname="ns:resp" xmlns:ns="urn:BeanService"
		 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
		 />
        
        <namespace>http://axis.userguide.samples</namespace>
    </service>
</deployment>

(4)调用测试
package com.logcd.webservice;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class CalcTest {
	   public static void main(String [] args) throws Exception {
	       try{
	           String endpoint = "http://127.0.0.1/js_test/services/Calculator";
	           Integer i1 = new Integer(1000);
	           Integer i2 = new Integer(1009);

	           Service service = new Service();
	           Call call = (Call) service.createCall();

	           call.setTargetEndpointAddress(new java.net.URL(endpoint));
	           call.setOperationName("add");
	           call.addParameter("i1", XMLType.XSD_INT, ParameterMode.IN);
	           call.addParameter("i2", XMLType.XSD_INT, ParameterMode.IN);
	           call.setReturnType(XMLType.XSD_INT);

	           Integer ret = (Integer) call.invoke(new Object[] {i1, i2});
	           
	           System.out.println("Got result : " + ret);
	       }
	       catch(Exception e){
	           e.printStackTrace();
	       }
	   }
}

package com.logcd.webservice;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import com.logcd.model.OpResult;
public class ObjResultTest {
	public static void main(String[] args) throws Exception {
		try {
			String endpoint = "http://127.0.0.1/js_test/services/Calculator";
			Integer i1 = new Integer(1009);
			Integer i2 = new Integer(1000);
			
			Service service = new Service();
            Call call = (Call) service.createCall();
            QName qn = new QName("urn:BeanService","resp");
            //注册 bean
            call.registerTypeMapping(OpResult.class, qn, 
            		new BeanSerializerFactory(OpResult.class, qn), 
            		new BeanDeserializerFactory(OpResult.class, qn));

            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.setOperationName(new QName("http://axis.userguide.samples","getOpResult"));

			OpResult ret = (OpResult) call.invoke(new Object[] { i1, i2 });

			System.out.println("the operation result following:");
			System.out.println("sum = " + ret.getSum());
			System.out.println("difference = " + ret.getDifference());
			System.out.println("product = " + ret.getProduct());
			System.out.println("quotient = " + ret.getQuotient());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

三、例二,使用Spring的ServletEndpointSupport来实现WebService
(1)、接口和实现
package com.logcd.service;

public interface IHelloWorld {
	public String getMessage(String name);
}

package com.logcd.service.impl;

import com.logcd.service.IHelloWorld;

public class HelloWorldImpl implements IHelloWorld {

	private String helloStr;

	public String getMessage(String name) {
		return helloStr + ":" + name;
	}

	public String getHelloStr() {
		return helloStr;
	}

	public void setHelloStr(String helloStr) {
		this.helloStr = helloStr;
	}

}

(2)、使用ServletEndpointSupport
package com.logcd.webservice;

import javax.xml.rpc.ServiceException;

import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

import com.logcd.service.IHelloWorld;

public class JaxRpcHelloWorld extends ServletEndpointSupport implements IHelloWorld{

	private IHelloWorld helloWorld;
	  
	protected void onInit() throws ServiceException {
	//在Spring容器中获取Bean的实例
		helloWorld = (IHelloWorld) getApplicationContext().getBean(
	            "helloWorld");
	}
	  
	public String getMessage(String name){
		return helloWorld.getMessage(name);
	}

}

(3)、web.xml和applicationContext.xml
<?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" >

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

	<!--axis需要的Servlet -->
    <servlet>
        <servlet-name>axis</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

	<!--axis的Web Service的Web发布路径-->
    <servlet-mapping>
        <servlet-name>axis</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

</web-app>

<?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="helloWorld" class="com.logcd.service.impl.HelloWorldImpl">
        <property name="helloStr">
        	<value>Say Hello to :</value>
        </property>
    </bean>
</beans>

(4)、server-config.wsdd
<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="HelloWorld" provider="java:RPC">
    	<parameter name="className" 
            value="com.logcd.webservice.JaxRpcHelloWorld"/>
      	<parameter name="allowedMethods" value="*"/>
    </service>
    
    <transport name="http">
      <requestFlow>
          <handler type="URLMapper"/>
      </requestFlow>
    </transport>
    
</deployment>

(5)、测试
package com.logcd.test;

import java.net.URL;

import javax.xml.namespace.QName;

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

public class testWebServiceClient {

	public static void main(String[] args) {
		try {
			String wsdlUrl = "http://localhost:8088/webService/services/HelloWorld?wsdl";
			String nameSpaceUri = "http://localhost:8088/webService/services/HelloWorld";
			
			Service service = new Service();
			Call call = null;
			call = (Call) service.createCall();
			
			System.out.println(">>>getMessage");
			call.setOperationName(new QName(nameSpaceUri, "getMessage"));
			call.setTargetEndpointAddress(new URL(wsdlUrl));
			String ret = (String) call.invoke(new Object[] { "ABC" });
			System.out.println("return value is " + ret);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
分享到:
评论

相关推荐

    SpringBoot开发WebService之Axis示例

    在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...

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

    本篇文章将详细介绍如何在Spring中集成Axis2来实现Web服务,并且会提及相关的Jar包。 首先,让我们理解Spring与Axis2集成的基础知识。Spring框架提供了一个服务导向架构(SOA)的支持,允许开发者轻松地创建和消费...

    Eclipse用Axis框架开发WebService

    2. **Eclipse 集成 Axis 开发 WebService**: Eclipse 是一个广泛使用的 Java IDE,通过 Axis 插件,可以在 Eclipse 中方便地创建和调试 Web 服务。这使得开发者能够在熟悉的环境中进行 WebService 开发,无需离开 ...

    axis开发webservice客户端

    标题中的“axis开发webservice客户端”指的是使用Apache Axis框架创建并使用Web服务客户端的过程。Apache Axis是Java平台上的一个开源工具,它简化了SOAP(Simple Object Access Protocol)Web服务的开发,包括...

    spring+axis集成webservice

    本文将深入探讨如何使用Spring与Axis进行集成,以便开发和消费Web服务。 首先,让我们了解Spring和Axis的基本概念。Spring是一个开源Java框架,它为构建灵活、模块化且可测试的应用程序提供了强大的支持。它包含多...

    eclipse+AXIS开发webservice.doc

    - AXIS库的集成:将AXIS的lib目录下的jar文件复制到Tomcat的common/lib目录,确保服务器能够识别和处理Web服务。 3. **开发Web服务**: - 创建一个新的Dynamic Web Project,这是Java Web应用程序的基础。 - ...

    axis 发布webservice的步骤

    为了更好地理解和实践这些步骤,可以参考给定的文档“Eclipse开发Axis_WebService实例总结_20100430.doc”。这个文档通常会包含详细的步骤、截图以及可能遇到的问题和解决方案,对于初学者非常有帮助。 总结,发布...

    Axis2WebService与Spring的整合

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方式,而Axis2是Apache软件基金会开发的一个流行的Java Web服务框架。Spring框架则是Java企业级应用的事实标准,提供了强大的依赖注入、AOP(面向切面编程)等...

    Axis开发WebService 指南

    本文将深入探讨如何利用Axis开发WebService,以及相关的技术要点。 首先,了解WebService的基础概念是至关重要的。WebService是一种基于开放标准(如XML、WSDL和SOAP)的互联网应用程序,它能够跨平台、跨语言地...

    axis2开发webservice

    5. Eclipse集成Axis2: - 安装Axis2插件:在Eclipse Marketplace中搜索并安装Axis2插件,如"Axis2 Web Service Developer Tools"。 - 创建Web服务项目:在Eclipse中新建一个Axis2 Web服务项目,选择服务实现和WSDL...

    eclipse+AXIS开发webservice.pdf

    【标题】: 使用Eclipse和AXIS开发WebService的步骤详解 【描述】: 本文档详细介绍了如何利用Eclipse集成开发环境和AXIS框架来创建并发布WebService。 【标签】: Eclipse 【部分内容】: 在开发基于Java的...

    使用Axis+Eclipse开发webservice

    Axis 是 Apache 维护的开源工具,它提供了生成服务端和客户端代码的能力,而 Eclipse 则提供了一个集成的开发环境,方便创建、调试和部署 Web Service。通过理解 Web Service 的概念、工作原理以及 Axis 和 Eclipse ...

    Java-tomcat-axis2开发webservice返回json数据

    标题“Java-tomcat-axis2开发webservice返回json数据”涉及的是使用Java、Tomcat服务器以及Axis2框架来创建Web服务,并返回JSON格式的数据。这是一个常见的技术组合,用于构建RESTful API或者提供服务化接口。下面...

    AXIS入门指南-webservice

    本指南旨在为初学者提供AXIS框架下开发WebService的详细步骤,涵盖了从获取开发资源、生成 stub、编写服务器端代码到客户端测试的全过程。AXIS是一个开源的Java库,它提供了创建、部署和使用Web服务的工具,是基于...

    axis2发布webservice和调用axis2服务接口

    这可以通过 Axis2的命令行工具或集成开发环境(IDE)如Eclipse中的插件完成。打包过程中,需要包含服务类、服务描述文件(如`services.xml`)和其他必要的依赖。 3. **部署服务**:将生成的`.aar`包放入Axis2服务器...

    用eclipse+xdoclet+axis开发WebService.pdf

    在使用Eclipse集成开发环境配合XDoclet和Axis开发WebService的背景下,本文将详细介绍相关的知识点和步骤。首先需要了解的是,WebService是一种可让应用程序通过网络(尤其是互联网)进行通信的接口和协议。它通常...

    axis2 webservice开发指南.pdf

    ### Axis2 WebService 开发指南知识点详述 #### 一、Axis2 WebService 技术概览 **Axis2** 是Apache的一个开源项目,旨在提供一个高性能、灵活且可扩展的Web服务框架,用于实现基于SOAP协议的Web服务。与前代产品*...

Global site tag (gtag.js) - Google Analytics