使用Axis开发WebService程序

所谓Web Service就是客户端以标准的SOAP消息将服务请求发给服务提供者,不论服务提供者用什么样的技术,Java、EJB、或者.NET执行相应的程序得到结果,然后将结果以SOAP消息返回给服务请求者。以axis为例,创建一个简单的Web Service

首先到http://ws.apache.org/axis/上去下载最新的axis版本。最新版本是axis-src-1_4.zip

NEWS (April 22, 2006): Axis 1.4 Final is now available!

 

第一步:创建WebService项目,命名为Webservice_Begin

解压axis-src-1_4.zip后,拷贝lib目录下最基本的jar包至项目WEB-INF/lib目录下,如下列表:

axis.jar

commons-discovery-0.2.jar

commons-logging-1.1.jar

jaxrpc.jar

mailapi_1_3_1.jar

wsdl4j-1.5.1.jar

junit-4.9-SNAPSHOT-20100512-0041.jar

 

第二步:创建WebService服务器端接口和实现类

package com.unis.p2p.server;
/**
 * WebService服务器端业务逻辑接口
 * 
 * @author Posey 2010-12-17
 */
public interface Hello {
	
	/**
	 * 接口方法:接收客户端WebService请求
	 * 
	 * @author Posey 2010-12-17
	 * @param message
	 * @return
	 */
	public String executeTaskList(String message);

}

 

package com.unis.p2p.server;

/**
 * WebService服务器端业务逻辑实现类
 * @author Posey 2010-12-17
 *
 */
public class HelloImpl implements Hello {

	/**
	 * 接收客户端WebService请求,具体执行相关操作
	 * 
	 * @author Posey 2010-12-17
	 */
	public String executeTaskList(String message) {
		return "OK|调用成功! " + message;
    }

}

 

第三步:修改WEB-INF/web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- ********************************************** -->
	
	<!-- WebService核心处理类 -->
	<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>/services/*</url-pattern>
	</servlet-mapping>
	
	<!-- ********************************************** -->

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>

 

第四步:创建WebRoot/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">

	<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper" />

	<service name="executeTask" provider="java:RPC">
		<parameter name="className" value="com.unis.p2p.server.HelloImpl" />
		<parameter name="allowedMethods" value="executeTaskList" />
	</service>

	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
		</requestFlow>
	</transport>
	
</deployment>

 

第五步:启动应用服务器,发布Web Service服务。

地址栏输入:http://127.0.0.1:8080/Webservice_Begin/services回车,如果没有错误提示,则恭喜你,你的Web Service已经发布成功。

点击wsdl,还可以看到具体的wsdl的配置信息如下:

  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" xmlns:intf="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" 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="executeTaskListResponse">
  <wsdl:part name="executeTaskListReturn" type="soapenc:string" /> 
  </wsdl:message>
- <wsdl:message name="executeTaskListRequest">
  <wsdl:part name="message" type="soapenc:string" /> 
  </wsdl:message>
- <wsdl:portType name="HelloImpl">
- <wsdl:operation name="executeTaskList" parameterOrder="message">
  <wsdl:input message="impl:executeTaskListRequest" name="executeTaskListRequest" /> 
  <wsdl:output message="impl:executeTaskListResponse" name="executeTaskListResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="executeTaskSoapBinding" type="impl:HelloImpl">
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="executeTaskList">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="executeTaskListRequest">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://server.p2p.unis.com" use="encoded" /> 
  </wsdl:input>
- <wsdl:output name="executeTaskListResponse">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" use="encoded" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="HelloImplService">
- <wsdl:port binding="impl:executeTaskSoapBinding" name="executeTask">
  <wsdlsoap:address location="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

 

第六步:创建WebService客户端测试类

/Webservice_Begin/test/com/unis/p2p/client/WebServiceTest.java

package com.unis.p2p.client;

import java.net.URL;   

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

/**
 * 类说明:Client端测试类,发出请求
 * @author Posey 2010-12-17
 *
 */
public class WebServiceTest {
	
	@Test
	public void testExecuteTask() throws Exception {
		String res = "";
		
		String ss = "ERR|2352|5683|2235|8428";
		String[] str = ss.split("\\|");
		String tempMsg = "";
		for (int i = 1; i < str.length; i++) {
			tempMsg += str[i] + ",";
		}
		tempMsg = tempMsg.substring(0, tempMsg.length()-1);
		
		//调接口
		res = this.executeTask("http://127.0.0.1:8080/Webservice_Begin/services/executeTask", 
								"executeTaskList", 
								new Object[]{ tempMsg });
		
		System.out.println(res);	//输出结果
	}

	//核心处理方法
	private synchronized String executeTask(String url, String method, Object[] args) throws Exception {
		
		// 创建Service实例
		Service service = new Service();
		
		// 通过Service实例创建Call实例
		Call call = (Call) service.createCall();
		
		// 将WebService的服务路径加入到Call实例中,并为Call设置服务的位置
		URL webServiceUrl = new URL(url);
		call.setTargetEndpointAddress(webServiceUrl);
		
		// 调用WebService方法
		call.setOperationName(method);
		
		// 调用WebService传入参数
		String result = (String) call.invoke(args);
		
		return result;
	}
	
}

  

第七步:Run As - JUnit Test,执行成功
输出结果:OK|调用成功! 2352,5683,2235,8428

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值