ibm synapse_使用Apache Synapse模拟Web服务以开发和测试Web服务

在你开始前

关于本教程

本教程讨论了如何使用Apache Synapse ESB创建模拟Web服务。 目标Web服务客户端和服务可以使用任何语言,例如Microsoft®.NET,Java或PHP。 您将使用几个示例,从最基本的配置开始,逐步构建更复杂的解决方案以创建模拟Web服务。

先决条件

本教程主要是为Web服务开发人员编写的,因此您应该大致了解Web服务的概念。 熟悉Apache Synapse会有所帮助。 您还应该至少具有XSL转换(XSLT)和JavaScript代码的基本知识。 如果您不熟悉这方面,那么Web上有很多资源可以为您提供基本信息。

系统要求

Apache Synapse需要JDK 1.5,并且可以在Linux®,MicrosoftWindows®和Solaris环境中运行。 内存和磁盘空间要求最小,因为您可以在低端系统上轻松运行它而不会出现任何问题。

在本教程中,命令和目录名称以Linux兼容格式给出。 如果您的操作系统不同,请相应地更改命令和目录名称。 例如,在Windows中,必须使用synapse.bat脚本而不是synapse.sh来启动Synapse实例。

什么是模拟Web服务,为什么要使用它们?

您的日常工作中可能会遇到以下四种情况:

  • 要求您编写一个依赖于一个或多个远程Web服务的程序。 Web服务可以在生产服务器中运行,而您可能无法在测试服务器中随时使用它们。 对于第三方服务,您甚至可能无权访问代码或二进制文件。 因此,您可能必须从头开始组装一些假服务来测试您的代码。 很有可能您没有针对生产服务器测试您对酒店预订系统所做的错误修复,方法是先进行预订,然后再取消预订。 还是你
  • 您可能正在家里,在路上或在飞行中工作,并且需要脱机使用全套Web服务,以便可以尝试对订单处理系统进行最新更改。 该系统通过目录服务检查产品,并通过订单处理服务下订单。
  • 您想创建一个脱机演示,但是不确定远程Web服务将始终可访问并运行。 当潜在客户坐在您的面前时,您需要确保Web服务调用正确响应(即,没有连接超时异常)。
  • 您可能需要模拟不同的场景。 如果服务以故障或某些意外响应响应,该怎么办? 从托管测试服务中很难获得您想要的确切响应。 您的程序可能没有经过无故障房间响应测试,直到生产两周后才发生。

在所有这些情况下,您都可以通过创建伪造的Web服务(称为模拟Web服务)来解决这些问题,该服务模仿真实Web服务的行为。 模拟Web服务具有与真实Web服务相同的界面和行为。 在开发和测试时,您将真实的Web服务端点与模拟Web服务端点交换。 这使您可以验证请求消息并为外部Web服务调用输入所需的响应消息。

Apache Synapse解决方案

将Apache Synapse用于模拟Web服务的妙处在于,您可以在解决企业集成问题时应用与使用ESB所获得的相同技能和专有技术,而无需学习和投资其他工具。 您可以使用可用的工具,脚本语言,样式表,甚至Java代码,以所需的方式转换和处理响应。

我认为您已经安装并运行了一些Apache Synapse示例。 Apache Synapse附带了许多示例,您可以在捆绑的示例服务器和客户端的帮助下进行尝试(请参阅“可下载资源”部分)。 如果尚未执行此操作,请访问Apache Synapse网站并下载最新版本( 有关链接,请参阅参考资料部分)。 查看样本指南,然后尝试一些样本。 按照指南中的分步说明,您可以立即开始使用。 在本文中,您将使用相同的示例客户端,并使用一些Synapse配置在Apache Synapse中模拟相同的示例服务器行为。

Synapse配置是用特定于域的语言编写的XML文件,用于告诉Synapse如何处理收到的消息。 (有关Synapse配置的完整语法,请参阅“ 相关主题”部分中的Synapse配置语言指南。)

在这些示例中,您将使用简单的XSL样式表和脚本代码。 即使您不熟悉它们,也可以修改给定的样本并轻松地使用它们来满足您的要求。

设置样本

