用SAAJ解决SOA集成问题

Building SOA with Java.pdf 立即下载
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 面向服务的架构(SOA)和面向服务的集成(SOI)得到了广泛的应用,并且有一种需求变得越来越明显:业务需要集成系统,并允许消费者利用基于标准的方法访问服务。SOA是一种架构范例。在这种架构中,可重用的业务逻辑表现为包含基于标准的、定义良好的接口的服务集,并且可以以松散耦合方式访问它。因为Web Service标准的供应商的支持,以及利用基于这种标准的软件集成不同的系统相对容易,所以在解决企业集成问题方面,SOA得到了普遍的认可。   基于Java的中间件和企业应用程序集成(EAI)产品已经被使用了一段时间,现在,许多公司在以不同的方式使用这项技术。虽然一些服务是在Java平台上开发和提供的,但来自基于Java的应用程序的服务消费还有其他灵活的需求。SOAP with Attachments API for Java (SAAJ)通过提供访问服务的标准API来帮助这些服务的消费。   有几个基于Java的API可以用来访问服务。这些服务包括SAAJ、基于Java API for XML 的RPC(JAX-RPC)和Web服务调用框架(WSIF)。SAAJ提供了构建服务消费者以及提供者的API。让我们看一看如何利用SAAJ在SOA中开发Web Service的消费者。我们将举例说明WebLogic Integration的组合过程,该过程有机地结合了获取城市邮政编码的服务、获取邮政分区的温度的服务,以及消费该服务的一个示例SAAJ客户机。   什么是SAAJ?   SAAJ是在松散耦合软件系统中利用SOAP协议实现的基于XML消息传递的API规范。顾名思义,SAAJ支持带附件的SOAP消息。   对于Java API for XML Messaging (JAXM),您已经了解很多,并且可能感到奇怪,究竟JAXM发生了什么事?JAXM 1.0的理念是通过提供消息传递和SOAP API,允许开发人员根据SOAP编写支持消息传递标准的业务应用程序。随着JAXM 1.1版的推出,SOAP API (javax.xml.soap)被分割成了SAAJ1.1规范和JAXM1.1,JAXM1.1只包含基于消息传递的API(javax.xml.messaging)。目前,正在使用的SAAJ版本是1.2。WebLogic Server 8.1 SP2 支持SAAJ 1.1规范。   SAAJ 1.2 API主要由javax.xml.soap包组成,它为带有多用途互连网邮件扩展协议(MIME)附件的SOAP消息提供抽象。该API提供了创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法。   虽然在开发企业应用程序的时候,有几种技术供您选择,但对于不同的问题,某些技术可能更合适。选择正确的工具非常重要。   选择SAAJ的理由是什么呢?SAAJ无疑很适合基于文档的同步或者异步Web Service。SAAJ使用简单,有助于您在Java环境中集成各种Web Service,它扩展了对文档风格的Web Service通信的自然支持(natural support)。SAAJ还支持基于标准接口上的XML消息传递,并且这一点得到了供应商的广泛支持。   编写客户机   清单 1显示了一个用SAAJ编写的简单的消费者,它访问了一个同步WebLogic Integration过程,来获得给定城市的温度。完整的项目可以从www.WebLogicPro.com下载。下面将讨论完成该项目所必需的步骤。 清单 1. 用SAAJ编写的这个简单的消费者访问了一个同步WebLogic Integration过程,来获得给定城市的温度。 private static void invokeService( String serviceUrl, String inputXml) { SOAPMessage reply = null; try { //Create Soap Connection SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); SOAPConnection con = scf.createConnection(); //Create Message MessageFactory mf = MessageFactory.newInstance(); SOAPMessage msg = mf.createMessage(); // Get the SOAPPart from the message SOAPPart soapPartInput = msg.getSOAPPart(); // Creating an attachment Part AttachmentPart attachPart = msg.createAttachmentPart(); attachPart.setContent( "This is a text attachment", "text/plain"); // Create and set the content from the // input XML document StringReader stringReaderInput = new StringReader(inputXml); StreamSource ssInput = apPartInput.setContent(ssInput); // Save the changes to the message msg.saveChanges(); // Invoke the service synchronously and // get the reply reply = con.call(msg, serviceUrl); // Get the SOAP body from the response SOAPBody outSoapBody = reply.getSOAPPart().getEnvelope().getBody(); // Check to see if there is any SOAP Fault if (outSoapBody.hasFault()) { // Take any actions for the exception scenario SOAPFault fault = outSoapBody.getFault(); // Log the fault details System.out.println("SOAP Fault occurred"); System.out.println("Fault Code is " fault.getFaultCode()); System.out.println("Fault String is " fault.getFaultString()); } else { // Print the output SOAP envelope System.out.println( reply.getSOAPPart().getEnvelope()); } // Close the connection con.close(); } catch (SOAPException e) { // Print the stack trace if there are any // SOAPExceptions e.printStackTrace(); } }   首先,创建一个SOAP连接。SAAJ客户机可以利用SOAP Connection Factory,通过创建SOAPConnection来建立点到点的同步连接。该连接提供了同步调用服务的方法。接下来,将利用MessageFactory.newInstance()创建一个消息工厂的新实例。然后利用消息工厂的createMessage()方法创建一条SOAPMessage。这样就创建了一条没有内容的消息。 SOAPMessage可以有一个SOAPPart,它包含XML SOAP消息和一个用于二进制/文本附件的AttachPart。通过调用消息的getSOAPPart()方法可以得到SOAPPart。利用消息的createAttachPart()方法可以创建附件部分。并且可以利用AttachPart的 setContent()方法设置附件。第1个参数是附件,第2个参数是内容类型。   现在,要利用采用一个Source 对象的setContent()方法来设置SOAPPart的内容。该示例展示了用StringReader 和 StreamSource对象设置String中的内容的方法,但其源对象可以是任何东西。例如,如果您正在从文件中读取输入,则可以使用FileInputStream设置该内容。   可以调用SOAPMessage 的saveChanges()方法,来保存对消息的更改。在调用连接的“call”方法时(这是下一步操作),这些更改也是被自动保存的。“call”方法把消息和端点作为参数(接受)。所有来自服务的同步响应将在SOAPMessage返回参数中返回。如果服务是异步服务,那么客户机应该忽略返回的SOAPMessage。   最后,检查由服务返回的所有错误。调用close()方法关闭连接。所有SOAP级异常都将作为SOAPException被抛出。   SOAP Fault处理   SOAP规范定义了一个利用SOAP Fault将异常传回消费者的标准方法。虽然SOAP 1.1和SOAP1.2的SOAP Fault 结构存在很大的差异,但所有这些版本确实有一些通用元素。有关SOAP Fault的更多信息,请参阅 www.w3.org/TR/2003/REC-soap12-part1-20030624/#soapfault。   SAAJ提供了查找是否出现SOAP错误的API,并且如果出现SOAP错误,那么它将提供访问错误元素的方法,比如fault code、fault string、fault actor和fault detail元素。SOAPBody有以下这些方法:   hasFault()——如果返回SOAP Fault,则返回true。   getFault()——返回SOAPFault对象。   SOAPFault有下面这些处理fault对象的方法:   getFaultCode()——返回SOAP错误中的错误代码。   getFaultString()——返回错误字符串。   getFaultActor()——返回指出错误来源的错误操作符。   getDetail()——返回fault detail元素。   清单 1给出了出现错误时记录错误元素所在之处的一个示例。 WebLogic Integration过程   图1展示了Get Temperature的组合过程。该过程将下述的服务有机地结合在一起,从而获得某一给定城市和国家的温度:   接收城市和州的位置信息,并将它放置在XML文档中。   使用U.S. Zip Web服务(www.xmethods.net)获取具有给定名称的所有城市的邮政编码和所在州的列表。   利用转换服务获取所提供的特定州中城市的邮政编码。   调用天气-温度服务,获取该邮政编码区域的温度(www.xmethods.net)。   将结果转换成位置输出文档,并返回它。   合理处理所有异常。 图 1.   以上是 WebLogic Integration Get Temperature 的组合过程。
从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr 本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。 阅读详情

相关推荐

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器直接操作硬件外设,实现感知、决策与执行。这项技术的核心价值在于为物联网、智能硬件和机器人等领域提供了低功耗、高可靠性的解决方案。在机器人应用场景中,嵌入式平台常作为主控大脑,驱动舵机、传感器并处理交互逻辑。本文聚焦的Stack-chan项目,正是这一理念的生动实践:它采用流行的ESP32微控制器,并创新性地通过Moddable运行时支持使用JavaScript进行嵌入式开发,极大地降低了机器人编程的门槛。开发者可以基于此平台,轻松实

weixin_28729173的博客 439

第二十二章 SOAP 错误处理 - SOAP 1.1 故障

消息路径中的多个节点,并且客户端需要知道哪个节点导致错误,则此功能非常有用。讨论这个高级主题超出了本文档的范围。不会验证提供的字符串是否有效;检查这一点是您的应用程序的责任。指定一个字符串来指示错误的原因,以便用户查看。错误信封的命名空间前缀声明。使用它来指定有关故障原因的信息。方法,该方法以字符串形式返回故障对象。如果指定,此参数应为包含可在。错误的示例,其中包括。错误代码的宏中列出的。作为参考,这里有一个。

yaoxin521123的博客 815

微信PC端Multi文件夹数据库解析:语音消息导出与转换实战指南

本文提供了一份详细的微信PC端语音消息导出与转换实战指南。通过解析Multi文件夹中的MediaMSG数据库,指导用户定位、解密数据库,并利用Python脚本精准提取SILK格式语音,最终转换为通用的WAV或MP3格式,实现个人语音数据的本地备份与处理。

garlic的博客 585

SOAP出现问题:由于 ContractFilter 在 EndpointDispatcher 不匹配,因此 Action 为“”的消息无法在接收方处理(已解决)

SOAPUI在服务器上正常运行; 用JAVA的POST请求调用时,能够调通接口,但出现问题: <s:Envelope xmlns:s=“http://schemas.xmlsoap.org/soap/envelope/”><s:Body><s:Fault>a:ActionNotSupported由于 ContractFilter 在 EndpointDispat...

Fishandbearspaw的博客 8143

SoIC、CoWoS、InFO一次讲透:从2D/2.5D/3D看懂先进封装

先进封装是后摩尔时代提升芯片性能的关键路径,但面对SoIC、CoWoS、InFO这些名词,很多人容易混淆。理解它们,需从最基本的2D、2.5D、3D封装概念入手:2D是传统平房,2.5D通过硅中介层实现高密度互连,3D则让芯片直接堆叠。CoWoS作为2.5D中介层封装,已成为AI芯片与HBM高带宽存储集成的行业标准;SoIC通过铜-铜混合键合实现真正的3D堆叠,为逻辑与缓存提供极致带宽;InFO以扇出型封装兼顾成本与集成度,广泛用于移动SoC。在系统级封装(SiP)和CPO共封装光学等前沿趋势中,这些技术往

weixin_42388898的博客 314

oracle ebs form 10g安装教程

这个窗口需要想想,你要安装的类型,不要盲目点击“下一步”,因为一旦Oracle安装后,重新安装之前,需要卸载Oracle干净才能重新安装,有时还会出现错误。到了该窗口后,需要耐心等待安装,安装到一大半后,自动弹出一个窗口,让我们选择Oracle安装第2部分磁盘的路径,继续安装,然后坐等安装结束。自定义安装Oracle根目录,点击“下一步”按钮后,耐心等待几秒钟,工具自动加载产品列表,加载完后,自动跳转到“选择安装类型”窗口。注:等待几秒钟后,关闭dos窗口,不必惊慌,自动调转到安装界面。

XIELIUHAI001的博客 475

使用SAAJ发送和接收SOAP消息

在本技巧中,作者和开发人员 Nicholas Chase 向您展示了如何使用 SOAP with Attachments API for Java (SAAJ),从而简化创建和发送SOAP消息的过程。Web 服务的基础是以标准格式发送和接收消息,这样所有系统都可以理解消息。通常情况下,这种标准格式是 SOAP。SOAP 消息可以手工生成和发送,但 SOAP with Attachments A

ren_it的专栏 1068

水文预报新手别怕!用Matlab 18小时搞定马斯京根法参数K和x(附完整代码)

本文详细介绍了如何使用Matlab在18小时内快速掌握水文预报中的马斯京根法参数K和x的求解方法。通过完整的代码示例和分步解析,帮助新手从理论到实践快速跨越,解决传统手工试算耗时耗力的问题,提升水文预报的效率和精度。

weixin_42573113的博客 259

【WebService】Java WebService消息格式SOAP1.1和SOAP1.2的区别

摘要: 目前WebService的协议主要有SOAP1.1和1.2,CXF3的版本也同时支持1.1和1.2。 SOAP1.1和1.2发布的WebService的主要区别: 1、两者的命名空间不同。 1.1 -> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 1.2->xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 注:这个地方只是说 xmlns:soap 这个..

ooooooooooooooxiaosu的博客 1934

Android 的端智能学习路径

基础层:先补齐 Android 进阶(JNI / 性能优化)和 AI 基础概念,无需深入算法开发;核心层:掌握 TFLite 的模型加载、推理、量化,能完成基础端侧推理;落地层:聚焦实战场景(图像 / OCR / 语音),解决工程化问题(模型管理、异常处理);优化层:通过模型量化、硬件加速、工程优化,提升推理性能和用户体验。

hqiangtai的博客 346

告别机床‘卡顿’!用C语言在STM32上实现连续小线段速度前瞻(附开源代码)

本文详细介绍了如何在STM32上使用C语言实现工业级连续小线段速度前瞻控制器,解决机床运动控制中的卡顿问题。通过轻量级算法框架设计和混合精度计算策略,显著提升加工效率和表面质量。文章包含开源代码和实战案例,帮助开发者快速掌握速度前瞻规划算法在嵌入式系统中的应用。

weixin_42571738的博客 187

java写soap客户端_工作Soap客户端示例

问题我正试图在JAVA中找到一个带有工作服务的简单(ha)SOAP示例,我似乎发现的任何东西都不起作用。我试过这个578312314来自这个example但是它只是不工作,它要求我放一个正斜杠但它在那里并没有发生任何事情。那么有谁知道任何SOAP示例链接,我可以下载/请求和搞乱?谢谢你的帮助。#1 热门回答(195 赞)要在Java中实现简单的SOAP客户端,你可以使用SAAJ框架(它随JSE 1...

weixin_39627361的博客 509

高通8155源码下载与Android源码编译

一.下载代码 高通下载源码位置: Qualcomm CreatePoint 注册账号,然后登入 可以先选择edit -> infotainment -> sa8155 -> favorites, 点击View TOC就可以过滤出sa8155所有的信息目录.如下图 拉取代码链接在ChipCode中,点击进去可以看到所有的基线版本,选择你需要下载的版本点进去,如sa8155p-la-1-0_ap_standard_oem,把高通专有代码和开源代码都下载到本机. 1..

Johnny2004的专栏 7675

解析:用SAAJ解决SOA集成问题

面向服务的架构(SOA)和面向服务的集成(SOI)得到了广泛的应用,并且有一种需求变得越来越明显:业务需要集成系统,并允许消费者利用基于标准的方法访问服务。SOA是一种架构范例。在这种架构中,可重用的业务逻辑表现为包含基于标准的、定义良好的接口的服务集,并且可以以松散耦合方式访问它。因为Web...

chenqunan3231的博客 86

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CXF学习(0)——WebService与SOA

一、什么是WebService Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。 Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web S...

小隐的博客 479

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一个简单的SOA实现

一个简单的SOA实现SOA ( Service Oriented Architecture ),是当前比较热门的话题,但是它的神秘面纱到底是什么呢,我想不应该把它看得那么神秘,不就是一种服务与技术分离的实现,从而达到服务可重用性的一种思想吗,我觉得没有必要这么鼓吹吗,^_^,我开玩笑的,不必当真。下面我大致介绍一个SOA的实现,虽然缺少了总线的概念在里面。本例还是基于前两个例子的基础上

yaohua_1999的专栏 1433

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

访谈和书摘:Eben Hewitt的Java SOA食谱

Eben Hewitt撰写的Java SOA Cookbook从Java实现的角度介绍了面向服务的体系结构( SOA )主题。 在本书中,Eben讨论了SOA模型的基础知识,使用Web服务和工具以及最佳实践的实现。 这本书以问题-解决-讨论的形式编写。 它分为四个部分: SOA基础 网页服务 业务流程 互操作性和服务质量 作者从XML架构和SOA数据模型的介绍以及如何使...

cunfu6353的博客 330

微服务与SOA以及服务间通讯协议

说到微服务,就一定会想到微服务、分布式、集群、SOA、SOAP、restful、Http、RPC等相关概念,而这些概念都一些界限都非常的模式,很难理清楚确切的概念,本篇主要是介绍我对微服务中常遇到的一些问题的理解,很多东西也是查看了很多书籍之后才有一个模糊的概念。 分布式与集群 首先说是分布式与集群的概念,关于分布式比较官方的术语就是一组不同且有相互关联的组件分布在网络计算机上,并且仅仅通过消息传递来通信并协调行动。而集群则是将同一种组件分布在网络计算机上。它们之间的区别在于是否是同一组件(服务)的部署

微服务技术栈 1870
上一篇: Websphere6集群环境应用部署手册
下一篇: Sun 收购JRuby 向动态语言迈进
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值