天天看点

apache synapse使用(2)

接着上面看官方的示例

消息中介示例

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

<code>&lt;!-- local registry entry definitions, reusable endpoints and sequences --&gt;</code>

<code>    </code><code>&lt;!-- define a string resource entry to the local registry --&gt;</code>

<code>    </code><code>&lt;</code><code>localentry</code> <code>key="version"&gt;0.1&lt;/</code><code>localentry</code><code>&gt;</code>

<code>    </code><code>&lt;!-- define a reuseable endpoint definition --&gt;</code>

<code>    </code><code>&lt;</code><code>endpoint</code> <code>name="simple"&gt;</code>

<code>    </code><code>&lt;/</code><code>endpoint</code><code>&gt;</code>

<code>    </code><code>&lt;!-- define a reusable sequence --&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="stockquote"&gt;</code>

<code>        </code><code>&lt;!-- log the message using the custom log level. illustrates custom properties for log --&gt;</code>

<code>        </code><code>&lt;</code><code>log</code> <code>level="custom"&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="text" value="sending quote request"/&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="version" expression="get-property('version')"/&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="direction" expression="get-property('direction')"/&gt;</code>

<code>        </code><code>&lt;/</code><code>log</code><code>&gt;</code>

<code>        </code><code>&lt;!-- send message to real endpoint referenced by key "simple" endpoint definition --&gt;</code>

<code>        </code><code>&lt;</code><code>send</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>endpoint</code> <code>key="simple"/&gt;</code>

<code>        </code><code>&lt;/</code><code>send</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>sequence</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="main"&gt;</code>

<code>        </code><code>&lt;</code><code>in</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="direction" value="incoming"/&gt;</code>

<code>            </code><code>&lt;</code><code>sequence</code> <code>key="stockquote"/&gt;</code>

<code>        </code><code>&lt;/</code><code>in</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>out</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>send</code><code>/&gt;</code>

<code>        </code><code>&lt;/</code><code>out</code><code>&gt;</code>

<code>&lt;/</code><code>definitions</code><code>&gt;</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>&lt;!-- the default fault handling sequence used by synapse - named 'fault' --&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="fault"&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="text" value="an unexpected error occured"/&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="message" expression="get-property('error_message')"/&gt;</code>

<code>        </code><code>&lt;</code><code>drop</code><code>/&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="sunerrorhandler"&gt;</code>

<code>            </code><code>&lt;</code><code>property</code> <code>name="text" value="an unexpected error occured for stock sun"/&gt;</code>

<code>            </code><code>&lt;!--&lt;property name="detail" expression="get-property('error_detail')"/&gt;--&gt;</code>

<code>                </code><code>&lt;</code><code>case</code> <code>regex="ibm"&gt;</code>

<code>                    </code><code>&lt;</code><code>send</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>endpoint</code><code>&gt;</code>

<code>                        </code><code>&lt;/</code><code>endpoint</code><code>&gt;</code>

<code>                    </code><code>&lt;/</code><code>send</code><code>&gt;</code>

<code>                </code><code>&lt;/</code><code>case</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>case</code> <code>regex="msft"&gt;</code>

<code>                        </code><code>&lt;</code><code>endpoint</code> <code>key="bogus"/&gt;</code>

<code>                </code><code>&lt;</code><code>case</code> <code>regex="sun"&gt;</code>

<code>                    </code><code>&lt;</code><code>sequence</code> <code>key="sunsequence"/&gt;</code>

<code>            </code><code>&lt;/</code><code>switch</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>drop</code><code>/&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="sunsequence" onerror="sunerrorhandler"&gt;</code>

<code>            </code><code>&lt;</code><code>endpoint</code> <code>key="sunport"/&gt;</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>&lt;!-- creating soap fault messages and changing the direction of a message --&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="myfaulthandler"&gt;</code>

<code>        </code><code>&lt;</code><code>makefault</code> <code>response="true"&gt;</code>

<code>            </code><code>&lt;</code><code>reason</code> <code>expression="get-property('error_message')"/&gt;</code>

<code>        </code><code>&lt;/</code><code>makefault</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>send</code><code>/&gt;</code>

<code>    </code><code>&lt;</code><code>sequence</code> <code>name="main" onerror="myfaulthandler"&gt;</code>

 客户端调用

 返回

&lt;soapenv:fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;&lt;faultcode&gt;soapenv:client&lt;/faultcode&gt; &lt;faultstring&gt;java.net.unknownhostexception: bogus&lt;/faultstring&gt;&lt;detail /&gt;&lt;/soapenv:fault&gt;

执行

返回

&lt;soapenv:fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;&lt;faultcode&gt;soapenv:client&lt;/faultcode&gt; &lt;faultstring&gt;java.net.connectexception: connection refused&lt;/faultstring&gt;&lt;detail /&gt;&lt;/soapenv:fault&gt;

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

<code>&lt;!-- manipulating soap headers, and filtering incoming and outgoing messages --&gt;</code>

 修改协议头

客户端调用

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

直接指向