接着上面看官方的示例
消息中介示例
1,本地注册项,可重复使用的端点和序列
<!-- Local Registry entry definitions, reusable endpoints and sequences -->
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"
>
</
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,错误处理
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
>
<
case
regex
=
"IBM"
>
<
send
>
<
endpoint
>
</
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 -->
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"
>
<
reason
expression
=
"get-property('ERROR_MESSAGE')"
/>
</
makefault
>
<
send
/>
</
sequence
>
<
sequence
name
=
"main"
onError
=
"myFaultHandler"
>
<
in
>
<
case
regex
=
"MSFT"
>
<
send
>
<
endpoint
>
</
endpoint
>
</
send
>
</
case
>
<
case
regex
=
"SUN"
>
<
send
>
<
endpoint
>
</
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 -->
xsi:schemaLocation
=
"http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"
>
<
sequence
name
=
"main"
>
<
in
>
</
in
>
<
send
/>
</
sequence
>
</
definitions
>
|
修改协议头
客户端调用
ant stockquote -Dtrpurl=http://localhost:8280/
直接指向