最来研究XML_RPC的使用,网络上比较少,找了很久才在csdn找到一篇比较适用的文章。不过那篇文章也就介绍XML_RPC的简单使用例子,没有用户验证。经过查看官网和尝试,终于把用户验证功能做出来了,这篇只介绍普通例子,用户验证下篇讲述。希望对需要学习的javaeye同仁和广大网友有所帮助。我这里使用的是XML_RPC3.1.3,附带jar文件。
XML-RPC参数类型标签如下表:
Tag Java Type 说明
<i4> or <int> Integer/int 4字节带符号整数值
<boolean> Boolean 0 (false) or 1 (true)
<string> String 字符串
<double> Double 双精度带符号浮点值
<dateTime.iso8601> java.util.Date 日期/时间
<base64> byte[] base64编码的二进制数据
<struct> java.util.Map 键值对,键为String类型,而值为任意有效类型
<array> Object[]
java.util.List 对象数组
Server端:
创建一个web工程,导入除client以外的4个jar包
业务功能类:
package demo.xmlrpc.action;
public class Calculator {
public int add(int i1, int i2) {
return i1 + i2;
}
public int subtract(int i1, int i2) {
return i1 - i2;
}
}
服务控制Servlet:
package demo.xmlrpc;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.XmlRpcServletServer;
import demo.xmlrpc.action.Calculator;
import demo.xmlrpc.action.HelloHandlerImpl;
public class Server extends HttpServlet {
private static final long serialVersionUID = 1L;
private XmlRpcServletServer server;
public void init(ServletConfig pConfig) throws ServletException {
super.init(pConfig);
try {
// 创建一个XmlRpcServletServer对象
server = new XmlRpcServletServer();
//设置XmlRpcServletServer对象的映射接收器
PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.addHandler("HelloHandler", HelloHandlerImpl.class);
phm.addHandler("Calculator", Calculator.class);
server.setHandlerMapping(phm);
// XmlRpcServletServer对象的其他设置
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl)server.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
} catch (XmlRpcException e) {
try {
log("Failed to create XmlRpcServer: " + e.getMessage(), e);
} catch (Throwable ignore) {
}
throw new ServletException(e);
}
}
public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse)
throws IOException, ServletException {
server.execute(pRequest, pResponse);
}
}
在web.xml文件添加如下内容:
<servlet>
<servlet-name>XmlRpcServer</servlet-name>
<servlet-class>demo.xmlrpc.Server</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XmlRpcServer</servlet-name>
<url-pattern>/XmlRpcServer</url-pattern>
</servlet-mapping>
创建一个包,里面添加一个配置文件,名字如下。两个名字一定不能变,这很雷人的,
框架规定的。
包名:org.apache.xmlrpc.webserver
文件名为:XmlRpcServlet.properties
文件内容为:Calculator=demo.xmlrpc.action.Calculator
Client端:
创建一个普通工程,导入除server以外的4个jar包
远程客户调用类:
package demo.xmlrpc;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class Client1 {
public static void main(String[] args) {
try {
// 客户端配置对象,并且设置用户名密码
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL(
"http://192.168.1.217:8080/XML_RPC/XmlRpcServer")); //需要根据自己的具体情况修改url
//创建一个XmlRpcClient对象,并给它绑定一个配置对象
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
// 创建参数集合
Vector<Integer> params= new Vector<Integer>();
params.addElement(3);
params.addElement(8);
Integer result=(Integer)client.execute("Calculator.add",params);
System.out.println(result);
} catch (MalformedURLException e) {
System.out.println(e.toString());
} catch (XmlRpcException e) {
System.out.println(e.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
部署启动Server端的web工程,运行Client端的程序。返回结果为11。
参考:
http://blog.csdn.net/billdavid/archive/2006/08/18/1095747.aspx
分享到:
相关推荐
### Apache XML-RPC 入门知识点详解 #### 一、XML-RPC 概念与应用场景 **XML-RPC(XML Remote Procedure Call)**是一种轻量级的远程过程调用协议,它允许在不同操作系统和语言环境之间进行数据交换。XML-RPC 使用...
在这个入门教程中,我们将探讨如何在Java环境中使用Apache XML-RPC创建一个简单的Servlet服务,并启动服务器线程。 首先,我们需要了解XML-RPC的基本原理。在XML-RPC中,客户端发送一个包含方法名和参数的XML请求到...
XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。...这不仅有助于你提升XML处理能力,也有利于你理解其他基于XML的技术,如XML数据库、XML-RPC等。
总结来说,"手把手xfire开发WS入门实例"涉及到的知识点涵盖了Web Service的基本概念、核心协议(SOAP和WSDL)、选择Web Service通信方式的比较、开发工具和框架(XFire和Axis),以及相关技术与SOA架构。通过学习...
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找...
本文将深入探讨Axis2 1.4.1版本的经典入门实例,通过Eclipse集成开发环境中的Axis2插件,帮助你快速理解和应用这一强大的Web服务工具。 一、Apache Axis2概述 Apache Axis2是Apache SOAP(Simple Object Access ...
【Dubbo入门实例Demo】是针对初学者设计的一个实践教程,旨在帮助新手快速理解并掌握Apache Dubbo这一高性能、轻量级的Java RPC框架。在学习过程中,新手往往会在配置、依赖、通信等方面遇到诸多问题,这个Demo就是...
XML-RPC(XML Remote Procedure Call)是另一种简单的方法,通过XML来实现远程过程调用,比REST更复杂,但比SOAP简单。 【Data Binding】 数据绑定是将业务对象和网络消息之间自动映射的过程,使得程序可以方便地...
站点的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf) Web Services: SOAP / XML-RPC 通过JDBC驱动程序的数据库 ⽬录: LDAP ⾯向消息的服务通过JMS Service: POP3, IMAP, SMTP FTP 服务 等等其他协议
Hessian的入门实例主要展示了如何创建一个简单的服务提供者和消费者。首先,我们需要定义一个服务接口,例如`HelloService`,包含一个或多个方法,这些方法将被远程调用。然后,我们需要实现这个接口并部署为一个...
在提供的"myname"文件中,可能包含了一个简单的EJB入门项目,可能包括源代码、部署描述符文件以及如何构建和运行该项目的说明。你可以通过阅读源代码了解bean的实现,查看ejb-jar.xml了解配置细节,并参照文档学习...
这个"**hessian入门实例**"旨在帮助初学者快速理解并应用Hessian技术,通过导入到MyEclipse这样的集成开发环境中,可以直接运行示例代码,从而直观地了解Hessian的工作原理。 首先,我们要理解什么是RPC。RPC允许一...
GWT入门与经典实例解析源码提供了一个学习和实践GWT开发的宝贵资源,下面将详细介绍GWT的关键概念、核心特性以及通过实例解析来深入理解其工作原理。 1. **GWT的安装与设置**: 在开始GWT项目之前,你需要安装Java...
- **2.5 超越简单调用**:探讨了如何利用XML-RPC实现更复杂的功能。 - **第三部分:SOAP** - **第3章 SOAP基础** - **3.1 SOAP入门**:概述了SOAP的基本概念和发展历程。 - **3.2 SOAP消息**:详细解释了SOAP...
【Dubbo新手入门实例HelloWorld(zookeeper)源码】是一个针对初学者的教程,旨在帮助初次接触Dubbo框架的人理解其基本概念和运作方式,并通过整合Zookeeper作为注册中心来实现服务的发现与调用。这个实例将涵盖以下几...
总的来说,gSOAP实例展示了如何使用gSOAP库在Linux环境中创建一个简单的SOAP服务,包括服务接口定义、工具使用、服务端和客户端的基本操作。理解这个例子有助于开发者快速入门gSOAP,进而开发更复杂的Web服务应用。
Dubbo新手入门实例“HelloWorld”是初学者学习分布式服务框架Dubbo的典型起点。这个实例结合了Zookeeper作为注册中心,帮助理解Dubbo的基本工作原理。以下将详细讲解涉及的知识点。 首先,Dubbo是一个高性能、轻量...
Web服务是一种基于网络...这个"HelloWorld"实例就是一个很好的起点,它展示了如何从头开始创建一个简单的Web服务。随着对Xfire的深入理解和实践,你可以处理更复杂的服务,包括数据绑定、安全性和事务管理等高级特性。