目录
1.SOAP
1.1.SOAP协议简介
SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象;
通俗理解就是SOAP是XML数据格式 + HTTP POST协议组合而成的一种网络协议,是HTTP POST协议的一种变种;
1.2.SOAP语法规则
SOAP 消息必须用 XML 来编码
SOAP 消息必须使用 SOAP Envelope 命名空间
SOAP 消息必须使用 SOAP Encoding 命名空间
SOAP 消息不能包含 DTD 引用
SOAP 消息不能包含 XML 处理指令
1.3.为什么会有SOAP?
客户端浏览器通过http get/post发送请求到服务器A,然后服务器A给予回执,这种场景下是没有问题的,但下面有个场景:
客户端浏览器发送HTTP POST请求到服务器A,然后服务器A解析参数之后,再去远程调用服务器B,那么会存在以下问题:
问题1:那是不是意味着服务器B还需要新建一个Web Servlet来接受来自服务器A的HTTP请求?会不会增大服务器B不必要的开发工作量?
问题2:服务器A发送HTTP请求之前,要不要发送一个登录HTTP来获取对应的权限呢?如果不用的话,那服务器B如何确保每一个HTTP请求的安全性?如果服务器A需要先提前发送一个登录HTTP的话,那服务器B是不是还要单独开发一套新增权限-分配权限-删除权限等整套的权限管理系统、新增用户-删除用户-维护用户等整套的用户管理系统、一整套WEB管理系统、一套数据库呢?那这套开发成本应该是由服务器A承担呢,还是服务器B承担呢?
问题3:如何确保服务器A到服务器B的参数传输过程中的安全性呢?
从我个人的角度来看,就想出了这几个问题,因此,实际情况下问题可能会更多,这就导致了传统的HTTP GET/POST根本无法满足这种业务场景,为此,人们发明了SOAP协议,来解决该场景下遇到的所有问题;
2.AXIS
2.1.AXIS官网解释
http://axis.apache.org/axis/java/reference.html#DeploymentWSDDReference
找到这个章节即可:Deployment (WSDD) Reference
2.2.示例wsdd
| <?xml version="1.0" encoding="UTF-8"?> <!-- deployment:一个根元素,告诉AXIS这是一个发布Webservice --> <deployment name="defaultClientConfig" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler" xmlns="http://xml.apache.org/axis/wsdd/"> <!-- globalConfiguration:全局配置 --> <globalConfiguration name="defaultClientConfig"> <!-- parameter:全局属性 --> <!-- 管理员密码,由AdminService使用。 --> <parameter name="adminPassword" value="admin" /> <parameter name="enableNamespacePrefixOptimization" value="false" /> <parameter name="disablePrettyXML" value="true" /> <parameter name="sendXsiTypes" value="true" /> <!-- true / false标志,用于控制是否发送多引用。 --> <parameter name="sendMultiRefs" value="true" /> <!-- true / false标志,用于控制是否在消息中发送<?xml?>声明 --> <parameter name="sendXMLDeclaration" value="true" /> <!-- 将此标志设置为true可打开Axis引擎中XML Schema(xsd)类型的首选项。 --> <parameter name="dotNetSoapEncFix" value="true" /> <!-- 实现附件支持的类的名称。 默认值为org.apache.axis.attachments.AttachmentsImpl --> <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> <!-- requestFlow:全局请求处理程序,在实际处理程序处理请求之前先执行,有点类似于web工程下的Filter --> <!-- requestFlow:子元素有:handler or chain --> <requestFlow name="RequestFlow1"> <!-- 执行嵌入式部署 --> <handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="session" /> </handler> <handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="request" /> <parameter name="extension" value=".jwr" /> </handler> </requestFlow> </globalConfiguration>
<!-- handler:定义处理程序,并指示处理程序的类型 --> <!-- URLMapper是HTTP特定的处理程序,通常在HTTP传输链上运行(默认情况下已部署)。 它用于根据URL进行服务分配- --> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> <!-- SimpleAuthentication处理程序将MessageContext传递给SecurityProvider(请参阅org.apache.axis.security),以使用SecurityProvider所需的任何信息(目前仅用户名和密码)对用户进行身份验证。 --> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<!-- transport:在服务器端定义传输。 当传入请求到达时,将调用服务器传输。 服务器传输可以定义<requestFlow>和/或<responseFlow>元素, 以指定在处理的请求(即传入消息)或响应(即传出消息)部分期间应调用的处理程序/链(此功能的作用与< 上面的service>元素)。--> <transport name="http" type=""> <requestFlow name="RequestFlow1" type=""> <!-- URLMapper是HTTP特定的处理程序,通常在HTTP传输链上运行(默认情况下已部署)。 它用于根据URL进行服务分配- --> <handler name="Handler1" type="URLMapper" /> <!-- HTTPAuthHandler接受HTTP特定的身份验证信息(现在仅是基本身份验证),并将其转换为用户名和密码的通用MessageContext属性。 --> <handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> </requestFlow> </transport> <transport name="local" type=""> <responseFlow name="ResponseFlow1" type=""> <handler name="Handler1" type="LocalResponder" /> </responseFlow> </transport>
<service name="AdminService" type="" provider="java:MSG"> <parameter name="allowedMethods" value="AdminService" /> <parameter name="enableRemoteAdmin" value="false" /> <parameter name="className" value="org.apache.axis.utils.Admin" /> <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="Version" type="" provider="java:RPC"> <parameter name="allowedMethods" value="getVersion" /> <parameter name="className" value="org.apache.axis.Version" /> </service>
<!-- service:定义对外发布的服务 --> <!-- service:下面的参数有:className、allowedMethods、allowedRoles、extraClasses --> <service name="XXXXXXAccess" provider="java:RPC"> <parameter name="scope" value="Request" /> <parameter name="className" value="XXX.XXX.XXXX.XXXX.XXXX.axis.impl.XXXXXX" /> <parameter name="allowedMethods" value="*" /> <namespace>http://XXXX.XXXX.com/XXX/services/XXXXXXX</namespace> </service> </deployment> |
2.3.访问发布的webservice
http://192.168.88.129:9080/xxx/services/AdminService?wsdl
http://192.168.88.129:9080/xxx/services/Version?wsdl
http://192.168.88.129:9080/xxx/services/XXXXXXAccess?wsdl
SOAP是一种基于XML的数据格式和HTTP POST的网络协议,用于解决跨平台、跨系统的分布式对象交互问题。它解决了传统HTTP协议在服务器间交互的安全性、复杂性和效率问题。AXIS是Apache的一个开源Web服务框架,用于发布和访问Web服务。AXIS通过WSDD文件配置服务和处理程序,提供服务部署和安全控制。示例中展示了AXIS的配置细节,包括全局配置、处理程序定义和服务发布。
356

被折叠的 条评论
为什么被折叠?