首先,您安装Apache Synapse并准备环境以试用示例:

  1. 下载的Apache Synapse最新版本,并提取分配到一个目录(请参阅相关信息的链接,下载Apache Synapse)。
  2. 如果尚未安装JDK 1.5,则将其指向JAVA_HOME环境变量。
  3. 安装PATH环境变量中提供的Apache Ant和Apache Ant bin目录(请参阅参考资料中的链接)。
  4. 从可下载资源部分下载示例包,然后将其解压缩到目录中。
  5. 从样本包中,将模拟目录复制到Apache Synapse仓库/ conf / sample / resources目录。 图1显示了Synapse目录结构中文件的复制位置。
  6. 将五个Synapse配置文件复制到Apache Synapse repository / conf / sample目录(请参见图1)。
图1.示例文件的位置
样本文件的位置

您使用与Synapse用于启动捆绑的示例配置的相同机制来试用Synapse示例配置文件。 这就是为什么这些配置被命名为synapse_sample _ *。xml并位于示例目录中的原因。

与Synapse分发捆绑在一起的示例客户端已编写为生成不同类型的请求,处理其响应并显示输出。 (有关更多详细信息,请参阅“ 相关主题”部分中的“ Synapse示例指南”。)

您可以使用Apache TCPMon之类的工具来查看运行客户端时发生的情况(请参阅参考资料中的链接)。 配置监视工具以侦听8081,并将其转发到端口8080。您正在设置该工具,以拦截在客户端和Synapse之间移动的消息。 TCPMon显示客户端正在发送的内容以及Synapse向后发送的内容。 如果您不使用TCPMon,请稍后再运行示例客户端命令时,将端口8081替换为8080。

而已。 现在,您可以开始使用Apache Synapse构建模拟Web服务。 您从最简单的示例开始,然后逐步构建更复杂的配置。

简单的请求和响应

首先,您模拟最简单的场景:指示Apache Synapse无论收到什么请求,都发送固定的响应:

  1. 通过转到Synapse bin目录并提供命令./synapse.sh -sample mock1-simple ,以synapse_sample_mock1-simple.xml配置启动Synapse。 这将使用synapse_sample_mock1-simple.xml配置启动Synapse实例,您已将其复制到存储库/ conf / sample。
  2. 在Synapse启动之后,转到Synapse samples / axis2Client目录,并按以下方式运行示例客户端: ant stockquote -Dtrpurl=http://localhost:8081/

该示例客户机为符号IBM创建一个getQuote操作请求,并将其发送到端点地址http:// localhost:8081 / soap / StockQuote。 然后打印从收到的响应中提取的股票价格。 如果您使用过TCPMon之类的工具,则可以看到客户getQuote在发送getQuote操作请求消息,而Synapse回发了getQuoteResponse响应消息。

请注意,这类似于Synapse示例指南中的示例0(请参阅参考资料中的链接)。 但是您没有使用Addressing标头。 这是为了使样本尽可能简单。 您尚未使用示例服务器; 相反,Synapse模拟了服务器响应。 清单1显示了您使用过的Synapse配置。

清单1.用于简单请求和响应的Synapse配置:synapse_sample_mock1-simple.xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <localEntry key="GetQuoteResponse_xsl"
    src="file:repository/conf/sample/resources/mocks/GetQuoteResponse.xsl"/>
    <in>
      <xslt key="GetQuoteResponse_xsl"/>
      <property name="RESPONSE" value="true"/>
      <header name="To" action="remove"/>
      <send />
    </in>
</definitions>

在配置中,您已使用简单的样式表转换将请求消息内容替换为响应消息内容,并将其标记为响应,以便Synapse将其传递回请求者。 您还删除了WS Addressing标头(如果存在)。 否则,Synapse使用该标头传递消息。 在这种最简单的情况下,无论请求是什么,您都已将Synapse配置为发送回此固定消息。 您可以尝试使用不同的请求消息来调用此端点。 它将回复相同的响应消息。 您可以在样式表中更改消息内容并更改Synapse响应。 现在使用ant stockquote -Dtrpurl=http://localhost:8081/ -Dmode=fullquote -Dsymbol=ABC如下运行示例客户端。 这将发送代码为ABC的完整股票报价请求。

如果监视请求消息,则可以看到这是一条带有股票代码ABC的getFullQuote操作请求消息。 但是Synapse发送的响应与之前相同。

清单2是您使用的样式表GetQuoteResponse.xsl。 您只需将当前请求消息替换为响应消息内容即可。

