Axis1直接发布Webservice

8 篇文章 0 订阅

      这里介绍一种可以直接发布Webservice的方式,只需要在WEB-INF下添加server-config.wsdd文件即可。其实axis1生成deploy.wsddundeploy.wsdd文件的本质是为了生成server-config.wsdd

 

      下面为示例,项目目录结构,采用maven构建。

     

 

编写服务器端代码:


 

package server;

import javax.servlet.http.HttpServletRequest;

import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;

/**
 * @author		zhuc
 * @create		2013-2-28 上午9:34:29
 */
public class HelloService {

	/**
	 * @param name
	 * @return
	 */
	public String sayHello(String name) {
		MessageContext mc = MessageContext.getCurrentContext();
		HttpServletRequest request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
		System.out.println(request.getRemoteHost());

		System.out.println("服务器端收到:" + name);
		return "你好:" + name;
	}
}

 

在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 name="LocalResponder"
		type="java:org.apache.axis.transport.local.LocalResponder" />
	<handler name="Authenticate"
		type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
	<handler name="URLMapper"
		type="java:org.apache.axis.handlers.http.URLMapper" />
	
	<service name="HelloService" type="" provider="java:RPC" style="rpc"
		use="encoded">
		<parameter name="scope" value="Request" />
		<parameter name="className"
			value="server.HelloService" />
		<parameter name="allowedMethods" value="*" />
	</service>

	
	<transport name="local">
		<responseFlow>
			<handler type="LocalResponder" />
		</responseFlow>
	</transport>
	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
			<handler
				type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestFlow>
	</transport>
</deployment>

 

web.xml内容为:

 

<!DOCTYPE web-app PUBLIC
	 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
	 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>
  
	<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>
	<servlet>
		<display-name>Axis Admin Servlet</display-name>
		<servlet-name>AdminServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
		<load-on-startup>100</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AdminServlet</servlet-name>
		<url-pattern>/servlet/AdminServlet</url-pattern>
	</servlet-mapping>
</web-app>

 

这会我们的发布工作已经完成,启动Jetty查看

 



 

发布成功!

 

我们客户端访问来实验下:

 

package client;

import javax.xml.rpc.ParameterMode;

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

/**
 * @author		zhuc
 * @create		2013-2-28 上午9:41:52
 */
public class Test1 {

	/**
	 * 访问webservices地址
	 */
	private String endpointURL;

	/**
	 * 调用webservices 服务的方法
	 */
	private String serviceMethod;

	/**
	 * 传递webservices 参数
	 */
	private Object[] paraMets;

	/**
	 * @return the endpointURL
	 */
	public String getEndpointURL() {
		return endpointURL;
	}

	/**
	 * @return the serviceMethod
	 */
	public String getServiceMethod() {
		return serviceMethod;
	}

	/**
	 * @return the paraMets
	 */
	public Object[] getParaMets() {
		return paraMets;
	}

	/**
	 * @param endpointURL the endpointURL to set
	 */
	public void setEndpointURL(String endpointURL) {
		this.endpointURL = endpointURL;
	}

	/**
	 * @param serviceMethod the serviceMethod to set
	 */
	public void setServiceMethod(String serviceMethod) {
		this.serviceMethod = serviceMethod;
	}

	/**
	 * @param paraMets the paraMets to set
	 */
	public void setParaMets(Object[] paraMets) {
		this.paraMets = paraMets;
	}

	/**
	 * @return
	 * @throws Exception
	 */
	public Object getRequestResult() throws Exception {
		Object object = null;
		Service service = new Service();
		Call call = null;
		call = (Call) service.createCall();
		call.setTargetEndpointAddress(new java.net.URL(endpointURL));
		call.setOperationName(serviceMethod);
		call.setReturnType(XMLType.XSD_STRING);
		call.addParameter(serviceMethod, XMLType.XSD_STRING, ParameterMode.IN);
		object = call.invoke(paraMets);
		return object;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test1 au = new Test1();
		au.setEndpointURL("http://localhost:8080/axis1/services/HelloService?wsdl");
		au.setParaMets(new Object[] { "zhuc" });
		au.setServiceMethod("sayHello");
		try {
			Object object = au.getRequestResult();
			System.out.println(object);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

客户端输出:

你好:zhuc

 

服务器端输出:

127.0.0.1
服务器端收到:zhuc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值