SOAP 是什么东西? 介绍介绍「建议收藏」

SOAP 是什么东西? 介绍介绍「建议收藏」  如果你的安装路径(installationpaths)和上面使用的不同,你需要更正它们,然后关闭和重启Tomcat以使它们生效。这样,你就有为运行SOAP作好了准备。但是现在,我要忘记有关的技术部分,来学一点理论知识。  SOAP意思是简单对象访问协议(SimpleObjectAccessProtocol)。的确如它的名字一样,SOAP是很简单的。它是一个基于XML的协议,允许程

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
【正版授权,激活自己账号】:

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  如果你的安装路径(installation paths)和上面使用的不同,你需要更正它们,然后关闭和重启Tomcat以使它们生效。这样,你就有为运行SOAP作好了准备。但是现在,我要忘记有关的技术部分,来学一点理论知识。

  SOAP意思是简单对象访问协议(Simple Object Access Protocol)。的确如它的名字一样,SOAP是很简单的。它是一个基于XML的协议,允许程序组件和应用程序彼此使用一种标准的Internet协议–HTTP来通讯。SOAP是一种独立的平台,它不依赖程序语言,它是简单的,弹性的,很容易扩展的。目前,应用程序能够彼此使用一种基于DCOMCORBA技术的远程过程调用(RPC)来进行相互通讯,但HTTP不被设计为这个目的。RPCInternet上应用是非常困难的,它们会出现许多兼容性和安全性的问题,因为防火墙和代理服务器通常都会阻断(block)这些类型的流量。应用程序之间最好的通讯方式是通过HTTP协议,因为HTTP是支持所有Internet浏览器和服务器的。基于这个目的,SOAP协议被创建出来。
那么,它们是如何运作的呢?比如,一个应用程序(A)需要和另一个应用程序(B)SOAP的帮助下进行彼此通讯。它们将使用下面的框架图来完成这个过程:

  这个SOAP信封(SOAP envelope)是一个包含以下内容的XML文档:

  

  正如你看到的,它是非常简单的。它看起来确实就象一个普通的信封或者你的email。你想看看它们是如何动作的吗?下面跟我们一起来吧。其实我们有很多方法是不用SOAP来在创建和运行我们自己的“Hello World”应用程序的,但是因为我们要保持它的简单性,我会给你一个它运作方式的框架图(scheme)

  我们的“Hello World”范例会包含一个SOAP Service。我们的SOAP Client将发送它们的名字到该SOAP Service,并试图得到一些答复或响应。这个SOAP Service需要部署到一个SOAP Admin的工具,以至重定位所有请求的SOAP(Proxy) RPC Router能够知道它们应该使用哪种服务来运作。总而言之,这个是以下面的方式来运作的:


现在,我们来一步步的看看到底发生了什么。在Step 1里,HelloWorldClient将连接一个SOAP RPC Router,请求我们的SOAP Service并将包含我们名字的一个字符串传递给它。该SOAP RPC Router会检查是否它已经部署了这个SOAP Service。如果它被发现是被部署的,那么它将传递数据到这个SOAP Service并调用特定的方法,这个是Step 2。然后SOAP Service方法会被执行,将返回某个字符串值(该值就是SOAP Client的答复或者响应)(Step 3)。在Step4中,SOAP RPC Router将仅仅只是重定向这个数据到SOAP Client。所有在Step1Step4里传输的数据是通过SOAP Envelope来完成的。正如你所看到的,算法是相当简单的,因此我们只准备关心实际的代码。

  首先,我们要创建一个SOAP Service。下面是它的代码,请不要忘记将它放入HelloWorld/ 目录中(必须被包含在你的CLASSPATH):

// SOAPService.java 
  package HelloWorld; 
  public class SOAPService 
      public String sayHi(String x) 
      return(“Hello my friend, ” + x + “! Glad to see you!”); 
  
  }

      添加任何注释也是很容易的。要编译它,只需要用下列命令:javac SOAPService.java

        第二步,一旦我们准备好了SOAP Service,我们需要用SOAP Service Manager来部署它。这个可以通过很多方式来实现,但是为了能让初学SOAP的读者更容易理解SOAP,我提供了一个最容易的方式。我们假设你的Web Server(Tomcat或其他)已经正常运行,并且你已经正确安装了SOAP。那么当浏览器访问http://localhost:8080/soap/,你会看见Apache SOAP的欢迎页面。点击Run the admin client ,然后 Deploy。你会得到一个屏幕显示,在那里你需要填入IDScopeMethodProvider TypeJAVA Provider的信息到表单域中。你能忽略其他所有的表单域,除非你真的需要它们的信息。我们的“HelloWorld”例子不需要它们,所以,我们填的下面的值:

·    ID: urn:HelloWorld_SOAPService

·          Scope: Application

·    Methods: sayHi

·    Provider Type: java

·    Java Provider – Provider Class: HelloWorld.SOAPService

·    Java Provider – Static? No

一些注释:ID是我们要从SOAP Client标识我们的SOAP Service的唯一名字。Method包含SOAP Service提供的一系列方法。JAVA Provider-Provider ClassSOAP Service Java类的名字。

  现在,点击Deploy 按钮,那么你的服务会被部署。再次强调,请注意正确设置CLASSPATH环境变量。然后,你的HelloWorld.SOAPService类能够被找到,并且所有必需的jar包也能被找到。这是个几乎每个人都会犯的普通错误。现在,你能够点击 List ,将会看见你的服务已经被部署进来。恭喜!

  最后,让我们来创建一个SOAP Client。代码看起来有点复杂,但是在现实中不会只有这么点长。

1: // HelloWorldClient.java 
  2: import java.io.*; 
  3: import java.net.*; 
  4: import java.util.*; 
  5: import org.apache.soap.*; 
  6: import org.apache.soap.rpc.*; 
  7: public class HelloWorldClient 
  8: public static void main(String[] arg) throws Exception 
  9: Call c = null
  10: URL url = null
  11: Vector params = null
  12: Response rep = null
  13: String ourName = “Superman”; 
  14: String ourUrn = “urn:HelloWorld_SOAPService”; 
  15: String ourMethod = “sayHi”; 
  16: url = 
new URL(“http://localhost:8080/soap/servlet/ 
  rpcrouter”); 
  17: System.out.println(“Passing to our deployed “+ourUrn+” 
  our name (“+ourName+”): “); 
  18: c = 
new Call(); 
  19: c.setTargetObjectURI(ourUrn); 
  20: c.setMethodName(ourMethod); 
  21: c.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); 
  22: params = 
new Vector(); 
  23: params.addElement(new Parameter(“ourName”, String.class
  ourName, null)); 
  24: c.setParams(params); 
  25: System.out.print(“and its answer is: “); 
  26: rep = c.invoke(url, “”); 
  27: 
if (rep.generatedFault()) 
  28: Fault fault = rep.getFault(); 
  29: System.out.println(“/nCall failed!”); 
  30: System.out.println(“Code = ” + fault.getFaultCode()); 
  31: System.out.println(“String = ” + fault.getFaultString()); 
  32: } 
else 
  33: Parameter result = rep.getReturnValue(); 
  34: System.out.print(result.getValue()); 
  35: System.out.println(); 
  36: } 
  37: } 
  38:}


下面我要做一些解释。在第13行,我们设置了我们的名字,这个名字将会传递给SOAP Service。在第14行,我们设置了我们将要调用的服务的ID(service ID),和第15行里设置的服务方法(service method)。有了这个ID,服务能够被部署到SOAP服务管理器(SOAP Service Manager)中。我们没有设置任何其他值,仅仅只用刚才那些基础值就可以正常运作了。你能从SOAP的官方文档上得到相关信息,该文档来自SOAP包中,它们的解释超出了本文的范围。

  用以下方式编译这个SOAP Client:

  javac HelloWorldClient.java

  为了圆满完成它,让我们检查一下针对我们的测试,是否所有事情都准备就绪。Tomcat正在运行,所有的环境变量都正确,SOAP Service被编译和部署,SOAP Client被成功编译。OK,让我们运行它,你将看到这个屏幕:

  正如你所看到的,我们的SOAP Client使用SOAP协议成功发送它的名字和接收了一个答复。正如前面所说的,SOAP Service发送和接收的是SOAP envelope。这个是SOAP envelope的源代码。

  被发送到SOAP ServiceSOAP Envelope