清单2.用于简单请求和响应的样式表:GetQuoteResponse.xsl
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>

  <xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <ns:getQuoteResponse xmlns:ns="http://services.samples/xsd">
          <ns:return type="samples.services.GetQuoteResponse">
            <ns:change>-2.920874334221886</ns:change>
            ...
            <ns:symbol>IBM</ns:symbol>
            <ns:volume>9343</ns:volume>
          </ns:return>
        </ns:getQuoteResponse>
      </soapenv:Body>
    </soapenv:Envelope>
  </xsl:template>
</xsl:stylesheet>

在清单2中,您定义了一个隐式主序列。 驻留在顶层的所有调解器元素(例如本例中的in调解器)都属于该元素。 Synapse收到的每个请求都按照此顺序进行。 在以下示例中,您将托管一个虚拟Web服务,该服务具有其自己的终结点地址和其自己的Web服务描述语言(WSDL)。

设置代理服务

这次您在Synapse中托管虚拟Web服务,该服务将返回预定义的响应消息,如上一个示例。 此外,虚拟Web服务还会发布模拟真实Web服务的自定义WSDL。 该样本类似于Synapse样本指南中的简单代理服务样本150(请参阅参考资料中的链接)。

  1. 使用synapse_sample_mock2-proxy.xml配置启动Synapse,如下所示: ./synapse.sh -sample mock2-proxy
  2. 要查看Web服务WSDL,请在Web浏览器中转到http:// localhost:8080 / soap / StockQuoteService?wsdl。 这是您为代理服务提供的定制WSDL。
  3. 您可以使用ant stockquote -Dtrpurl=http://localhost:8081/soap/StockQuoteService运行示例客户端。
  4. 您将获得与先前示例相同的股票价格。 在这种情况下,您已将请求消息发送到托管代理服务的位置。 清单3是您使用的Synapse配置。
清单3.用于设置代理服务的Synapse配置:synapse_sample_mock2-proxy.xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <localEntry key="GetQuoteResponse_xsl"
    src="file:repository/conf/sample/resources/mocks/GetQuoteResponse.xsl"/>
  <proxy name="StockQuoteService">
    <target>
      <inSequence>
        <xslt key="GetQuoteResponse_xsl"/>
        <property name="RESPONSE" value="true"/>
        <header name="To" action="remove"/>
        <send/>
      </inSequence>
      <outSequence/>
    </target>
    <publishWSDL
      uri="file:repository/conf/sample/resources/mocks/SimpleStockQuoteService.wsdl"/>
  </proxy>
</definitions>

在这种情况下,您定义了一个名为StockQuoteService的代理服务。 顾名思义, 代理服务是在ESB内部运行的虚拟服务。 它具有确定的端点位置,您可以为该服务提供自定义WSDL,以便该服务的行为与远程服务器上托管的任何其他Web服务一样。

想象一下,您正在为远程生产服务构建客户端。 您可以获取WSDL,像这样托管它,并在几分钟内处理请求消息以模拟真实服务。 您甚至可以为此服务设置WS-Security,WS-ReliableMessaging和其他附加功能,以模拟特定的实际条件。 您可以使用Synapse轻松地将这些服务质量(QoS)添加添加到现有的生产服务中。

发往此服务的请求消息通过inSequence的中介程序inSequenceinSequence内容与先前示例中in介体的内容相同。 您将请求消息替换为响应消息并将其标记为响应消息。

此配置不包含主序列。 您只处理虚拟服务StockQuoteService收到的请求消息。 如果像以前的实例一样将请求消息发送到http:// localhost:8081 /,则Synapse会记录该消息并将其删除。 没有主序列时,这是默认行为。

您已成功在ESB中托管了虚拟服务。 您正在将请求消息有效负载与给定的响应交换,并将其标记为响应,以便Synapse将其发回,就像它来自示例服务器一样。

到目前为止,您已经向所有收到的请求消息发送了固定的响应消息。 接下来,您将了解如何根据请求消息的内容来自定义响应消息。

具有自定义响应的代理服务

在此示例中,您无需发送固定的响应,而是根据请求消息的内容更改响应。 与前面的示例一样,您可以使用样式表将请求消息转换为响应消息,同时从请求消息中提取一些值并将其放入响应消息中。

  1. 使用synapse_sample_mock3-customquote.xml配置启动Synapse: ./synapse.sh -sample mock3-customquote
  2. 使用ant stockquote -Dtrpurl=http://localhost:8081/soap/StockQuoteService -Dsymbol=ABC运行示例客户端。
  3. 如果监视响应消息,则可以看到它与请求消息中的符号相同。 更改符号值,然后再次运行。 响应消息将包含给定的请求符号值。

