`
fengfeng925
  • 浏览: 104845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Axis创建Web Service服务

阅读更多
   先简短的说一下Web Service的概念,简略的总结一下:所谓Web Service就是客户端以标准的SOAP消息将服务请求发给服务提供者,不论服务提供者用什么样的技术,Java、EJB、或者.NET执行相应的程序得到结果,然后将结果以SOAP消息返回给服务请求者。

    下面以Axis为例,创建一个简单的Web Service。首先到http://ws.apache.org/axis/上去下载最新的axis版本。最新版本是axis-1.4的。下载之后观察其目录,lib下就是所要用到的所有jar包了。这里少2个jar包,分别是activation.jar和mail.jar,需要单独下载。

    好了,现在我们创建一个Web Service项目,命名为webservice_begin。首先把lib目录下的所有jar包拷贝到WEB-INF的lib目录下。ok,现在我们创建接口和实现类。代码如下
package server;

public interface Hello {

	public String getHello(String name);

}

package server;

public class HelloService implements Hello {
	
	public String getHello(String name) {
		return "hello, " + name;
	}
}


接着我们修改下web.xml文件。修改web.xml文件的目的是为创建一个Axis的Servlet。Axis Servlet最核心的实现类为org.apache.axis.transport.http.AxisServlet,然后定义一个Servlet的请求路径为services/*,客户端就可以通过这个路径发布SOAP的请求消息了,下面是修改后的web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" 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>
  </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>
</web-app>


接下来,要配置wsdd文件server-config.wsdd。server-config.wsdd将定义服务的名称,具体的实现类,以及发布的方法和属性等。将其放在src目录下,也就是当前应用的classpath路径下,具体内容如下
<?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">
  <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
  
  <service name="hello" provider="java:RPC">
  	<parameter name="className" value="server.HelloService"/>
  	<parameter name="allowedMethods" value="getHello"/>
  </service>
  
  <transport name="http">
  	<requestFlow>
  		<handler type="URLMapper"/>
  	</requestFlow>
  </transport>
</deployment>


好了,现在我们就可以发布Web Service服务了。
部署成功后,启动你的应用服务器,在地址栏下输入
http://localhost:8080/webservice_begin/services,如果没有错误提示,恭喜你,你的Web Service已经发布成功了。点击wsdl,还可以看到具体的wsdl的配置信息。
这里面主要定义了以下内容:本例子的目标空间和命名空间、输入和输出变量的结构类型、请求和响应的消息、wsdl的接口portType、接口操作(Operation)、绑定的传输协议,具体内容如下
  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://localhost:8080/webservice_begin/services/hello" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/webservice_begin/services/hello" xmlns:intf="http://localhost:8080/webservice_begin/services/hello" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <!-- 
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)

  --> 
- <wsdl:message name="getHelloRequest">
  <wsdl:part name="name" type="soapenc:string" /> 
  </wsdl:message>
- <wsdl:message name="getHelloResponse">
  <wsdl:part name="getHelloReturn" type="soapenc:string" /> 
  </wsdl:message>
- <wsdl:portType name="HelloService">
- <wsdl:operation name="getHello" parameterOrder="name">
  <wsdl:input message="impl:getHelloRequest" name="getHelloRequest" /> 
  <wsdl:output message="impl:getHelloResponse" name="getHelloResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="helloSoapBinding" type="impl:HelloService">
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getHello">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="getHelloRequest">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://server" use="encoded" /> 
  </wsdl:input>
- <wsdl:output name="getHelloResponse">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/webservice_begin/services/hello" use="encoded" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="HelloServiceService">
- <wsdl:port binding="impl:helloSoapBinding" name="hello">
  <wsdlsoap:address location="http://localhost:8080/webservice_begin/services/hello" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


到这里,服务器端的工作算是完成了。下面我们写一个客户端程序来试着调用一下。客户端程序可以是一个简单的javaProject。调用代码如下
package junit.test;

import java.net.URL;

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


public class WebServiceTest {
	
	@Test public void testInvoke() throws Exception{
		//标识WebService的具体路径
		String endpoint = "http://localhost:8080/webservice_begin/services/hello";
		//创建Service实例
		Service service = new Service();
		//通过Service实例创建Call实例
		Call call = (Call)service.createCall();
		//将WebService的服务路径加入到Call实例中,并为Call设置服务的位置
		URL url = new URL(endpoint);
		call.setTargetEndpointAddress(url);
		//调用WebService方法
		call.setOperationName("getHello");
		//调用WebService传入参数
		String res = (String)call.invoke(new Object[] {"fengfeng925"});
		System.out.println(res);

	}
}


运行测试用例,哈哈,greenbar,运行成功
输出为hello, fengfeng925




分享到:
评论
4 楼 zhaoy1233 2010-03-31  
谢谢,对初学者帮助很大
3 楼 carpenter 2009-12-03  
谢谢,刚学有很大帮助
2 楼 lbqxl0122 2009-09-04  
入门教程,对于我刚学这个的帮助非常大,谢谢了
1 楼 zl584521 2009-09-04  
帮助很大,简单易懂。并且步骤详细,谢谢楼主!

相关推荐

    Axis2创建web service快速入门

    Axis2创建web service快速入门

    MyEclipse7.0创建基于Axis的Web service

    通过该实验将掌握配置MyEclipse7.0的axis Web Service的开发环境,通过Top-Down方式创建、发布基于axis Web Service的基本步骤,进一步加深学生对XML、WSDL、SOAP等Web Service概念的理解。

    (原创)用Eclipse + Axis2+Tomcat创建Web Service

    (熬夜做成,希望多多看看,有一处错误,把单词wapper改为webapps,敬请原谅) 目录大纲: ...三、 Web Service 客户端的创建。 3.1 创建WSDL文件。 3.2 利用WSDL创建stub。 3.3 利用stub类测试服务。

    helios创建Web Service服务(axis2)

    helios创建Web Service服务

    用Axis2创建Web Service

    Axis2创建WebService,有详尽介绍,还有附图,本人进行过测试,可以使用

    如何使用Axis_CXF创建WS服务

    使用axis和CXF实现web service的说明文档。

    Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结

    Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结

    Spring Web Service实例

    Spring Web Service是Spring社区基于Spring提供的一个关注于创建”文档驱动”的Web Service的模块, 它的主要目标是方便基于”契约优先”(Contract-First)的SOAP服务的开发. 好像没有多少人讨论, 大多数的话题都是...

    在Eclipse中创建基于Axis2的web services

    3. 创建web工程 1). 建立一个 JavaProject 命名为 ws ,将 axis2 用户库加入到 build path 中。 2). 现在开始编写要发布的 WebSevice ,在 src 中建包 briup ,建立 Hello 类如下 Package pkg.service; public ...

    Axis2运行环境1

    1. axis2-1.1.1.rar中包含工程中所需的axis2的类包。 2. axis2.war是打包好的web应用。用于放在Tomcat中,当运行Tomcat后会自动解压。...具体的部署步骤和使用请参照《(原创)用Eclipse + Axis2+Tomcat创建Web Service》

    Axis2运行环境2

    1. axis2-1.1.1.rar中包含工程中所需的axis2的类包。 2. axis2.war是打包好的web应用。用于放在Tomcat中,当运行Tomcat后会自动解压。...具体的部署步骤和使用请参照《(原创)用Eclipse + Axis2+Tomcat创建Web Service》

    Developing Web Services with Apache Axis2

    这是最好的手把手教会你怎么去创建web service应用

    axis2-1.6.2

    Axis2创建WebService实例所需要的bin压缩包和war压缩包

    Apache Web Service(JAVA 必看)

    Woden项目是Apache Web Services项目演化而来的一个子项目,主要用来开发用于读/写、操作、创建WSDL文档的Java类库,在初始阶段支持WSDL2.0,但是随着开发的继续,将会支持各种版本的WSDL。 Woden主要包含了两部分...

    基于SOAP和Axis2的Web服务设计与实现

    Web Service作为SOA(Service Oriented Architecture)的最好实现...介绍了Web服务框架以及支撑Web服务的WSDL、SOAP、Axis2和JUDDI等相关理论知识,通过设计与实现一个例子来阐述Web服务创建、发布、查找和调用的整个过程.

    java SOAPHEADER的web service

    c# JSON返回格式的WEB SERVICE//www.jb51.net/article/16768.htm我这里是利用axis创建类包的,首先下载axis的压缩包,然后解压,把axis放到webapp下面。如果可以运行,就OK了。 c#创建的webservice自带的wsdl的,...

    编程入门_Eclipse教程

    3. 编写Web service程序 10 3.1. Axis2的简单WebService示例 10 3.1.1. 0配置POJO的Webservice 10 3.1.2. 用axis2的辅助工具发布、调用WebService 12 3.1.3. WebService会话Session的管理 24 3.1.4. 用Spring创建的...

    解决异构系统的通信和整合

    在TOMCAT-HOME/webapps/axis下创建MyMath.jws文件

    Java实现webservice实例

     一:首先创建个WEB工程,然后: http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家。  二:然后写wsdd 文件(注:其实这里真的不用,可以跳过第...

Global site tag (gtag.js) - Google Analytics