SOA复习
SOA复习
选择
绪论SOA
XML
XML处理
SOAP概念*2
WSDL概念*2
SOAP代码阅读*2
WSDL代码阅读*3
UDDI概念
JAXR
JAXB
REST概念
简答
XML处理
在选择处理XML数据的方法时,需要根据实际场景和需求进行考虑,以下是一些参考因素:
- XML文档大小:如果XML文档较小,则可以使用DOM来加载并操作整个文档。如果XML文档非常大,则SAX可能更好,因为它不需要将整个文档加载到内存中。
- 需要进行的操作:如果需要对XML文档进行频繁的增删改操作,则DOM是最好的选择;如果只需要遍历并查询文档,则SAX是最好的选择。
- 可扩展性:如果需要将XML数据转换为其他格式,则可以使用XSLT。如果需要执行复杂的XPath查询,则可能需要使用DOM或XSLT来实现。
举一些例子来说明:
- 如果您需要读取和修改XML文件的特定节点,例如在配置文件中修改某些设置,则DOM可能是最好的选择。这种情况下,您可以使用DOM将整个XML文档加载到内存中,并对其进行操作。
- 如果您需要从XML文件中提取某些信息,然后将其用于其他目的,例如web页面的显示,则SAX方法可能更适合。这种情况下,您可以编写一个SAX处理器,以事件驱动方式读取XML文件并提取所需的信息。
- 如果您需要将XML数据转换为HTML、PDF或其他格式,则XSLT是最佳选择。这种情况下,您可以编写一个XSLT样式表,以指定如何将XML数据转换为所需的输出格式。
总之,不同的场景和需求需要采用不同的方法来处理XML数据。开发人员需要根据具体情况选择最佳的方法。
SOAP二进制优化
一堆机制,按层层递进的方式如何完成二进制传输的携带
消息传输优化机制(MTOM)
[MTOM]提供了一种优化,避免了携带base64编码的大型二进制内容
[MTOM]定义了一个抽象SOAP传输优化特性,允许独立于底层协议绑定,以便优化机制可以在各种传输上可用,以及保留主要的SOAP绑定范例——SOAP消息信息集,无论如何序列化,都可以在相邻节点之间不变地传输。
[MTOM]提供了对现有SOAP HTTP绑定的增强,以提供抽象SOAP传输优化特性的实现。当MTOM/XOP被用来优化SOAP消息时,它被序列化成一个使用XOP处理的MIME Multipart/Related消息。base64二进制数据从SOAP消息中提取出来,并在MIME消息中打包成独立的二进制附件。
- 在 SOAP 消息的头部添加一个 “Content-Transfer-Encoding” 属性并设置值为 “binary”,以表示这个消息是使用二进制传输的。
- 在 SOAP 消息的正文中标识哪些部分需要使用二进制编码。可以使用两个机制来标识这些部分:XOP(XML-binary Optimized Packaging)和 SWA(SOAP with Attachments)。其中,XOP 使用了 MIME 多部分媒体类型来将二进制数据与 SOAP 消息隔离开,并使用 XOP 元素来引用二进制数据。SWA 将二进制数据存储在 MIME 部分中,并通过 href 属性来引用。
- 将 XOP 元素或者 SWA 的 href 属性所对应的二进制数据进行编码,并将编码后的数据作为消息正文的一部分发送出去。
优化包括基于uri的引用
从发送者到最终接收者或中介的SOAP消息中包含对Web资源的基于uri的引用。
SOAP 消息将 Web 资源的 URI 作为 message part 嵌入到消息正文中,并在SOAP消息头部添加 “Content-Location” 属性来指示 Web 资源的位置。
接收者通过解析 “Content-Location” 属性得到响应 Web 资源的 URL,然后根据 URL 获取到对应的 Web 资源。
这种方式可以使得 SOAP 消息只携带 Web 资源的路径而非实际内容,从而避免了消息体积的过大,提高了传输效率。
Java服务平台*2(平台异常处理、handler)
异常处理
Mapped Exceptions
- @WebFault注释映射的异常。
- 与映射异常对应的故障码始终是SOAP-ENV:Server
- JAX-WS WSDL到Java的映射绑定WSDL:fault消息以生成Java.lang. exception的子类
- 因此,使用从wsdl:portType映射的SEI实现了Web服务,那么返回SOAP错误的一个选项是抛出映射的异常,JAX-WS运行时将自动将其转换为适当的wsdl:fault,包装在SOAP正文中,然后返回
Unmapped Exception
- SOAPFaultException封装了一个javax.xml.soap.SOAPFault,它直接映射到SOAP 1.1错误消息
- 其他异常(除了SOAPFaultExceptions和@WebFault映射异常)也被JAX-WS转换为SOAP故障消息
- 没有使用SEI且没有任何可以利用的映射异常,或正在使用SEI但必须处理与wsdl:fault不对应的异常,则可以构造并抛出SAAJ类javax.xml.ws.soap.SOAPFaultException的实例。JAX-WS运行时将其转换为SOAP错误消息并将其返回给客户端
- 当WSDL中没有定义逻辑错误时,我们抛出一个通用的javax.xml.ws.WebServiceException——所有JAX-WS运行时异常的基异常类
Handler
Server-Side Handlers
在JAX-WS中,服务器端处理程序使用@HandlerChain注释配置
还可以通过XML中定义的handler
handler-chain元素表示处理程序链,它的子元素,即所有处理程序元素,按照在运行时执行的顺序表示处理程序(输出SOAP响应的相反顺序)。
但是,根据JAX-WS规范,如果混合使用逻辑和协议处理程序,则逻辑处理程序在协议处理程序之前执行,但保留两组中的相对顺序
Client-Side Handlers
Client-Side Handlers
使用JAX-WS,可以通过编程方式完成
也可以使用 @javax.jws.HandlerChain注释完成
平台三种主流开发模式
start from Java
(SFJ)开发模式是WS-Metadata实现所需的唯一开发模式。
首先开发一个Java类,然后将该类部署为Web服务,在大多数情况下,是用@WebService对其进行注释。JAX-WS和JAXB运行时引擎将使用标准映射将该类映射到WSDL文档。
在SFJ模式中,如果需要调整WSDL或XML类型的形状,可以通过向类中添加注释来完成。
start from WSDL
使用预先存在的WSDL并使用WSDL编译器(作为JAX-WS实现的一部分提供)来生成一组实现WSDL的Java程序元素(SEIs)。
然后,使用适当的业务逻辑实现SEIs,以实现WSDL定义的Web服务。
start from Java and WSDL
- 从打算实现它的 Java 类上的 @WebService 注解中引用一个预先存在的 WSDL。这个类上的注解必须将该类映射到所引用的 WSDL。
- 要求非常熟悉注解如何塑造WSDL。
- 在SFWJ开发模式中,预先存在的XML模式类型必须映射到预先存在的Java对象(参数和返回类型)。
- 开发人员使用JAX-WS WSDL编译器按照SFW开发模式,从现有的WSDL生成SEI;然后,使用包装器将此SEI映射到现有类
- 涉及到将现有的Java映射到现有的XML Schema和WSDL时,JWS并不能提供很大的帮助
一道问答(12分)
一堆JSR干了什么事,完成的任务有哪些
Server Side
- JWS将Port组件定义为Web服务的服务器视图。
- 端口组件可以被打包成WAR或EJB JAR
- WSEE定义了部署过程和打包结构
- WS-Metadata描述了打包后的类的注释如何塑造部署
- Java EE 5端口组件的部署对应于WSPA参考系统中部署子系统的一个功能。
- WSDL的结构由JAX-WS WSDL/Java映射决定,可以使用注释自定义
- 当端点通过 HTTP POST 收到 SOAP 请求时,部署的 Web 服务的调用被启动。
- Web服务的端点通常由侦听部署期间指定的端点URL的servlet类实现
- 它是JWS实现的一部分
- 在部署期间,WSEE运行时读取注释和/或部署描述符,确定端点URL,并配置容器的内部以在该端点部署侦听器
- JAX-WS运行时从SOAP消息中提取XML参数
- XML参数被反序列化为Java参数
- 这种反序列化由JAXB运行时处理
- JAXB运行时使用自省来检查目标类上的注释,并使用该信息(连同JAXB定义的标准Java/XML绑定)生成目标参数的实例
- 然后,调用Java目标
- Java返回类型类被移交给JAXB序列化,以成为XML返回类型实例(由Java返回类上的注释控制)
- JAX-WS运行时接受XML返回类型实例并将其包装在SOAP响应中
- 最后,SOAP响应作为HTTP响应的有效负载发送回请求者
Client Side
- 在编译客户机应用程序之前,使用WSDL到Java映射工具生成SEI
- 在运行时,JAX-WS javax_xml.ws.Service 类的一个实例被用来提供将被调用的 Web 服务的客户视图。Service.getPort 方法之一被用来获取上一步生成的 SEI 的运行时实例。
- 通过调用代理实例上的一个SEI方法来启动调用:
- 注释用于将JAXB参数和方法调用转换为SOAP请求
- 生成SOAP请求之后,在将其发送到Web服务端点之前,将调用处理程序(由WS-Metadata规范附加)
- 处理程序处理之后,SOAP请求消息被发送到Web服务,并返回一个SOAP响应。SOAP响应以相反的顺序处理
- 首先,应用处理程序
- 然后,对SOAP响应参数进行反序列化(通过JAXB运行时)
- 最后,代理实例返回JAXB实例作为返回值
往年卷A
关于SOA,以下哪些声明是正确的?(A)
A. 三角形SOA操作模型中涉及的三个角色是: 服务请求者、服务提供者和服务注册处
B. 服务可以非正式地分为任务服务、实体服务和实用服务,其中,只有任务服务可以作为服务组合来实现
C. 在面向服务的同时,软件开发分为三个阶段,即平台开发、服务开发和应用开发,应用开发可以由业务专家以服务组合的方式进行。
D. Web服务是一种面向服务的编程语言,在SOA中用来构建服务。
E. 只要是自足的、与平台/实现无关的、可重复使用的,本地或网络软件组件都可以被视为服务。以下哪项是文档对象模型(DOM)可能不被用于某个XML应用程序的最佳原因?(C)
A. 该应用需要复杂的处理
B. 可以允许该应用是非验证性的
C. 该应用程序在内存使用方面受到很大的限制
D. 架构要求使用属性XSL样式表是一个XML文档吗?(A)
A.是
B.不是
C. 取决于文件头
D. 只有当它被应用于一个XML文档时在SOAP消息中,以下哪个部分在env:Envelope中是必须的?(xmlns:env=”http://www.w3.org/2003/05/soap-envelop")(B)
A. env:Header
B. env:Body
C. env:Fault
D. A.和B.都是关于SOAP,以下哪些声明是不正确的?(D)
A. SOAP是一种消息交换协议,它提供了一种无状态的、单向的消息交换范式,但可以用来创建更复杂的交互模式
B. 在SOAP处理模式中,定义了两种类型的中间人:转发中间人和主动中间人
C. 在SOAP故障消息中,env:body的直接子元素应该是env:fault(xmlns:env=”http://www.w3.org/2003/05/soap-envelope“)
D. 在SOAP处理模型中,SOAP头是用来携带增值字符信息的,它们可以被最终接收者和/或中间人处理。SOAP体是用来携带从初始发送者到最终接收者的有效载荷,它可以被最终接收者和/或中间人访问,但它只能被最终接收者修改。
以下哪个元素不能成为WSDL中描述部分的DIRECT子元素(在 “http://www.w3.org/ns/wsdl “的命名空间下)?(E)
A. types
B. interface
C. binding
D. service
E. endpoint(端点)
F. import关于 WSDL,以下哪项不正确?(C)
A. WSDL 文档用于定义服务,从某个 WSDL 文档派生的服务具有类似的能力。
B. 元素interface和operation被用来定义服务的抽象能力,而元素binding、endpoint和service被用来将接口与具体的消息和部署信息联系起来。
C. 一个interface中的操作可以在一个名称空间下共享相同的名称,只要它们对输入/输出消息有不同的定义。这种特性被称为”操作重载”。
D. 由于故障信息是由接口中的操作共享的,所以元素fault被定义为元素interface的直接子元素,并由 QName 来引用。
E. 除了XML模式,我们还可以在WSDL中使用其他模式定义语言。关于代码1,以下哪项规范不正确?(B)
A.头块交易只需要被最终的接收者处理,如果最终的接收者失败了,应该产生一个SOAP故障消息
B.由于头块交易定义了交易ID,响应消息(如果有的话)必须包含这个头块,而不改变,否则,我们不能实现SOAP消息的相关性,因此应该产生一个SOAP故障消息
C. 只要有需要,就可以在这个SOAP消息中添加多个头块以支持更多的字符。
D.只要有需要,元素体中可以包含多个直接子元素代码1中所示的SOAP消息最可能是一个(B)
A. XML-basod内容交换的消息
B. RPC请求消息
C. RPC响应消息
D. 故障消息关于代码1,以下哪项规范不正确?(C)
A. 这个SOAP消息的发送者应该期待一个HTTP响应消息。由于HTTP是面向连接的,地址信息在HTTP响应消息中是不必要的。
B. 在SOAP规范中,寻址方法是由HTTP规范定义的,而不是SOAP规范。
C. 如果HTTP地址URI中的parametcr code-FT35ZBQ被用来识别资源,那么这个SOAP消息是Web架构兼容的,SOAP规范规定了URI计算的默认算法
D. 属性encodingStyle用于定义元素的序列化方案。它的值是一个特定于应用的决定,并且假定互操作的能力已经被 “out-of-band”解决了。根据Code-2,以下哪项声明不正确?(B)
A.元素操作中的属性模式给出了这个操作的MEP(消息交换模式)。MEP由URI识别,不限于WSDL 2.0预先定义的8种类型。
B.如果在元素操作中没有属性模式,这个操作的 MEP 由子元素(输入、输出、过失、过失)的存在和顺序决定。
C. 代号 “#any “意味着检索操作接收任何单一元素作为输入。
D. “reservationDetails.xsd “定义了消息类型 “list:reservationList”,如果消息类型改变了,WSDL 文档仍然可以保持不变。
E. 元素描述可以包含多个接口,只要它们有不同的名称。根据Code-2,以下哪些声明是不正确的?(B)
A.在WSDL扩展中定义的属性wsdlx:safe=”true “表示该操作不会以任何方式约束客户。在这个例子中,我们将使用HTTP PQST来调用这些操作。
B. 元素服务在接口和端点之间定义了一对一的对应关系。元素服务只能有一个端点作为子元素。
C.元素服务中的一些信息,如属性地址,只有在服务部署后才能被确认
D. 本例中的元素绑定是不可重用的。在可重复使用的绑定中,属性界面和特定于操作和特定于故障的绑定细节应该被省略。根据Code-2,以下哪些声明是正确的?(C)
A. 属性schemaLocation=”reservationLíst. xsd “用于定位模式,如果我们在这里找不到模式,将产生一个SOAP故障。
B. 由于interface reservationListInterface中没有定义故障,ServiceRequestor将不会收到任何SOAP故障按摩。
C. 这个例子中的所有属性 messageLabel 都可以省略
D. 由于在检索操作中使用了 “in-out “MEP,因此在SOAP-HTTP绑定中为该操作使用SOAP Request-ResponseMEP是唯一选择。在 JAX-WS 处理程序框架中,对于一个端口类型(在 WSDL 1.1 中),在客户端定义的处理程序链是 LH1/SH1/LH2/SH2,而在服务器端定义的处理程序链是 SH3/LH3/LH4/SH4(LH=逻辑处理程序,SH-SOAP 处理程序)。在request-response调用期间,正确的顺序是什么?(B)
A. SH2/SH1/LH2/LH1/LH4/LH3/SH4/SH3;SH3/SH4/LH3/LH1/LH2/SH1/5H2
B. LH1/LH2/SH1/SH2/SH3/SH4/LH3/LH4;LH4/LH3/SH4/SH3/SH2/SH1/LH2/LH1
C. LH1/SH1/LH2/SH2/SH3/LH3/LH4/SH4;SH4/LH4/LH3/SH3/SH2/SH1/LH2/SH1
D. SH2/LH2/SH1/LH1/SH4/LH4/LH3/SH3;SH3/LH3/LH4/SH4/LH1/SH1/LH2/SH2以下哪些元素不能包含在UDDI中?(D)
A. businessEntitiy
B. businessService
C. bindingTemplate
D. TechnicalService(正确:Technical Models)
E. publisherAssertion关于JAXR,以下哪些声明是不正确的?(B)
A. JAXR是一个JSR,它定义了执行注册表操作的API
B. JAXR定义了RegistryProviders和JAXR Providers之间的通信协议和消息类型
C. 在JAXR中定义了两个能力配置文件,0级配置文件和1级配置文件
D. 用于UDDI的JAXR提供者必须是0级的。用于 ebXML 的 JAXR 提供者必须是 1 级兼容的。
E. JAXR可插件提供者用于为JAXR客户提供抽象能力组。注册处专用的JAXR提供者用于支持各种注册处标准。
往年卷B
关于SOA,以下哪项声明是正确的?(B)
A. 三角形SOA操作模型中涉及的三个角色是: 服务请求者、服务提供者和服务平台
B. 在以服务为导向的同时,软件开发分为两个阶段,服务开发和应用开发。应用开发可以由业务专家通过服务构成来完成。
C. 网络服务是一种面向服务的编程语言,用于构建SOA中的服务。
D. 只要是自足的、与平台/实现无关的、可重复使用的本地或网络软件组件,都可以被视为服务。
E. 按照任务和属性,服务可以被非正式地划分为任务服务、实体服务和实用服务。在这些服务中,只有任务服务可以实现为服务构件。XSL样式表是一个XML文档吗?(A)
A. 是的
B.不是
C. 取决于文件头
D. 只有当它被应用于一个XML文档时考虑一下下面的XML:(B)
Click<1ink>hereto apply 。
如果使用SAX解析器,以下事件将以什么顺序发生?- Start element-Name: paragraph
- End element-Name: paragraph
- Start element-Name: Link
- End element-Name: link
- Characters: Click
- Characters: here
- Characters: to apply
- End characters
A. 1,5,7,3,6,4,2
B. 1,5,3,6,4,7,2
C. 1,5,6,7,3,4,2
D. 1,5,8,3,6,8,4,7,8,2在SOAP消息中,以下哪个部分在env:Envelope中是必须的?(B)
(xmlns:env=”http://www.w3.org/2003/05/soap-envelop“)
A. env:Header
B. env:Body
C. env:Fault
D. env:Binding关于SOAP,以下哪些声明是不正确的?(A)
A. SOAP是一种网络协议,它提供了一种无状态的、单向的消息交换范式,但可以用来创建更复杂的交互模式
B. 一般来说,SOAP主体是用来将有效载荷从最初的SOAP发送者传送到最终的SOAP接收者;SOAP头是用来传送增值服务的信息,它们可以被最终的SOAP接收者和/或SOAP中介机构处理。
C. 在SOAP处理模型中,定义了两种类型的中间人:转发中间人和主动中间人。
D. 在一个故障SOAP消息中,只有一个元素env: fault在env:body(xmlns:env=”http://www.w3.org/2003/05/soap-envelope")中。代码-1显示了一个 (C)
A.基于XML的内容交换的SOAP消息
B. RPC请求的SOAP消息
C. RPC响应SOAP消息
D. 故障消息代码-1 中使用的mustUnderstand属性表示头块 (C)
A. 必须由 “初始发送者 “节点处理
B. 必须由 “中间人 “节点处理
C. 必须由 “最终接收者 “节点处理
D. 必须由信息路径上的所有节点处理以下哪个元素不能成为 WSDL 中描述元素的 DIRECT 子元素(在 “http://www.w3.org/ns/wsdl “的名称空间下)?(E)
A. 类型
B. 接口
C. 绑定
D. 服务
E. 端点
F. 进口关于 WSDL,以下哪项声明是不正确的?(D)
A.WSDL文档用于定义服务,从某个WSDL文档中派生的服务具有类似的能力。
B. 除了XML模式,我们还可以在WSDL中使用一些其他的模式定义语言。
C. 元素接口和操作被用来定义服务的抽象能力,而元素绑定和服务被用来将接口与具体的消息和部署地址联系起来。
D. 接口中的操作可以在一个名称空间下共享相同的名称,只要它们对输入/输出消息有不同的定义,这被称为 “重载”。
E. 由于故障信息是由接口中的操作共享的,所以元素故障被定义为元素接口的直接子元素,并由QName引用。根据Code-2,以下哪项声明不正确?(B)
A. 操作元素中的Pattern属性给出了这个操作的MEP(message exchangeepattern)。
B. 如果操作元素中没有Pattern属性,这个操作的MEP是由操作中的子元素的存在和顺序决定的。
C. 样式属性确定了在定义该操作时遵循的某套规则
D. 接口元素可以包含多个操作元素,只要它们有不同的名称即可。根据Code-2,以下哪项声明不正确?(B)
A.WSDL扩展中定义的wadlx:safe表示该操作不会以任何方式损害客户。
B.messageLable用来表示消息方向。它的值可以是 “in”、”out”、”in/out”。
C. opLogMessage操作在reservationInterface接口中也可用。
D. 虽然在Code-2中没有显示,但在messageLogInterface接口或reservationInterface接口中应该有一个故障清除。在JAX-WS中,处理程序框架被用来 (B)
A. 在java值类和XML消息之间进行转换
B. 提供消息的预处理和后处理
C. 部署服务
D. 访问XML注册表关于JAXB,以下哪项声明是不正确的?(D)
A. JAXB主要是Java和XML之间的一个绑定工具
B. 它被WSPA中的序列化子系统和部署子系统所使用。
C.基于标准的绑定,JAXB定义了Mapping Annotations和BindingLanguage来进行自定义的映射工作。
D. JAXB支持三种开发模式:SFW(从WSDL开始)、SFJ(从Java开始)和SFWJ(从WSDL和Java开始)。在UDDI中,以下哪个元素包含WSDL的规范?(D)
A. businessEntitiy
B. 业务服务
C. bindingTemplate
D. tModel
E. publisherAssertion关于JAXR,以下哪项声明是不正确的?(B)
A. JAXR是一个JSR,用于定义执行注册表操作的API
B. JAXR定义了RegistryProviders和JAXR Providers之间的通信协议和消息类型。
C. JAXR中定义了两个能力配置文件,0级配置文件和1级配置文件
D. 用于 UDDI 的 JAXR 提供者必须是 0 级兼容的。ebXML的JAXR提供者必须是1级兼容的。
E. JAXR可插件提供者被用来为JAXR客户提供抽象的能力组。