清单4是您使用的Synapse配置。

清单4.具有定制响应的代理服务的Synapse配置:synapse_sample_mock3-customquote.xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <localEntry key="CustomGetQuoteResponse_xsl"
    src="file:repository/conf/sample/resources/mocks/CustomGetQuoteResponse.xsl"/>
  <proxy name="StockQuoteService">
    <target>
      <inSequence>
        <xslt key="CustomGetQuoteResponse_xsl"/>
        <property name="RESPONSE" value="true"/>
        <header name="To" action="remove"/>
        <send/>
      </inSequence>
      <outSequence/>
    </target>
    <publishWSDL
      uri="file:repository/conf/sample/resources/mocks/SimpleStockQuoteService.wsdl"/>
  </proxy>
</definitions>

您的样式表从请求消息中提取内容,并使用其中的一些来自定义响应。 在这种情况下,您只需使用<xsl:value-of/>元素提取请求数据并将其放入响应消息中。

清单5.具有自定义响应的代理服务的样式表:CustomGetQuoteResponse.xsl
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>

  <xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <ns:getQuoteResponse xmlns:ns="http://services.samples/xsd">
          <ns:return type="samples.services.GetQuoteResponse">
            <ns:change>-2.920874334221886</ns:change>
            ...
            <ns:symbol><xsl:value-of
              select="ns:getQuote/ns:request/ns:symbol"/></ns:symbol>
            <ns:volume>9343</ns:volume>
          </ns:return>
        </ns:getQuoteResponse>
      </soapenv:Body>
    </soapenv:Envelope>
  </xsl:template>
</xsl:stylesheet>

在此示例中,您使用样式表转换来使用从请求消息中提取的内容来构建合适的响应消息。 如果查看此Web服务的WSDL,则可以看到此Web服务中还有另外三个操作。 目前,对于发送到此代理服务的任何类型的请求消息,Synapse都会发送相同的响应。 在下一节中,您将实现Web服务的其他操作。

全面的代理服务

现在,让我们使用样式表转换实现股票报价服务的全部操作。 您正在测试请求消息中的操作名称元素,并将其替换为适当的响应。

  1. 使用synapse_sample_mock4-fullservice.xml配置启动Synapse: ./synapse.sh -sample mock4-fullservice
  2. 运行示例客户端,如下所示: ant stockquote -Dtrpurl=http://localhost:8081/soap/StockQuoteService -Dmode=quote
  3. 改变quotefullquotemarketactivity ,和placeorder分别与运行上述命令。 在每种情况下,示例客户端都会发送不同类型的请求。 Synapse根据发送的请求消息发送适当的响应。

清单6是您使用的Synapse配置。

清单6.完整代理服务的Synapse配置:synapse_sample_mock4-fullservice.xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <localEntry key="SimpleStockQuoteService_xsl"
    src="file:repository/conf/sample/resources/mocks/SimpleStockQuoteService.xsl"/>
  <proxy name="StockQuoteService"> <target>
    <inSequence>
      <filter xpath="//ns:placeOrder"
        xmlns:ns="http://services.samples/xsd">
        <log format="full" />
        <drop />
      </filter>
      <xslt key="SimpleStockQuoteService_xsl"/>
      <property name="RESPONSE" value="true"/>
      <header name="To" action="remove"/>
      <send/>
    </inSequence>
    <outSequence/>
  </target>
  <publishWSDL
    uri="file:repository/conf/sample/resources/mocks/SimpleStockQuoteService.wsdl"/>
  </proxy>
</definitions>

在样式表中,您正在测试请求消息是什么,并用适当的响应消息替换内容。 一种例外情况是placeOrder操作,这是一个只读操作。 这意味着placeOrder操作没有响应。 您使用了筛选器中介程序来使用XPath表达式测试请求是否包含placeOrder元素。 如果确实存在,则您已记录该请求并丢弃了该消息,从而阻止了进一步的调解。 这不会像placeOrder操作所期望的那样将响应发送回客户端。

清单7是用于完整代理服务的样式表。 您检查是否具有操作名称的元素,如果找到了适当的响应消息,则替换该消息。

