zoukankan      html  css  js  c++  java
  • apache synapse使用(2)

    接着上面看官方的示例

    消息中介示例

    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"
                 xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">
        <!-- 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"
                 xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">
    
        <!-- 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"
                 xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">
    
        <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"
                 xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">
    
        <sequence name="main">
            <in>
                <header name="To" value="http://localhost:9000/services/SimpleStockQuoteService"/>
            </in>
            <send/>
        </sequence>
    
    </definitions>
    

     修改协议头

    客户端调用

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

    直接指向

    http://localhost:9000/services/SimpleStockQuoteService
  • 相关阅读:
    uboot流程分析--修改android启动模式按键【转】
    RK平台Android4.4 添加一个新的遥控器支持以及添加特殊按键【转】
    C语言中函数strcpy ,strncpy ,strlcpy的用法【转】
    对字符串进行加密解密
    数字转IP地址函数
    汉字转拼音函数
    输出指定格式的数据列
    在SQL SERVER中实现RSA加解密函数(第二版)
    在SQL SERVER中实现RSA加解密函数(第一版)
    无序字符比较函数
  • 原文地址:https://www.cnblogs.com/skyme/p/2235794.html
Copyright © 2011-2022 走看看