接着上面看官方的示例
消息中介示例
1,本地注册项,可重复使用的端点和序列
<code><!-- local registry entry definitions, reusable endpoints and sequences --></code>
<code> </code><code><!-- define a string resource entry to the local registry --></code>
<code> </code><code><</code><code>localentry</code> <code>key="version">0.1</</code><code>localentry</code><code>></code>
<code> </code><code><!-- define a reuseable endpoint definition --></code>
<code> </code><code><</code><code>endpoint</code> <code>name="simple"></code>
<code> </code><code></</code><code>endpoint</code><code>></code>
<code> </code><code><!-- define a reusable sequence --></code>
<code> </code><code><</code><code>sequence</code> <code>name="stockquote"></code>
<code> </code><code><!-- log the message using the custom log level. illustrates custom properties for log --></code>
<code> </code><code><</code><code>log</code> <code>level="custom"></code>
<code> </code><code><</code><code>property</code> <code>name="text" value="sending quote request"/></code>
<code> </code><code><</code><code>property</code> <code>name="version" expression="get-property('version')"/></code>
<code> </code><code><</code><code>property</code> <code>name="direction" expression="get-property('direction')"/></code>
<code> </code><code></</code><code>log</code><code>></code>
<code> </code><code><!-- send message to real endpoint referenced by key "simple" endpoint definition --></code>
<code> </code><code><</code><code>send</code><code>></code>
<code> </code><code><</code><code>endpoint</code> <code>key="simple"/></code>
<code> </code><code></</code><code>send</code><code>></code>
<code> </code><code></</code><code>sequence</code><code>></code>
<code> </code><code><</code><code>sequence</code> <code>name="main"></code>
<code> </code><code><</code><code>in</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name="direction" value="incoming"/></code>
<code> </code><code><</code><code>sequence</code> <code>key="stockquote"/></code>
<code> </code><code></</code><code>in</code><code>></code>
<code> </code><code><</code><code>out</code><code>></code>
<code> </code><code><</code><code>send</code><code>/></code>
<code> </code><code></</code><code>out</code><code>></code>
<code></</code><code>definitions</code><code>></code>
客户端执行
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,错误处理
<code> </code><code><!-- the default fault handling sequence used by synapse - named 'fault' --></code>
<code> </code><code><</code><code>sequence</code> <code>name="fault"></code>
<code> </code><code><</code><code>property</code> <code>name="text" value="an unexpected error occured"/></code>
<code> </code><code><</code><code>property</code> <code>name="message" expression="get-property('error_message')"/></code>
<code> </code><code><</code><code>drop</code><code>/></code>
<code> </code><code><</code><code>sequence</code> <code>name="sunerrorhandler"></code>
<code> </code><code><</code><code>property</code> <code>name="text" value="an unexpected error occured for stock sun"/></code>
<code> </code><code><!--<property name="detail" expression="get-property('error_detail')"/>--></code>
<code> </code><code><</code><code>case</code> <code>regex="ibm"></code>
<code> </code><code><</code><code>send</code><code>></code>
<code> </code><code><</code><code>endpoint</code><code>></code>
<code> </code><code></</code><code>endpoint</code><code>></code>
<code> </code><code></</code><code>send</code><code>></code>
<code> </code><code></</code><code>case</code><code>></code>
<code> </code><code><</code><code>case</code> <code>regex="msft"></code>
<code> </code><code><</code><code>endpoint</code> <code>key="bogus"/></code>
<code> </code><code><</code><code>case</code> <code>regex="sun"></code>
<code> </code><code><</code><code>sequence</code> <code>key="sunsequence"/></code>
<code> </code><code></</code><code>switch</code><code>></code>
<code> </code><code><</code><code>drop</code><code>/></code>
<code> </code><code><</code><code>sequence</code> <code>name="sunsequence" onerror="sunerrorhandler"></code>
<code> </code><code><</code><code>endpoint</code> <code>key="sunport"/></code>
客户端执行
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信息并且变化消息的方向
<code><!-- creating soap fault messages and changing the direction of a message --></code>
<code> </code><code><</code><code>sequence</code> <code>name="myfaulthandler"></code>
<code> </code><code><</code><code>makefault</code> <code>response="true"></code>
<code> </code><code><</code><code>reason</code> <code>expression="get-property('error_message')"/></code>
<code> </code><code></</code><code>makefault</code><code>></code>
<code> </code><code><</code><code>send</code><code>/></code>
<code> </code><code><</code><code>sequence</code> <code>name="main" onerror="myfaulthandler"></code>
客户端调用
返回
<soapenv:fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:client</faultcode> <faultstring>java.net.unknownhostexception: bogus</faultstring><detail /></soapenv:fault>
执行
返回
<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协议头,修改传入或传出的消息
<code><!-- manipulating soap headers, and filtering incoming and outgoing messages --></code>
修改协议头
客户端调用
ant stockquote -dtrpurl=http://localhost:8280/
直接指向