搭建Axis的WebService

来源:互联网 发布:网络管理协议snmp组成 编辑:程序博客网 时间:2024/05/16 17:00

准备:

到Apache官网下载Axis的包

http://axis.apache.org/axis/java/releases.html

下载后解压取WEB-INF-->lib下的jar放到项目工程


另外还需要添加activation.jar mail.jar


1. 配置web.xml

<?xml version="1.0" encoding="UTF-8"?><!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><listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><display-name>Apache- Axis Servlet</display-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>


2. 创建server-config.wsdd,放置在WEB-INF下,并配置

<?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="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>  <service name="PersonAction" provider="java:RPC">  <parameter name="allowedMethods" value="*"/>  <parameter name="scope" value="Request"/>  <parameter name="className" value="com.kerryzb.axis.PersonAction"/> </service> <transport name="http">  <requestFlow>   <handler type="URLMapper"/>   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>  </requestFlow> </transport> <transport name="local">  <responseFlow>   <handler type="LocalResponder"/>  </responseFlow> </transport> </deployment>

3. 编写service类及方法

<pre name="code" class="java">package com.kerryzb.axis;import java.rmi.Remote;public class PersonAction implements Remote {public String getName(String name){System.out.println(name);return "person name : "+name;}public String getPerson(String name, float high){String respxml = "<xml version=\"1.0\" encoding=\"UTF-8\"><name>"+name+"</name><high>"+high+"</high></xml>";System.out.println(respxml);return respxml;}}

#这里写了两个方法,分别是传一个参数和两个参数的写法

4. 在Tomcat中运行这个web工程,然后在客户端浏览器上访问

http://localhost:8080/TestWebService/services/PersonAction?method=getName&name=testname

http://localhost:8080/TestWebService/services/PersonAction?method=getPerson&name=testname&high=180.5

显示如上,WebService的服务端就写成功了。

5. 客户端调用WebService

<pre name="code" class="java">package com.hnisi.axis.client;import java.io.StringReader;import java.rmi.RemoteException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.rpc.ServiceException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.InputSource;public class CallService {public static void main(String[] args) throws ServiceException,RemoteException {Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress("http://localhost:8080/TestWebService/services/PersonAction");call.setOperationName("getPerson");call.addParameter("name", org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);call.addParameter("high", org.apache.axis.Constants.XSD_FLOAT,javax.xml.rpc.ParameterMode.IN);call.setReturnType(org.apache.axis.Constants.XSD_STRING);String response = (String) call.invoke(new Object[] { "testname",180.5f });System.out.println(response);parse(response);call = null;service = null;}public static void parse(String protocolXML) {try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();org.w3c.dom.Document doc = builder.parse(new InputSource(new StringReader(protocolXML)));Element root = doc.getDocumentElement();NodeList nodeList = root.getChildNodes();if (nodeList != null) {for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);System.out.println(node.getNodeName() + " = "+ node.getFirstChild().getNodeValue());}}} catch (Exception e) {e.printStackTrace();}}}



完整的工程请下载

http://download.csdn.net/detail/kerryzb/9550274




0 0
原创粉丝点击