专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » soa集成:SOA集成问题解决方法 »正文

soa集成:SOA集成问题解决方法

来源: 发布时间:星期四, 2009年2月12日 浏览:156次 评论:0


面向服务架构(SOA)和面向服务集成(SOI)得到了广泛应用并且有种需求变得越来越明显:业务需要集成系统并允许消费者利用基于标准思路方法访问服务SOA是种架构范例在这种架构中可重用业务逻辑表现为包含基于标准、定义良好接口服务集并且可以以松散耦合方式访问它Web Service标准供应商支持以及利用基于这种标准软件Software集成区别系统相对容易所以在解决企业集成问题方面SOA得到了普遍认可

  基于Java中间件和企业应用集成(EAI)产品已经被使用了段时间现在许多公司在以区别方式使用这项技术虽然些服务是在Java平台上开发和提供但来自基于Java应用服务消费还有其他灵活需求SOAP with Attachments API for Java (SAAJ)通过提供访问服务标准API来帮助这些服务消费

  有几个基于JavaAPI可以用来访问服务这些服务包括SAAJ、基于Java API for XML RPC(JAX-RPC)和Web服务框架(WSIF)SAAJ提供了构建服务消费者以及提供者API让我们看看如何利用SAAJ在SOA中开发Web Service消费者我们将举例介绍说明WebLogic Integration组合过程该过程有机地结合了获取城市邮政编码服务、获取邮政分区温度服务以及消费该服务个举例SAAJ客户机

  什么是SAAJ?

  SAAJ是在松散耦合软件Software系统中利用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.1JAXM1.1只包含基于消息传递API(javax.xml.messaging)目前正在使用SAAJ版本是1.2WebLogic Server 8.1 SP2 支持SAAJ 1.1规范标准

  SAAJ 1.2 API主要由javax.xml.soap包组成它为带有多用途互连网邮件扩展协议(MIME)附件SOAP消息提供抽象该API提供了创建到端点点到点连接思路方法、创建并处理SOAP消息和附件思路方法以及接收和处理SOAP思路方法

  虽然在开发企业应用时候有几种技术供您选择但对于区别问题某些技术可能更合适选择正确工具非常重要

  选择SAAJ理由是什么呢?SAAJ无疑很适合基于文档同步或者异步Web ServiceSAAJ使用简单有助于您在Java环境中集成各种Web Service它扩展了对文档风格Web Service通信自然支持(natural support)SAAJ还支持基于标准接口上XML消息传递并且这点得到了供应商广泛支持

  编写客户机

  清单 1显示了个用SAAJ编写简单消费者它访问了个同步WebLogic Integration过程来获得给定城市温度完整项目可以从www.WebLogicPro.com下载下面将讨论完成该项目所必需步骤

清单 1. 用SAAJ编写这个简单消费者访问了个同步WebLogic Integration过程来获得给定城市温度

private void invokeService(
String serviceUrl, String inputXml)
{
SOAPMessage reply = null;
try
{
//Create Soap Connection
SOAPConnectionFactory scf = SOAPConnectionFactory.Instance;
SOAPConnection con = scf.createConnection;

//Create Message
MessageFactory mf = MessageFactory.Instance;
SOAPMessage msg = mf.createMessage;

// Get the SOAPPart from the message
SOAPPart soapPartInput = msg.getSOAPPart;
// Creating an attachment Part[Page]
AttachmentPart attachPart = msg.createAttachmentPart;
attachPart.Content( \"This is a text attachment\", \"text/plain\");

// Create and the content from the
// input XML document
StringReader ReaderInput = StringReader(inputXml);
StreamSource ssInput = apPartInput.Content(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 there is any SOAP Fault
(outSoapBody.hasFault)
{
// Take any actions for the exception scenario
SOAPFault fault = outSoapBody.getFault;

// Log the fault details
.out.prln(\"SOAP Fault occurred\");
.out.prln(\"Fault Code is \" + fault.getFaultCode);
.out.prln(\"Fault String is \" + fault.getFaultString);
}

{
// Pr the output SOAP envelope
.out.prln( reply.getSOAPPart.getEnvelope);
}

// Close the connection
con.close;
}
catch (SOAPException e)
{
// Pr the stack trace there are any
// SOAPExceptions
e.prStackTrace;
}
}


  首先创建个SOAP连接SAAJ客户机可以利用SOAP Connection Factory通过创建SOAPConnection来建立点到点同步连接该连接提供了同步服务思路方法接下来将利用MessageFactory.Instance创建个消息工厂新例子然后利用消息工厂createMessage思路方法创建条SOAPMessage这样就创建了条没有内容消息

SOAPMessage可以有个SOAPPart它包含XML SOAP消息和个用于 2进制/文本附件AttachPart通过消息getSOAPPart思路方法可以得到SOAPPart利用消息createAttachPart思路方法可以创建附件部分并且可以利用AttachPart Content思路方法设置附件第1个参数是附件第2个参数是内容类型

  现在要利用采用个Source 对象Content思路方法来设置SOAPPart内容该举例展示了用StringReader 和 StreamSource对象设置String中内容思路方法但其源对象可以是任何东西例如如果您正在从文件中读取输入则可以使用FileInputStream设置该内容



  可以SOAPMessage saveChanges思路方法来保存对消息更改连接“call”思路方法时(这是下步操作)这些更改也是被自动保存“call”思路方法把消息和端点作为参数(接受)所有来自服务同步响应将在SOAPMessage返回参数中返回如果服务是异步服务那么客户机应该忽略返回SOAPMessage

  最后检查由服务返回所有close思路方法关闭连接所有SOAP级异常都将作为SOAPException被抛出

  SOAP Fault处理

  SOAP规范标准定义了个利用SOAP Fault将异常传回消费者标准思路方法虽然SOAP 1.1和SOAP1.2SOAP Fault 结构存在很大差异但所有这些版本确实有些通用元素有关SOAP Fault更多信息请参阅 www.w3.org/TR/2003/REC-soap12-part1-20030624/#soapfault[Page]

  SAAJ提供了查找是否出现SOAPAPI并且如果出现SOAP那么它将提供访问元素思路方法比如fault code、fault 、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 组合过程
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: