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
  • 相关阅读:
    不可小视视图对效率的影响力
    Maximum Margin Planning
    PhysicsBased Boiling Simulation

    Learning Behavior Styles with Inverse Reinforcement Learning
    Simulating Biped Behaviors from Human Motion Data
    Nearoptimal Character Animation with Continuous Control
    Apprenticeship Learning via Inverse Reinforcement Learning
    回报函数学习的学徒学习综述
    Enabling Realtime Physics Simulation in Future Interactive Entertainment
  • 原文地址:https://www.cnblogs.com/skyme/p/2235794.html
Copyright © 2011-2022 走看看