apache synapse使用(2)

谷隐水
2023-12-01

接着上面看官方的示例

消息中介示例

1,本地注册项,可重复使用的端点和序列

?
<!-- Local Registry entry definitions, reusable endpoints and sequences -->
< definitions xmlns = "http://ws.apache.org/ns/synapse"
              xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     <!-- define a string resource entry to the local registry -->
     < localEntry key = "version" >0.1</ localEntry >
     <!-- define a reuseable endpoint definition -->
     < endpoint name = "simple" >
         < address uri = "http://localhost:9000/services/SimpleStockQuoteService" />
     </ endpoint >
  
     <!-- define a reusable sequence -->
     < sequence name = "stockquote" >
         <!-- log the message using the custom log level. illustrates custom properties for log -->
         < log level = "custom" >
             < property name = "Text" value = "Sending quote request" />
             < property name = "version" expression = "get-property('version')" />
             < property name = "direction" expression = "get-property('direction')" />
         </ log >
         <!-- send message to real endpoint referenced by key "simple" endpoint definition -->
         < send >
             < endpoint key = "simple" />
         </ send >
     </ sequence >
  
     < sequence name = "main" >
         < in >
             < property name = "direction" value = "incoming" />
             < sequence key = "stockquote" />
         </ in >
         < out >
             < send />
         </ out >
     </ sequence >
</ definitions >

客户端执行

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/

 可以看到输出的结果

 Standard :: Stock price = $80.1611906447455

过程是先进入main然后直接进入可重用序列stockqnote,最后将请求的信息发送到http://localhost:9000/services/SimpleStockQuoteService

使用http://localhost:9000/services/SimpleStockQuoteService?wsdl可以看到显示的结果

 

2,错误处理

?
< definitions xmlns = "http://ws.apache.org/ns/synapse"
              xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  
     <!-- the default fault handling sequence used by Synapse - named 'fault' -->
     < sequence name = "fault" >
         < log level = "custom" >
             < property name = "text" value = "An unexpected error occured" />
             < property name = "message" expression = "get-property('ERROR_MESSAGE')" />
         </ log >
         < drop />
     </ sequence >
  
     < sequence name = "sunErrorHandler" >
         < log level = "custom" >
             < property name = "text" value = "An unexpected error occured for stock SUN" />
             < property name = "message" expression = "get-property('ERROR_MESSAGE')" />
             <!--<property name="detail" expression="get-property('ERROR_DETAIL')"/>-->
         </ log >
         < drop />
     </ sequence >
  
     < sequence name = "main" >
         < in >
             < switch xmlns:m0 = "http://services.samples" source = "//m0:getQuote/m0:request/m0:symbol" >
                 < case regex = "IBM" >
                     < send >
                         < endpoint >
                             < address uri = "http://localhost:9000/services/SimpleStockQuoteService" />
                         </ endpoint >
                     </ send >
                 </ case >
                 < case regex = "MSFT" >
                     < send >
                         < endpoint key = "bogus" />
                     </ send >
                 </ case >
                 < case regex = "SUN" >
                     < sequence key = "sunSequence" />
                 </ case >
             </ switch >
             < drop />
         </ in >
  
         < out >
             < send />
         </ out >
     </ sequence >
  
     < sequence name = "sunSequence" onError = "sunErrorHandler" >
         < send >
             < endpoint key = "sunPort" />
         </ send >
     </ sequence >
  
</ definitions >

 客户端执行

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT

执行查询MSFT的股价,因为没有对应的端点查找最接近的错误处理,服务端看到提示

INFO LogMediator text = An unexpected error occured, message = Couldn't find the endpoint with the key : bogus

执行查看sun的股价

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN

最后打印出信息

INFO LogMediator text = An unexpected error occured for stock SUN, message = Couldn't find the endpoint with the key : sunPort

这个是在sunSeqence这个序列里执行的。

 

3,创建错误的SOAP信息并且变化消息的方向

?
<!-- Creating SOAP fault messages and changing the direction of a message -->
< definitions xmlns = "http://ws.apache.org/ns/synapse"
              xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  
     < sequence name = "myFaultHandler" >
         < makefault response = "true" >
             < code xmlns:tns = "http://www.w3.org/2003/05/soap-envelope" value = "tns:Receiver" />
             < reason expression = "get-property('ERROR_MESSAGE')" />
         </ makefault >
         < send />
     </ sequence >
  
     < sequence name = "main" onError = "myFaultHandler" >
         < in >
             < switch xmlns:m0 = "http://services.samples" source = "//m0:getQuote/m0:request/m0:symbol" >
                 < case regex = "MSFT" >
                     < send >
                         < endpoint >
                             < address uri = "http://bogus:9000/services/NonExistentStockQuoteService" />
                         </ endpoint >
                     </ send >
                 </ case >
                 < case regex = "SUN" >
                     < send >
                         < endpoint >
                             < address uri = "http://localhost:9009/services/NonExistentStockQuoteService" />
                         </ endpoint >
                     </ send >
                 </ case >
             </ switch >
             < drop />
         </ in >
  
         < out >
             < send />
         </ out >
     </ sequence >
  
</ definitions >

 客户端调用

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT

 返回

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode> <faultstring>java.net.UnknownHostException: bogus</faultstring><detail /></soapenv:Fault>

执行

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN

返回

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode> <faultstring>java.net.ConnectException: Connection refused</faultstring><detail /></soapenv:Fault>

 

4,操纵SOAP协议头,修改传入或传出的消息

?
<!-- Manipulating SOAP headers, and filtering incoming and outgoing messages -->
< definitions xmlns = "http://ws.apache.org/ns/synapse"
              xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  
     < sequence name = "main" >
         < in >
             < header name = "To" value = "http://localhost:9000/services/SimpleStockQuoteService" />
         </ in >
         < send />
     </ sequence >
  
</ definitions >

 修改协议头

客户端调用

ant stockquote -Dtrpurl=http://localhost:8280/

直接指向

 类似资料: