用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)
java soap协议 xml
java soap协议 xml(实用版)目录1.Java 与 SOAP 协议2.XML 在 SOAP 协议中的作用3.Java 中使用 SOAP 协议与 XML 的实例正文【1.Java 与 SOAP 协议】Java 是一种广泛使用的编程语言,其跨平台特性使得开发的应用程序可以在不同的操作系统上运行。
在网络编程方面,Java 提供了对各种网络协议的支持,其中就包括了 SOAP 协议。
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种用于在分布式环境中交换信息的轻量级协议。
它包含了三个部分:SOAP 封装、SOAP 编码规则和 SOAP 的 RPC 表示。
SOAP 协议可以让不同的系统之间,即使它们使用不同的编程语言和数据格式,也能进行通信。
【2.XML 在 SOAP 协议中的作用】XML(eXtensible Markup Language,可扩展标记语言)是一种用于描述数据结构的文本格式。
在 SOAP 协议中,XML 扮演了重要的角色。
首先,SOAP 消息的结构是用 XML 来描述的,包括了头部、体和尾部。
其中,头部包含了消息的目标地址、操作名称等元数据信息;体则包含了实际的数据和操作结果;尾部则用于表示消息的结束。
其次,XML 还可以用于 SOAP 协议中的数据编码。
SOAP 协议支持多种数据编码方式,如 RPC、Literal 等。
使用 XML 进行数据编码时,数据被组织为一个嵌套的树形结构,这种结构可以在网络传输过程中保持不变。
【3.Java 中使用 SOAP 协议与 XML 的实例】在 Java 中,可以使用 JAX-RPC(Java API for XML Registry and RPC)库来实现 SOAP 协议。
JAX-RPC 提供了客户端和服务器端之间的通信功能,支持远程方法调用(RMI)和 Web 服务。
以下是一个简单的 Java 程序示例,展示了如何使用 JAX-RPC 创建一个基于 SOAP 协议的 Web 服务:```javaimport javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface HelloWorld {@WebMethodString sayHello(String name);}```在服务器端,我们可以通过编写一个实现了 HelloWorld 接口的类,并部署到 JAX-RPC 服务器上。
java soap调用
Java SOAP调用SOAP(Simple Object Access Protocol)是一种用于在网络上交换结构化信息的协议。
它基于XML,用于在Web服务之间进行通信。
Java可以使用SOAP协议来调用远程的Web服务。
本文将介绍如何使用Java调用SOAP服务,并提供一些示例代码和最佳实践。
目录•SOAP简介•Java SOAP调用的步骤–生成SOAP客户端代码–创建SOAP连接–构建SOAP请求–发送SOAP请求–解析SOAP响应•示例代码•最佳实践•总结SOAP简介SOAP是一种基于XML的通信协议,用于在网络上进行结构化数据的交换。
它定义了一种标准的消息格式和通信协议,使得不同平台和编程语言之间的应用能够相互通信。
SOAP消息由一个envelope元素包围,其中包含一个header元素和一个body元素。
header元素用于传递一些元数据,而body元素用于传递实际的数据。
SOAP协议通常使用HTTP作为传输协议,但也可以使用其他协议,如SMTP、FTP等。
Java SOAP调用的步骤要在Java中调用SOAP服务,需要以下步骤:1. 生成SOAP客户端代码首先,需要根据SOAP服务的WSDL(Web Services Description Language)文件生成SOAP客户端代码。
WSDL文件描述了SOAP服务的接口和方法。
可以使用Java的工具,如wsimport命令或Apache CXF框架来生成SOAP客户端代码。
生成的代码将包含用于调用SOAP服务的Java类和方法。
2. 创建SOAP连接在Java中,可以使用JAX-WS(Java API for XML Web Services)或Apache CXF等工具来创建SOAP连接。
使用JAX-WS,可以通过创建一个javax.xml.ws.Service对象来创建SOAP连接。
需要提供WSDL文件的URL和服务名称作为参数。
java rpc调用实例
java rpc调用实例Java RPC调用实例RPC(Remote Procedure Call)是一种远程过程调用的通信协议,它可以使得程序在不同的计算机上通过网络进行通信和交互。
Java作为一种广泛使用的编程语言,也提供了丰富的支持来实现RPC调用。
在本文中,我们将通过一个具体的示例来介绍Java中的RPC调用。
1. 准备工作在开始之前,我们需要进行一些准备工作。
首先,我们需要有两台计算机,一台作为服务端,一台作为客户端。
其次,我们需要安装Java开发环境(JDK)并配置好环境变量。
2. 定义接口首先,我们需要定义一个接口,用于指定远程调用的方法。
假设我们要实现一个简单的计算器服务,可以进行加法和乘法运算。
我们可以创建一个名为CalculatorService的接口,其中包含add和multiply两个方法:javapublic interface CalculatorService {int add(int a, int b);int multiply(int a, int b);}3. 实现服务端接下来,我们需要实现服务端的代码。
在这个例子中,我们使用Java中的RMI(Remote Method Invocation)来实现RPC调用。
RMI是Java中用于实现远程对象调用的机制。
首先,我们需要创建一个CalculatorServiceImpl类来实现CalculatorService接口:javaimport java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class CalculatorServiceImpl extends UnicastRemoteObject implements CalculatorService {protected CalculatorServiceImpl() throws RemoteException {super();}@Overridepublic int add(int a, int b) {return a + b;}@Overridepublic int multiply(int a, int b) {return a * b;}然后,我们可以创建一个服务端类CalculatorServer来启动服务并注册对应的远程对象:javaimport java.rmi.Naming;import java.rmi.registry.LocateRegistry;public class CalculatorServer {public static void main(String[] args) {try {CalculatorService calculator = new CalculatorServiceImpl();LocateRegistry.createRegistry(1099);将远程对象绑定到对应的RMI注册表中Naming.rebind("localhost/CalculatorService", calculator);System.out.println("Server started.");} catch (Exception e) {System.err.println("Server exception: " +e.toString());e.printStackTrace();}}在这段代码中,我们首先创建了一个CalculatorServiceImpl对象实例,然后创建一个RMI注册表并将CalculatorServiceImpl对象绑定到该注册表中。
java rpc 方法
java rpc 方法===========一、介绍----RPC,即远程过程调用(Remote Procedure Call),是一种常见的编程范式,允许在两个不同的地方调用相同的数据结构和控制流程。
在Java环境中,使用RPC可以实现组件之间的解耦,提高系统的可扩展性和可维护性。
本篇文档将介绍Java中常见的RPC方法及其实现。
二、几种常见的Java RPC方法-------------1. **Java RMI(远程方法调用)**:Java RMI是Java提供的用于在不同Java虚拟机(JVM)之间进行通信的一种机制。
它允许远程对象调用在客户端代码中定义的方法。
2. **HTTP/RESTful API**:使用HTTP协议进行通信,通过定义一系列的HTTP方法(如GET、POST、PUT、DELETE等)来实现RPC调用。
Java中常用的框架如Spring MVC、Jersey等可以方便地实现RESTful API。
3. **gRPC**:gRPC是Google开发的一种高性能、开源的RPC框架,它支持多种语言,包括Java。
通过gRPC,可以在不同的系统之间进行高性能、高可靠性的通信。
4. **Thrift**:Thrift是一种跨语言的远程服务调用(RPC)框架,它支持多种编程语言,包括Java。
使用Thrift,可以很方便地定义服务接口,并生成相应的客户端和服务器代码。
5. **Dubbo**:Dubbo是阿里巴巴开源的一个高性能、轻量级的RPC框架,它支持多种通信协议和传输层协议,如HTTP/HTTPS、RMI、Kafka等,同时也支持负载均衡和容错。
三、Java RPC方法实现示例------------### 1. Java RMI示例首先,我们需要定义一个远程接口:```javainterface RemoteService extends Remote {void remoteMethod();}```接着,我们需要实现这个接口,并在服务器端注册这个远程对象:```javapublic class RemoteServiceImpl extends UnicastRemoteObject implements RemoteService {public RemoteServiceImpl() throws RemoteException { // 默认端口为1099,也可指定其他端口号}public void remoteMethod() {// 方法实现代码}}```在客户端,我们可以创建这个远程对象的引用并调用方法:```javaRemoteService remoteService = new RemoteServiceImpl(); // 创建远程对象引用remoteService.remoteMethod(); // 调用远程方法```### 2. HTTP/RESTful API示例(使用Spring MVC)首先,我们需要定义一个RESTful接口:```java@RestControllerpublic class RemoteServiceController {@GetMapping("/remoteMethod")public String remoteMethod() {// 方法实现代码return "远程方法调用成功";}}```然后,我们需要在前端发起HTTP请求来调用这个接口。
java rpc远程过程调用原理
java rpc远程过程调用原理Java RPC(Remote Procedure Call)远程过程调用是一种允许一台计算机(客户端)调用另一台计算机(服务器)上的程序或方法的技术。
这种技术使得客户端和服务器可以共享服务,从而实现了分布式系统的通信和协作。
Java RPC 的原理主要包括以下几个步骤:1. 定义接口:首先,需要定义一个接口,该接口包含了一些方法声明,这些方法将在远程服务器上实现。
2. 实现服务端:在服务器端,需要实现这个接口,并处理客户端的请求。
服务器端通常会监听一个特定的端口,等待客户端的请求。
3. 序列化:当客户端想要调用服务器上的方法时,它需要将请求和参数发送到服务器。
为了能够正确地传输数据,参数需要被序列化(转化为二进制格式)。
Java 提供了一些工具类(如ObjectOutputStream)来实现序列化。
4. 网络传输:客户端将序列化后的数据发送给服务器。
这个过程通常通过TCP/IP 协议完成。
5. 反序列化:当服务器收到数据后,需要将序列化的数据反序列化(从二进制格式转回原来的格式)。
Java 提供了一些工具类(如ObjectInputStream)来实现反序列化。
6. 执行方法:服务器反序列化数据后,会找到对应的方法并执行它,然后将结果返回给客户端。
7. 返回结果:服务器将执行结果序列化后通过网络发送给客户端。
8. 客户端接收结果:客户端收到序列化的结果后,将其反序列化为原来的格式并处理。
这就是 Java RPC 的基本原理。
实际的实现可能会更复杂,例如需要考虑安全性、性能优化、异常处理等问题。
此外,也有一些成熟的框架(如Apache Thrift、gRPC 等)可以帮助我们更方便地实现 Java RPC。
rpc实现方式
rpc实现方式一、什么是RPCRPC(Remote Procedure Call)即远程过程调用,是一种进程间通信方式。
它可以让程序像调用本地函数一样调用远程服务器上的函数,从而简化了分布式系统的开发。
二、RPC实现方式1. 基于HTTP协议的RPC实现方式基于HTTP协议的RPC实现方式主要有两种:SOAP和RESTful。
SOAP(Simple Object Access Protocol)是一种基于XML的协议,使用XML格式封装数据,并使用HTTP作为传输协议。
它需要使用WSDL(Web Services Description Language)描述服务接口,客户端通过解析WSDL文件来调用服务。
SOAP具有较强的扩展性和安全性,但也因此导致了较为复杂的开发和部署过程。
RESTful(Representational State Transfer)是一种基于HTTP协议设计的轻量级Web服务架构风格。
它使用HTTP动词来表示不同操作,如GET、POST、PUT和DELETE等,使用URL来定位资源,并使用JSON或XML格式传输数据。
RESTful风格简单易用,但对安全性和可扩展性要求较高。
2. 基于TCP/IP协议的RPC实现方式基于TCP/IP协议的RPC实现方式主要有两种:Thrift和gRPC。
Thrift是由Facebook开发的一个高效、可扩展且跨语言的RPC框架。
它使用IDL(Interface Description Language)来定义服务接口,支持多种编程语言,并提供了多种传输协议和序列化方式。
Thrift具有较高的性能和可扩展性,但需要编写IDL文件并生成代码。
gRPC是由Google开发的一个高性能、跨语言的RPC框架。
它使用Protocol Buffers作为数据格式,支持多种语言,并提供了多种传输协议和序列化方式。
gRPC具有较高的性能和可扩展性,同时也提供了丰富的功能,如流式处理、认证和负载均衡等。
java集成soap简书
Java集成SOAP简述一、SOAP简介SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在网络上进行远程过程调用(RPC)。
它使用标准的HTTP协议进行通信,可以在不同的操作系统、编程语言和网络环境中进行交互。
SOAP消息由XML构成,具有良好的可读性和可扩展性。
它允许不同的应用程序通过网络进行通信,使用SOAP消息传递数据、调用远程方法,并获取返回结果。
二、Java集成SOAPJava提供了丰富的API和工具,用于集成SOAP协议。
在Java中,我们可以使用以下几种方式来实现SOAP通信:1. JAX-WSJAX-WS(Java API for XML Web Services)是Java EE平台的一部分,提供了一套用于开发和部署Web服务的API。
它使用标准的SOAP协议进行通信,支持WSDL (Web Services Description Language)描述和生成工具。
使用JAX-WS,我们可以通过创建Java类和注解来定义Web服务,然后使用工具生成WSDL描述文件。
客户端可以根据WSDL文件生成相应的Java客户端代码,以便调用远程方法。
2. Apache AxisApache Axis是一个开源的SOAP引擎,用于构建和部署基于SOAP的Web服务。
它提供了一组API和工具,用于开发和集成SOAP服务。
使用Apache Axis,我们可以通过创建Java类和配置文件来定义Web服务。
然后,我们可以使用Axis提供的工具生成WSDL描述文件,并将Web服务部署到应用服务器上。
3. Apache CXFApache CXF是一个开源的Web服务框架,支持SOAP、REST和其他Web服务协议。
它集成了Apache Axis和XFire两个项目的优点,提供了一套强大的API和工具,用于开发和部署Web服务。
使用Apache CXF,我们可以通过创建Java类和注解来定义Web服务。
soap 连结方式
SOAP 连结方式SOAP(Simple Object Access Protocol)是一种基于 XML 的协议,用于在网络上进行应用程序之间的通信。
它提供了一种标准化的方式,使得不同平台上的应用程序能够相互交互和通信。
本文将介绍 SOAP 连结方式的基本原理、使用场景以及一些相关的工具和技术。
SOAP 基本原理SOAP 是一种基于文本的协议,它使用 XML 来编码消息。
SOAP 消息由一个包含方法调用和参数的 XML 文档组成。
这些消息可以通过 HTTP、SMTP、FTP 等不同的传输协议来传送。
在 SOAP 消息中,方法调用和参数被封装在<Envelope>元素中,并使用<Body>元素进行包装。
SOAP 还支持使用<Header>元素添加一些可选的头部信息。
SOAP 的基本原理可以概括为以下几个步骤:1.客户端构建 SOAP 请求消息,包含要调用的方法和相应的参数。
2.客户端将 SOAP 请求消息发送给服务端。
3.服务端接收到 SOAP 请求消息后,解析出方法和参数。
4.服务端执行相应的方法,并生成 SOAP 响应消息。
5.服务端将 SOAP 响应消息发送给客户端。
6.客户端接收到 SOAP 响应消息后,解析出结果。
SOAP 使用 XML 来描述消息的结构和内容,这使得它具有很好的可读性和可扩展性。
SOAP 还支持使用 WSDL(Web Services Description Language)来定义 Web 服务的接口和协议。
SOAP 的使用场景SOAP 的使用场景主要包括以下几个方面:1. Web 服务SOAP 是 Web 服务的核心协议之一。
通过使用 SOAP,开发人员可以轻松地构建跨平台、跨语言的 Web 服务。
SOAP 提供了一种标准化的方式,使得不同平台上的应用程序能够相互调用和通信。
2. 远程过程调用(RPC)SOAP 可以用作远程过程调用的协议。
Java RPC通信机制之XML-RPC
Java RPC通信机制之XML-RPC二、举例下面举一个实际运用XML-RPC进行RPC调用的例子,XML-RPC规范有多种针对不同语言的实现,这里我们使用的是Apache的XML-RPC3.0RC1。
在开始之前,需到/commons/index.html下载如下程序包:commons-codec-1.3(通用编码/解码算法实现,可参考/Java/Article/29795/1954?pf=true或/commons/codec/userguide.html来获得该软件包的详细信息)commons-httpclient-3.0.1(HTTP协议的客户端编程工具包,详细介绍见/developerworks/cn/opensource/os-httpclient/)将上述通用工具包解压后,拷贝其中的jar文件到XML-RPC解压目录的dist目录中。
并添加如下环境变量:XMLRPC_HOME XML-RPC的解压目录XMLRPC_LIB %XMLRPC_HOME%/distXMLRPCCLASSPATH %XMLRPC_LIB%/xmlrpc-common-3.0rc1.jar;%XMLRPC_LIB %/xmlrpc-server-3.0rc1.jar;%XMLRPC_LIB%/xmlrpc-client-3.0rc1.jar;%XMLRPC_LIB%/com mons-httpclient-3.0.1.jar;%XMLRPC_LIB%/commons-codec-1.3.jar整个应用很简单,通过XML-RPC调用Server端提供的HelloHandler.sayHello方法回显一个字符串信息。
下面是HelloHandler接口及其实现类相关代码:// HelloHandler.javapackage demo.xmlrpc;public interface HelloHandler {public String sayHello(String str);}// HelloHandlerImpl.javapackage demo.xmlrpc;public class HelloHandlerImpl implements HelloHandler {public String sayHello(String str){return "Hello, " + str + "!";}}以下是对应的Server端源代码:// Server1.javapackage demo.xmlrpc;import java.io.IOException;import java.io.OutputStream;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;public class Server1 extends HttpServlet {private XmlRpcServletServer server;public void init(ServletConfig pConfig) throws ServletException {super.init(pConfig);try {// create a new XmlRpcServletServer objectserver = new XmlRpcServletServer();// set up handler mapping of XmlRpcServletServer objectPropertyHandlerMapping phm = new PropertyHandlerMapping();phm.addHandler("HelloHandler", HelloHandlerImpl.class);server.setHandlerMapping(phm);// more config of XmlRpcServletServer objectXmlRpcServerConfigImpl 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);}}以下是对应的Client端源代码:// Client1.javapackage demo.xmlrpc;import java.io.IOException;import .MalformedURLException;import java.util.Vector;import .URL;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 {// config clientXmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();config.setServerURL(newURL("http://localhost:8080/jsp/XmlRpcServer")); // should be modified according to your configuration of jsp container// create a new XmlRpcClient object and bind above config object with itXmlRpcClient client = new XmlRpcClient();client.setConfig(config);// create parameter listVector<String> params = new Vector<String>();params.addElement("Tom");// execute XML-RPC callString result = (String) client.execute("HelloHandler.sayHello", 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();}}}程序源码中已包含了详细的注释,这里就不作过多解释了。
java rpc方法
java rpc方法Java RPC方法是一种远程过程调用(RPC)协议,在Java应用程序中可以用于客户端和服务器之间的通讯,允许在本地计算机上调用远程计算机上的方法并获取返回的数据。
本文将深入探讨Java RPC方法的使用,下面分为以下几个步骤:第一步:定义接口和实现类第一步是为需要调用的远程方法创建一个接口和一个实现类。
接口定义了客户端可以调用的方法,并指定了方法的输入和输出参数。
实现类包含了接口中定义的方法的实际实现代码。
这样,客户端可以通过调用接口中定义的方法来调用远程方法。
第二步:使用Java RMI(远程方法调用)实现RPCJava RMI是一组Java API,它允许Java应用程序在不同计算机之间进行远程方法调用。
使用Java RMI可以轻松地实现RPC功能。
要使用Java RMI,需要实现以下步骤:1. 在接口和实现类上添加@Remote注解,表明它们是远程服务。
2. 在接口上添加@RemoteService和@Path注解,以指定服务的路径和协议。
3. 创建连接和传输层,以便客户端和服务器之间进行通信。
第三步:配置web.xml文件以启用RPC将以下代码添加到web.xml文件中,以启用RPC:<servlet><servlet-name>RpcServlet</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</ servlet-class><init-param><name>com.sun.jersey.config.property.packages</name><value>com.example.rpc</value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>RpcServlet</servlet-name><url-pattern>/rpc/*</url-pattern></servlet-mapping>这将指定Servlet容器使用给定的包名来搜索RPC服务,以便将HTTP请求映射到Java方法。
soap类型的xml报文如何使用Java生成?
soap类型的xml报⽂如何使⽤Java⽣成?1、什么是soap?英⽂全称:Simple Object Access Protocol,简单对象访问协议是交换数据的⼀种协议规范,是⼀种轻量的、简单的、基于(下的⼀个⼦集)的协议,它被设计成在WEB上交换结构化的和固化的信息。
2、SOAP格式:1 2 3 4 5 6 7 8<SOAP-ENV:Envelope 各种属性><!--百度百科⽰例--> <SOAP:HEADER> </SOAP:HEADER> <SOAP:Body> </SOAP:Body></SOAP-ENV:Envelope>主要在web服务中运⽤。
3、语法规则构建模块⼀条 SOAP 消息就是⼀个普通的 XML ⽂档,包含下列元素:必需的 Envelope 元素,可把此 XML ⽂档标识为⼀条 SOAP 消息可选的 Header 元素,包含头部信息必需的 Body 元素,包含所有的调⽤和响应信息可选的 Fault 元素,提供有关在处理此消息所发⽣错误的信息这⾥是⼀些重要的语法规则:SOAP 消息必须⽤ XML 来编码SOAP 消息必须使⽤ SOAP Envelope 命名空间SOAP 消息必须使⽤ SOAP Encoding 命名空间SOAP 消息不能包含 DTD 引⽤SOAP 消息不能包含 XML 处理指令消息基本结构12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<?xml version="1.0"?><soap:Envelope xmlns:soap="" soap:encodingStyle=""> <soap:Header><!--百度百科⽰例--></soap:Header><soap:Body><!--百度百科⽰例--><soap:Fault><!--百度百科⽰例--></soap:Fault></soap:Body></soap:Envelope>4、案例分享代码package com.xc.soap;import java.util.ArrayList;import java.util.List;import javax.swing.text.Document;import space.QName;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.soap.MessageFactory;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPFactory;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import javax.xml.soap.SOAPPart;import javax.xml.transform.OutputKeys;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.sax.SAXSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Node;import org.xml.sax.InputSource;public class SOAPUtil {public static void main(String[] args) throws Exception {//创建本类的对象SOAPUtil util = new SOAPUtil();//调⽤本类的⽅法SOAPPart part = util.initsoappart();//获取返回的soap报⽂Source inform = util.getparametervalues(part, util.getTestNames());//输出这些soap报⽂到控制台,如果是我,我只需要封装就⾏了util.soap2string(inform);}/** 总结:* 1、既然有set元素,那么就可以进⾏get元素中的内容*//*** 封装命名空间、请求头* @return* @throws SOAPException*/public SOAPPart initsoappart() throws SOAPException {//创建SoapMessageSOAPMessage soapmessage = MessageFactory.newInstance().createMessage();//创建SoapPartSOAPPart soappart = soapmessage.getSOAPPart();//创建SoapEnvelopeSOAPEnvelope soapenvelope = soappart.getEnvelope();//创建HeaderSOAPHeader soapheader = soapenvelope.getHeader();//创建命名空间声明//实际的报⽂输出:SOAP-ENV、cwmp、soap-enc、xsd、xsi//维度没有第⼀个?说明第⼀个是默认的SOAPElement cwmp = soapenvelope.addNamespaceDeclaration("cwmp","urn:dslforum-org:cwmp-1-0");SOAPElement xsi = soapenvelope.addNamespaceDeclaration("xsi","/2001/xmlschema-instance");SOAPElement xsd = soapenvelope.addNamespaceDeclaration("xsd","/2001/xmlschema");SOAPElement enc = soapenvelope.addNamespaceDeclaration("soap-enc","/soap/encoding/");//向soap头中添加数据SOAPElement id = soapheader.addChildElement("id", "cwmp");//也就是说在header中新增⼦标签//向标签中添加数据id.setTextContent("1");//返回SOAPPart对象return soappart;}/*** 封装请求体内容* @param part* @param list* @return* @throws Exception*/public Source getparametervalues(SOAPPart part, @SuppressWarnings("rawtypes") List list) throws Exception { //再次通过soappart对象创建envelope对象SOAPEnvelope soapenvelope = part.getEnvelope();//通过envelope对象获取body对象SOAPBody soapbody = soapenvelope.getBody();//通过body对象创建⼦节点 <cwmp:getparametervalues>SOAPElement informres = soapbody.addChildElement("getparametervalues","cwmp");@SuppressWarnings("static-access")//实例化SOAP⼯⼚SOAPFactory soapfactory = SOAPFactory.newInstance();//通过soap⼯⼚创建标签 <parameternames soap-enc:arraytype="xsd:string[27]">SOAPElement names = soapfactory.createElement("parameternames", "", "");//并且为这个标签新增属性 name 以及 valuenames.addAttribute(new QName("soap-enc:arraytype"), "xsd:string["+ list.size() + "]");//⽅法传⼊的参数list,来⾃于另外⼀个⽅法,其实就是⼀个保存有value的集合,也就是⼦标签中需要存⼊的数据 //SOAPElement nameelement = null;for (int i = 0; i < list.size(); i++) {//使⽤soap⼯⼚创建标签nameelement = soapfactory.createElement("string", "", "");//将集合中的内容保存到创建的string标签中nameelement.setTextContent((String) list.get(i));//再把存有⼦标签的数据存到外层标签中names.addChildElement(nameelement);}//在把这个多重⼦标签,存⼊到外⾯的标签中informres.addChildElement(names);//最后返回这个最外层的part对象,其中就包含了header和bodyreturn part.getContent();}/*** 封装请求体中的数据* @return*/public List<String> getTestNames() {//创建⼀个List集合,然后调⽤add⽅法,存⼊数据List<String> list = new ArrayList<String>();list.add("internetgatewaydevice.deviceinfo.x_ct-com_cpu");list.add("internetgatewaydevice.deviceinfo.x_ct-com_worktime");list.add("internetgatewaydevice.deviceinfo.softwareversion");list.add("ndevice.1.wlanconfiguration.1.ssid");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_receivenoise");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalbytesreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalbytessent");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalbytesreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalbytessent");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalpacketsreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalpacketssent");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalpacketsreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalpacketssent");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.responsepass");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.askpass");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.successpass");list.add("internetgatewaydevice.deviceinfo.x_ct-com_temp");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_n-packetserror");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_n-totalbytesreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_n-totalbytessent");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-totalbytesreceived");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-packetserror");list.add("ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-totalbytessent");list.add("ndevice.1.wlanconfiguration.1.associateddevice.1.x_ct-com_receiverate");list.add("ndevice.1.wlanconfiguration.1.associateddevice.1.x_ct-com_sendrate");list.add("internetgatewaydevice.deviceinfo.serialnumber");list.add("internetgatewaydevice.deviceinfo.manufactureroui");return list;}/*** 将soap报⽂转换成string,在控制台输出* @param source* @throws Exception*/public void soap2string(Source source) throws Exception {//此处的source就是封装的soap请求报⽂if (source != null) {//定义⼀个w3c包中的node对象Node root = null;//如果请求报⽂属于DOM类型if (source instanceof DOMSource) {//就获取noderoot = ((DOMSource) source).getNode();//如果请求报⽂是sax类型} else if (source instanceof SAXSource) {//最终还是获取其中的元素InputSource insource = ((SAXSource) source).getInputSource();DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);Document doc = (Document) dbf.newDocumentBuilder().parse(insource);root = (Node) doc.getDefaultRootElement();}//创建transfermerfactory⽰例,创建transformer对象Transformer transformer = TransformerFactory.newInstance().newTransformer();//设置属性为yestransformer.setOutputProperty(OutputKeys.INDENT, "yes");//调⽤⽅法,将node类型的请求报⽂在控制台进⾏输出transformer.transform(new DOMSource(root), new StreamResult(System.out));}}/*** 封装响应体内容* @param part* @return* @throws Exception*/public Source informresponse(SOAPPart part) throws Exception {SOAPEnvelope soapenvelope = part.getEnvelope();SOAPBody soapbody = soapenvelope.getBody();SOAPElement informres = soapbody.addChildElement("informresponse","cwmp");SOAPElement max = SOAPFactory.newInstance().createElement("maxenvelopes", "", "");max.setTextContent("1");informres.addChildElement(max);return part.getContent();}}执⾏结果<?xml version="1.0" encoding="UTF-8" standalone="no"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="/soap/envelope/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0" xmlns:soap-enc="/soap/encoding/" xmlns:xsd="/2001/xmlschema <SOAP-ENV:Header><cwmp:id>1</cwmp:id></SOAP-ENV:Header><SOAP-ENV:Body><cwmp:getparametervalues><parameternames soap-enc:arraytype="xsd:string[27]"><string>internetgatewaydevice.deviceinfo.x_ct-com_cpu</string><string>internetgatewaydevice.deviceinfo.x_ct-com_worktime</string><string>internetgatewaydevice.deviceinfo.softwareversion</string><string>ndevice.1.wlanconfiguration.1.ssid</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_receivenoise</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalbytesreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalbytessent</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalbytesreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalbytessent</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalpacketsreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_lan-totalpacketssent</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalpacketsreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_wan-totalpacketssent</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.responsepass</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.askpass</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.successpass</string><string>internetgatewaydevice.deviceinfo.x_ct-com_temp</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_n-packetserror</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_n-totalbytesreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_n-totalbytessent</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-totalbytesreceived</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-packetserror</string><string>ndevice.1.wlanconfiguration.1.x_ct-com_stat.wan-totalbytessent</string><string>ndevice.1.wlanconfiguration.1.associateddevice.1.x_ct-com_receiverate</string><string>ndevice.1.wlanconfiguration.1.associateddevice.1.x_ct-com_sendrate</string><string>internetgatewaydevice.deviceinfo.serialnumber</string><string>internetgatewaydevice.deviceinfo.manufactureroui</string></parameternames></cwmp:getparametervalues></SOAP-ENV:Body></SOAP-ENV:Envelope>。
基于SOAP消息的XML数据在网络间的传输
基于SOAP消息的XML数据在网络间的传输
米洪;汪芸
【期刊名称】《计算机技术与发展》
【年(卷),期】2004(014)011
【摘要】当前网络存在两大主要问题:网络上数据的描述缺乏简单、有效、可扩展的规范,数据表达格式不统一;各种分布式对象体系结构,其通信是基于平台的,从而限制了其互操作性.笔者针对性地提出了利用XML来表达网络数据,且将其封装在SOAP消息中进行传输的解决方法;构建了利用SOAP传输数据的通信模型,并用JAVA语言代码实现了对XML数据的封装及数据传输的软件配置与实现.
【总页数】5页(P73-76,79)
【作者】米洪;汪芸
【作者单位】东南大学,计算机科学与工程系,江苏,南京,210096;山东省泰山职业技术学院,山东,泰安,271000;东南大学,计算机科学与工程系,江苏,南京,210096
【正文语种】中文
【中图分类】TP393.03
【相关文献】
1.一种基于SOAP协议的XML数据传输的实现 [J], 夏小云;喻金平
2.一种基于SOA的SOAP消息安全传输机制 [J], 华悦;徐涛
3.SOAP协议在XML数据传输中的应用 [J], 隋菱歌;殷树友;黄岚
4.基于SOAP的网络消息安全策略 [J], 张功萱;宋斌;王平立
5.SOAP协议在XML数据传输中的应用 [J], 隋菱歌;殷树友;黄岚
因版权原因,仅展示原文概要,查看原文内容请购买。
Java与XML的交互技术研究
Java与XML的交互技术研究XML(可扩展标记语言)是一种被广泛应用于数据存储和交换的标记语言。
Java作为一种广泛使用的编程语言,更是与XML之间的交互密不可分。
本篇文章将深入探讨Java与XML的交互技术,并提供一些实际应用的案例和解决方案。
1. 什么是XML?在开始讨论Java与XML的交互技术之前,我们需要了解一下XML的基本概念。
XML是一种用于表示和传输数据的标记语言,它通过使用自定义标签和属性来描述数据的结构和语义。
与HTML不同,XML没有预定义的标签,因此可以灵活地定义自己的标签和数据结构。
XML的一大优势是其跨平台和可扩展性。
这意味着XML可以在不同的系统和应用之间传输数据,并且可以方便地扩展和修改数据结构。
2. Java与XML的交互需求在现实世界的应用中,Java经常需要与XML进行交互。
这些交互需求包括但不限于以下几个方面:•读取XML数据:将XML数据读取到Java程序中,以便进一步处理和分析。
•写入XML数据:将Java程序中的数据写入到XML文件中,以便保存和传输。
•解析XML文档:解析XML文档,提取出需要的数据和信息。
•生成XML文档:根据Java程序中的数据和逻辑,动态地生成XML文档。
为了满足这些交互需求,Java提供了一些功能强大的API和库,下面我们将逐一介绍其使用方法和技巧。
3. 使用DOM进行XML交互DOM(文档对象模型)是Java中用于解析和操作XML文档的一种常用技术。
DOM将整个XML文档加载到内存中,并构建一个树状结构,通过操作和遍历这个树状结构,我们可以实现对XML文档的读写和解析。
3.1 读取XML数据DOM提供了一种便捷的方式来读取XML数据,我们可以通过以下步骤来实现:•创建一个DocumentBuilder对象,这个对象将用于解析XML文档。
•使用DocumentBuilder对象的parse()方法解析XML文档,得到一个代表整个文档的Document对象。
java soap协议 xml
java soap协议xml随着互联网技术的不断发展,Web服务作为一种分布式计算技术,已经成为了许多开发者首选的技术方案。
在Web服务中,SOAP(Simple Object Access Protocol)协议起着至关重要的作用。
本文将介绍SOAP协议的基本概念,以及如何使用JAVA实现SOAP客户端和服务器。
一、SOAP协议简介SOAP协议是一种基于XML(可扩展标记语言)的协议,它用于在分布式环境中交换信息。
SOAP定义了一种描述消息结构的方法,以及传输协议(如HTTP,SMTP等)。
其优点在于它具有较强的跨平台性和可扩展性,易于实现和理解。
二、JAVA与SOAP协议的结合JAVA作为一种广泛应用的编程语言,与SOAP协议有着天然的结合。
JAVA提供了丰富的API,可以帮助开发者轻松实现SOAP客户端和服务器。
1.创建SOAP消息要创建SOAP消息,可以使用JAX-RPC(Java API for XML Web Services)提供的SOAPFactory类。
以下是一个简单的示例:```javajavax.xml.soap.Message msg = soapFactory.createMessage();```2.发送SOAP请求创建SOAP请求后,需要将其发送到目标服务器。
这可以通过使用JAX-RPC提供的TransportFactory类来实现。
以下是一个发送SOAP请求的示例:```javajavax.xml.soap.Transport transport =transportFactory.createTransport("/service");transport.send(msg);```3.处理SOAP响应当服务器返回SOAP响应时,可以使用JAX-RPC提供的MessageFactory类来解析响应。
以下是一个处理SOAP响应的示例:```javajavax.xml.soap.Message responseMsg =msgFactory.createMessage();responseMsg = transport.receive(msg);```三、使用JAVA编写SOAP客户端和服务器下面将通过一个简单的案例演示如何使用JAVA编写SOAP客户端和服务器。
java rpc 方法
java rpc 方法一、什么是Java RPC?Java RPC(Remote Procedure Call)是一种远程过程调用技术,它允许Java应用程序在不同的地址空间中相互通信,像调用本地方法一样调用远程方法。
这种技术使得分布式系统的开发变得更加简单和高效。
二、Java RPC的优势1.高效:Java RPC利用了二进制协议进行通信,相比XML、JSON等文本协议,具有更高的传输效率。
2.跨语言:Java RPC支持多种编程语言,不仅限于Java,从而降低了跨语言通信的门槛。
3.易于集成:市面上有很多成熟的Java RPC框架,可以轻松地集成到现有项目中。
4.标准化:Java RPC遵循一定的接口规范,使得不同厂商的RPC框架可以互相通信。
三、Java RPC的实现原理Java RPC的实现原理主要包括以下几个方面:1.服务注册与发现:通过服务注册中心,远程客户端可以发现可用的服务提供方。
2.服务端处理请求:服务端接收到请求后,将请求转换为本地调用,执行相应的方法,并将结果返回给客户端。
3.序列化与反序列化:在请求和响应过程中,需要对数据进行序列化和反序列化,以便在不同地址空间间传输。
4.传输层协议:Java RPC通常使用TCP、UDP等传输层协议进行通信。
四、Java RPC框架介绍1.Apache Thrift:一个跨语言的分布式计算框架,支持多种编程语言,具有高效的传输性能和易于扩展的特性。
2.DUBBO:阿里巴巴开源的一款高性能、轻量级的RPC框架,支持多种协议,具有服务注册与发现、负载均衡等功能。
3.gRPC:Google开源的一款高性能、通用的RPC框架,基于HTTP/2协议,支持多种编程语言。
五、如何在项目中使用Java RPC?1.选择合适的RPC框架:根据项目需求和语言环境,选择合适的Java RPC框架。
2.编写服务接口:定义服务接口,并在服务提供方实现该接口。
3.服务注册与发现:将服务提供方注册到服务注册中心,以便远程客户端发现。
java远程调用soap协议接口
java远程调⽤soap协议接⼝import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import .*;public class SoapUtil {/** 远程访问SOAP协议接⼝** @param url:服务接⼝地址"http://192.168.0.120:8222/HelloWorld?wsdl"* @param isClass:接⼝类名* @param isMethod:接⼝⽅法名* @param sendSoapString: soap协议xml格式访问接⼝** @return soap协议xml格式** @备注:有四种请求头格式1、SOAP 1.1; 2、SOAP 1.2 ; 3、HTTP GET; 4、HTTP POST* 参考---》/WebServices/WeatherWebService.asmx?op=getWeatherbyCityName*/public static String getWebServiceAndSoap(String url,String isClass,String isMethod,StringBuffer sendSoapString) throws IOException {String soap = sendSoapString.toString();if (soap == null) {return null;}URL soapUrl = new URL(url);URLConnection conn = soapUrl.openConnection();conn.setUseCaches(false);conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Content-Length",Integer.toString(soap.length()));conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");// 调⽤的接⼝⽅法是conn.setRequestProperty(isClass,isMethod);OutputStream os = conn.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");osw.write(soap);osw.flush();osw.close();// 获取webserivce返回的流InputStream is = conn.getInputStream();if (is!=null) {byte[] bytes = new byte[0];bytes = new byte[is.available()];is.read(bytes);String str = new String(bytes);return str;}else {return null;}}}import java.io.IOException;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubStringBuffer sendSoapString = new StringBuffer();sendSoapString.append("<soapenv:Envelope xmlns:soapenv=\"/soap/envelope/\" xmlns:tes=\"http://test03/\">"); sendSoapString.append(" <soapenv:Header/>");sendSoapString.append(" <soapenv:Body>");sendSoapString.append(" <tes:getSum>");sendSoapString.append(" <arg0>66</arg0>");sendSoapString.append(" <arg1>33</arg1>");sendSoapString.append(" </tes:getSum>");sendSoapString.append(" </soapenv:Body>");sendSoapString.append("</soapenv:Envelope>");try {String ret= SoapUtil.getWebServiceAndSoap("http://192.168.0.120:8222/HelloWorld?wsdl","HelloWorld","getSum", sendSoapString);System.out.println(ret);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}。
java 在xml文件中调用方法
java 在xml文件中调用方法在Java中,XML文件是一种常用的数据交换格式,它可以用来存储和传输数据。
在XML文件中调用方法是一种常见的操作,它可以帮助我们实现对XML数据的处理和操作。
本文将介绍如何在Java 中通过XML文件调用方法,并给出一些实际的示例。
我们需要使用Java中的一些库来处理XML文件。
常用的库有DOM、SAX和JDOM等。
在本文中,我们将以DOM库为例来介绍如何在Java中调用XML文件中的方法。
DOM库提供了一个可以将XML文件解析为树状结构的接口,我们可以通过这个接口来访问和操作XML文件中的数据。
下面是一个简单的示例,展示了如何使用DOM库来解析XML文件并调用其中的方法。
我们需要创建一个DocumentBuilderFactory对象,用于创建一个DocumentBuilder对象。
然后,我们可以使用DocumentBuilder 对象的parse方法将XML文件解析为一个Document对象,该对象表示了整个XML文件的树状结构。
```javaimport javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.DocumentBuilder;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class XMLParser {public static void main(String[] args) {try {// 创建一个DocumentBuilderFactory对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 创建一个DocumentBuilder对象DocumentBuilder builder = factory.newDocumentBuilder();// 使用DocumentBuilder对象的parse方法将XML文件解析为一个Document对象Document document = builder.parse("example.xml");// 获取根节点Element root = document.getDocumentElement();// 调用方法NodeList nodeList =root.getElementsByTagName("method");for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);if (node.getNodeType() == Node.ELEMENT_NODE) {Element method = (Element) node;String methodName = method.getAttribute("name");System.out.println("调用方法:" + methodName); }}} catch (Exception e) {e.printStackTrace();}}}```在上面的示例中,我们使用了一个名为"example.xml"的XML文件来演示如何调用XML文件中的方法。
javaXML-RPC
javaXML-RPC1.XML-RPC简介 xml rpc是使⽤http协议做为传输协议的rpc机制,使⽤xml⽂本的⽅式传输命令和数据。
⼀个rpc系统,必然包括2个部分:1.rpc client,⽤来向rpc server调⽤⽅法,并接收⽅法的返回数据;2.rpc server,⽤于响应rpc client的请求,执⾏⽅法,并回送⽅法执⾏结果。
按照“数据即程序”的观点来看,RPC⽆⾮是借助⼀些通信⼿段来互相传递数据(信息),所以她也是“⾼”层次的通信⼿段,⽆⾮是这种通信⼿段看起来更像是“过程的调⽤”,因为她往往以⼀个“函数”的⾯⽬⽰⼈,从⽽掩盖了她交换信息的实质。
⼯作原理描述;1. rpcclient的⼯作原理:rpcclient根据URL找到rpcserver -> 构造命令包,调⽤rpcserver上的某个服务的某个⽅法 -> 接收到rpcserver的返回,解析响应包,拿出调⽤的返回结果。
2. rpcserver的⼯作原理:启动⼀个webserver(在使⽤内置的webserver的情况下) -> 注册每个能提供的服务,每个服务对应⼀个Handler类 ->进⼊服务监听状态。
2.基于RPC的java简单应⽤我们在提供远程接⼝时可以使⽤webservice的⽅式,使⽤xmlrpc同样也可以实现,并且开发简单。
实现的⽅式有许多种,以下采⽤httpservlet的⽅式实现需要使⽤到的jar包:xercesImpl.jar xmlrpc-2.0.1.jar commons-codec_1.3.jar 1、业务处理接⼝package com.flyoung.xmlrpc;public interface ServicesHandler {public String execute(String str);}2、业务接⼝实现package com.flyoung.xmlrpc;public interface ServicesHandler {public String execute(String str);}3、客户端package com.flyoung.xmlrpc;import .MalformedURLException;import .URL;import java.util.Vector;import org.apache.xmlrpc.XmlRpcException;import org.apache.xmlrpc.client.XmlRpcClient;import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;public class TestClient {/*** @param args*/public static void main(String[] args) {try {//配置客户端XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();//设置服务器端地址config.setServerURL(new URL("http://localhost:8080/Rpc/HelloHandler"));//创建XmlRpc客户端XmlRpcClient client = new XmlRpcClient();//绑定以上设置client.setConfig(config);//创建参数列表Vector<String> params = new Vector<String>();params.addElement("flyoung");//执⾏XML-RPC 请求String result =(String) client.execute("HelloHandler.execute", params);System.out.println("result:"+result);} catch (MalformedURLException e) {e.printStackTrace();} catch (XmlRpcException e) {e.printStackTrace();}}} 4、服务器端package com.flyoung.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 com.flyoung.xmlrpc.HelloHandler;public class XmlRpcServicesServlet extends HttpServlet {private XmlRpcServletServer server;@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);try {//创建XmlRpcServletServer对象server = new XmlRpcServletServer();//set up handler mapping of XmlRpcServletServer objectPropertyHandlerMapping pmp = new PropertyHandlerMapping();pmp.addHandler("HelloHandler", HelloHandler.class);server.setHandlerMapping(pmp);//more config of XmlRpcServletServer objectXmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl)server.getConfig(); serverConfig.setEnabledForExtensions(true);serverConfig.setContentLengthOptional(false);} catch (XmlRpcException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {server.execute(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {server.execute(req, resp);}} 5、XML配置<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><display-name></display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>XmlRpcServer</servlet-name><servlet-class>com.flyoung.xmlrpc.XmlRpcServicesServlet</servlet-class></servlet><servlet-mapping><servlet-name>XmlRpcServer</servlet-name><url-pattern>/HelloHandler</url-pattern></servlet-mapping></web-app>3.总结 在RPC中,当⼀个请求到达RPC服务器时,这个请求就包含了⼀个参数集和⼀个⽂本值,通常形成“classname.methodname”的形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)
SOAP(Simple Object Access Protocol,简单对象访问协议) 是一种基于XML 的,用于计算机之间交换信息的协议。
SOAP能应用于各种消息接发系统,并能
通过各种传输协议进行消息传递,但最初的侧重点是通过HTTP传输的远程过程调用。
SOAP是Web service的一个重要组成部份,如果把Web service比喻成Internet,那么SOAP就可以比喻成TCP/IP。
SOAP是一种协议而非具体产品,
微软也有自己的SOAP实现产品,而Java下比较流行的SOAP实现产品就是Apache SOAP,不过它的下一个版本已经改名成AXIS了。
SOAP是用XML文件来做为数据转输的载体的,走HTTP的线路。
一般企业的防火墙都开放HTTP的80端口,所以SOAP不会被防火墙阻断,这算是SOAP的一个优点。
信息转输的双方都要求支持SOAP服务,因为XML文件发过去,则对方需要有SOAP服务来接收,然后对方会有反馈也是XML文件,这时你也需要安装SOAP服务来接收。
1. 环境配置
为了运行程序,我们首先必须配置好环境:
共要下载四个软件包,它们都是开源免费的。
其中,前两个是Apache的,后两个是SUN网站的,如下所示:
⏹SOAP:/ws/soap/version-2.3.1/
⏹Xerces:/dist/xerces-j/
⏹JavaMail:
/products/javamail/downloads/index.html
⏹JAF:/products/javabeans/glasgow/jaf.html
下载后将它们分别解压缩。
分别在这四个包的解压目录中找到:xerces.jar、soap.jar、mail.jar、activation.jar(JAF的),则是四个jar文件是我们所需要的。
本机安装环境:WindowsXP(SP2) + JDK1.4.2_06 + Tomcat5.0.28 + SOAP2.3.1 配置步骤:
1、安装JDK和Tomcat。
过程比较简单,这里不再详述。
2、将刚才所找到的四个jar文件复制到Tomcat的“Tomcat 5.0\common\lib”
目录下,这个目录是Tomcat的默认包目录,在这个目录中的所有包在
Tomcat启动时都会被自动加载。
3、将\ JDK1.4.2\lib\路径下的tools.jar也复制到Tomcat的“Tomcat
5.0\common\lib”目录下。
4、将soap解压目录的webapps目录下的soap.war文件,复制到Tomcat
的“Tomcat 5.0\webapps”目录下,这个目录是Tomcat的WEB应用所在
目录。
重新启动Tomcat,Tomcat会自动将其解压,并配置好路径。
可以
尝试在浏览器中输入“http://localhost:8080/soap/”,看SOAP是否
安装好。
5、注意在编写程序时,需要将所得到的四个jar文件路径设置到所使用的
Java编程环境中,因为在程序中需要用到其中的类文件。
具体步骤略。
6、重启Tomcat服务。
这时Tomcat会将“Tomcat 5.0\common\lib”目录下
新加入的包加载到内存中。
到此,我们已经配置好了程序运行所需要的环境。
2. 基于SOAP的XML文档网络传输
SOAP规范主要定义了四个元素:SOAP信封规范,传输和协议绑定,编码规则和一个RPC协定。
用于实现消息的网络传输。
⏹SOAP信封规范,SOAP信封规范对计算机间传递的数据如何封装定义了
具体的规则。
这包括应用特定的数据,如要调用的方法名,方法参数和
返回值;还包括谁将处理封装内容,失败时如何编码错误消息等信息。
⏹数据编码规则,为了交换数据,计算机必须在编码特定数据类型的规则
上达成一致,SOAP也有自己的一套编码数据类型的约定。
大部分约定都
基于W3C XML Schema规范。
⏹RPC协定,SOAP能用于单向和双向等各种消息接发系统。
SOAP为双向消
息接发定义了一个简单的协定来进行远程过程调用和响应,这使得客户。