清单7.完整的代理服务的样式表:SimpleStockQuoteService.xsl
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ns="http://services.samples/xsd">
  <xsl:output method="xml"/>

  <xsl:template match="/">
    <soapenv:Envelope
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <xsl:if test="ns:getQuote">
          <ns:getQuoteResponse >
            ...
          </ns:getQuoteResponse>
        </xsl:if>

        <xsl:if test="ns:getFullQuote">
          <ns:getFullQuoteResponse
            xmlns:ns="http://services.samples/xsd">
            ...
          </ns:getFullQuoteResponse>
        </xsl:if>

        <xsl:if test="ns:getMarketActivity">
          <ns:getMarketActivityResponse xmlns:ns="http://services.samples/xsd">
          ...
          </ns:getMarketActivityResponse>
        </xsl:if>
      </soapenv:Body>
    </soapenv:Envelope>
  </xsl:template>
</xsl:stylesheet>

您已经使用简单的样式表成功模拟了Synapse内的完整Web服务操作。 在下一部分中,您将另一个虚拟Web服务添加到现有配置中。

服务组

在这一步中,您将添加另一个虚拟Web服务LBService1。 LBService1是Synapse中捆绑的示例服务器随附的另一个Web服务,用于演示负载平衡和故障转移示例。 在这里,您仅在Synapse中模拟它。

  1. 使用synapse_sample_mock5-twoproxy.xml配置启动Synapse: ./synapse.sh -sample mock5-twoproxy
  2. 运行示例客户端,如下所示: ant loadbalancefailover -Dtrpurl=http://localhost:8081/soap/LBService1 -Di=10

样本客户端发送一系列请求,并打印来自Synapse的模拟响应的输出。 也可以使用以前的股票报价服务。 您可以尝试前面的示例请求,以便可以实现所需的任意数量的服务,并且可以自定义每个响应的方式。

您可以在http://localhost:8080/soap/LBService1?wsdl看到新的模拟服务的WSDL。

清单8显示了您使用的Synapse配置。

清单8.服务组的Synapse配置:synapse_sample_mock5-twoproxy.xml
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <localEntry key="SimpleStockQuoteService_xsl"
    src="file:repository/conf/sample/resources/mocks/SimpleStockQuoteService.xsl"/>
  <localEntry key="CustomSampleOperation_xsl"
    src="file:repository/conf/sample/resources/mocks/CustomSampleOperation.xsl"/>

  <proxy name="StockQuoteService">
    ...
  </proxy>

  <proxy name="LBService1">
    <target>
      <inSequence>
        <script language="js">
          <![CDATA[
            var node = mc.getPayloadXML().toString();
            mc.setPayloadXML(
              <ser:sampleOperation xmlns:ser="http://services.samples">
                <ser:param>{node}</ser:param>
                Response from anonymous server
              </ser:sampleOperation>);
          ]]>
        </script>
        <property name="RESPONSE" value="true"/>
        <header name="To" action="remove"/>
        <send/>
      </inSequence>
      <outSequence/>
    </target>
    <publishWSDL uri="file:repository/conf/sample/resources/mocks/LBService1.wsdl"/>
  </proxy>
</definitions>

对于LBService1,您使用脚本中介程序来代替XSLT中介程序。 脚本中介器以JavaScript,Groovy,Ruby,Python或脚本引擎支持的任何其他脚本语言执行脚本。 您可以使用脚本来处理消息。 在这种情况下,我用JavaScript编写了一个简单的代码片段,以新的响应替换消息有效负载。 您甚至可以使用脚本验证请求的内容,如果请求无效,则返回错误,例如真正的模拟Web服务。

这样,您可以创建一组模拟Web服务。 您可以保留这些不同的配置,并以组织样本的相同方式组织它们。 因此,下次测试销售自动化系统时,可以启动Synapse配置文件,其中包含该应用程序所需的模拟Web服务,然后开始测试。

模拟调解员

到目前为止,您已经使用了现有的Synapse工具来模拟Web服务。 您可以使用自定义中介程序和任务(例如模拟中介程序)扩展Synapse以支持您的特定要求。

模拟调解器使用配置文件,如清单9所示。它列出了要在传入消息中查找的正则表达式模式,如果模式集匹配则返回要返回的文件。 如果所有条目都不匹配,您还可以提供默认文件名。 该配置文件会定期从文件系统重新加载,因此您可以在不重新启动Synapse的情况下修改此文件。 使用此中介器,您可以指示Synapse在请求消息中查找给定的模式并发送回特定的响应。 例如,如果请求具有getQuoteABC文本模式,您可以告诉Synapse发送一个响应,而当请求包含getQuoteDEF文本模式时,您可以发送错误消息。 使用payload-only属性,您可以告诉中介者是替换整个消息还是仅替换正文内容。 清单9是一个示例模拟中介器配置。