?xml version=1.0 encoding=UTF-8?
SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/
soap/envelope/”
xmlns:xsi=”http://www.w3.org/2001/
XMLSchema-instance”
xmlns:xsd=”http://www.w3.org/2001/XMLSchema”

SOAP-ENV:Body
ns1:sayHi xmlns:ns1=”urn:HelloWorld_SOAPService”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/
soap/encoding/”

ourName xsi:type=”xsd:string”Superman/ourName
/ns1:sayHi
/SOAP-ENV:Body
/SOAP-ENV:Envelope


SOAP Service接收的SOAP Envelope

?xml version=1.0 encoding=UTF-8?
SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/
soap/envelope/”
xmlns:xsi=”http://www.w3.org/2001/
XMLSchema-instance”
xmlns:xsd=”http://www.w3.org/2001/XMLSchema”

SOAP-ENV:Body
ns1:sayHiResponse xmlns:ns1=”urn:HelloWorld_SOAPService”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.
org/soap/encoding/”

return xsi:type=”xsd:string”Hello my friend, Superman!
Glad to see you!
/return
/ns1:sayHiResponse
/SOAP-ENV:Body
/SOAP-ENV:Envelope 

      
      
要理解SOAP Envelope中的所有标签的含义,我建议你花一点时间阅读 http://www.w3.org/2001/06/soap-envelope 命名空间规范。

  我希望本文能够在你理解SOAP技术上有一定帮助。这个技术是简单的,有趣的,强大的,弹性的。它被用在许多Web应用中,这些应用的数量也在不断增加。学习SOAP是值得的,至少你要知道它是什么和它是怎么运作的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164081.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【UVA】1449-Dominating Patterns(AC自己主动机)

    【UVA】1449-Dominating Patterns(AC自己主动机)

  • ajax最常见的几种面试题

    ajax最常见的几种面试题1,什么是ajax?请谈一下你对ajax的认识AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的开发技术。ajax包含下列技术:基于web标准XHTML+CSS表示;使用dom进行动态显示及交互;使用xml和xslt进行数据交换及相关操作;使用xmlhttprequest进行异步数据查询,检索;使用Java…

  • extremedb是开源的吗_最简单的数据库开发软件

    extremedb是开源的吗_最简单的数据库开发软件最近我接触了嵌入式数据库eXtremeDB,由于这方面资料很少,网上的参考资料都大同小异,只靠着软件本身提供的参考文档进行开发,所以刚开始开发有些困难。故将基本的用法整理一下。关于eXtremeDB的特性,这里就不阐述了,直接从开发开始。下面以简单的模板为例进行阐述。1.构建.mco文件打开记事本,然后另存为XX.mco后缀文件。.mco文件里面需要定义数据库所需的字段类型,名称等,…

    2022年10月14日
  • 查看是否安装了webpack_webpack不是内部或外部命令

    查看是否安装了webpack_webpack不是内部或外部命令查看当前项目webpack版本在项目package.json中的scripts脚本命令中写入以下内容”webpack”:”webpack–version”然后打开终端在项目根路径下运行:npmrunwebpack

  • Linux常用命令:chmod修改文件权限 777和754

    Linux常用命令:chmod修改文件权限 777和754常用下面这条命令:chmod777 文件或目录示例:chmod 777/etc/squid运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行)。如果是Ubuntu系统,可能需要加上sudo来执行:sudochmod 777/etc/squid故事的开始,都会先留一个悬念。只有程序员能懂的冷笑话系列中,有个比较经典的段子:请用最简洁的语言描述我国FL。754。…

  • 深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现

    深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现一、Inception网络(google公司)——GoogLeNet网络的综述获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),但是这里一般设计思路的情况下会出现如下的缺陷:1.参数太多,若训练数据集有限,容易过拟合;2.网络越大计算复杂度越大,难以应用;3.网络越深,梯度越往后穿越容易消失,难以优化模型。 解决上述两个缺点的根本

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号