清单9.模拟中介器配置
<simulate-config>
  <match file='abc.xml'>
    <pattern>urn:getQuote</pattern>
    <pattern>ABC</pattern>
  </match>
  <match file='fault.xml' payload-only='true'>
    <pattern>urn:getQuote</pattern>
    <pattern>[Cc]on</pattern>
  </match>
  <default-file>default.xml</default-file>
</simulate-config>

清单10显示了Synapse配置,该配置演示了运行中的模拟中介器。 它与以前的示例相似。 但是,模拟介体代替转换,而是使用通过评估前面列出的模拟介体配置选择的文件替换消息。

清单10.使用模拟调解器的Synapse配置
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <in>
    <simulate>
      <simulate-config>
        repository/conf/sample/resources/simulate/simulate-config.xml</simulate-config>
      <file-path>repository/conf/sample/resources/simulate/</file-path>
    </simulate>
    <property name="RESPONSE" value="true"/>
    <header name="To" action="remove"/>
    <send />
  </in>
</definitions>

您可以从ESB社区站点下载模拟中介扩展,然后尝试其示例(请参阅参考资料中的链接)。 您还可以下载源代码并对其进行自定义或改进。

发送请求

在没有访问服务器端的情况下开发和测试客户端是困难的部分。 在所有前面的方案中,您都进行了模拟。 但是如何构建服务器端组件呢? 您可能已经使用了curl之类的工具将请求有效载荷发送到端点,或者编写了自定义客户端程序来调用正在开发的新Web服务。 您也可以使用Apache Synapse进行模拟。

清单11是Apache Synapse发行版中的示例254,并进行了一些修改(请参阅参考资料中的链接)。 您已经完全删除了WSDL条目,并将端点指向您的测试服务。 创建请求消息,然后将其复制到in目录中。 Apache Synapse从in目录中选择它们,将它们发送到目标服务,然后将响应保存在out目录中。 在这种情况下,Synapse的作用类似于发射球,从in目录中拾取文件,在给定端点射击,然后将响应保存在out目录中。

清单11.用于发送请求的Synapse配置
<definitions xmlns="http://ws.apache.org/ns/synapse">
  <proxy name="StockQuoteProxy" transports="vfs">
    <parameter
      name="transport.vfs.FileURI">file:///home/upul/test/in</parameter>
    <parameter name="transport.vfs.ContentType">text/xml</parameter>
    <parameter name="transport.vfs.FileNamePattern">.*\.xml</parameter>
    <parameter name="transport.PollInterval">2</parameter>
    <parameter name="transport.vfs.MoveAfterProcess">
      file:///home/upul/test/original</parameter>
    <parameter name="transport.vfs.MoveAfterFailure">
      file:///home/upul/test/original</parameter>
    <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
    <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>

    <target>
      <endpoint>
        <address format="soap12"
          uri="http://localhost:9000/soap/TestService"/>
      </endpoint>
      <outSequence>
        <property name="transport.vfs.ReplyFileName"
          expression="fn:concat(fn:substring-after(get-property('MessageID'),
          'urn:uuid:'), '.xml')" scope="transport"/>
        <send>
          <endpoint>
            <address uri="vfs:file:///home/upul/test/out"/>
          </endpoint>
        </send>
      </outSequence>
    </target>
  </proxy>
</definitions>

结论

Apache Synapse是一种简单,轻巧且用途广泛的ESB,可用于企业集成开发以外的其他用途。 在本教程中,您学习了如何通过简单地转换,操纵和重定向请求消息来使用它来模拟和模拟Web服务。

我几乎没有涉及使用此多用途工具可以做的事情的表面。 您可以编写自定义介体和任务来扩展Apache Synapse功能。 (请参阅“ 相关主题”部分中的文章,以了解如何编写自定义中介程序和任务来满足您的特定要求。)如果您提出了使用Apache Synapse解决大规模企业集成问题或您自己的个人的新想法和方法。一次性任务,请与Apache Synapse ESB社区共享。


翻译自: https://www.ibm.com/developerworks/webservices/tutorials/ws-synapse/ws-synapse.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值