﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-　　　　　　　　　　　　　礼物 ^_^ -文章分类-ESB</title><link>http://www.blogjava.net/libin2722/category/41752.html</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Thu, 24 Sep 2009 03:41:02 GMT</lastBuildDate><pubDate>Thu, 24 Sep 2009 03:41:02 GMT</pubDate><ttl>60</ttl><item><title>mule2.1.2 初步认识 发布cxf 和axis服务</title><link>http://www.blogjava.net/libin2722/articles/296106.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 23 Sep 2009 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/296106.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/296106.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/296106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/296106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/296106.html</trackback:ping><description><![CDATA[近公司需要写这样一个功能。也就是需要一个esb消息总线。初步的功能是提供webservice的消息管理以后还会增加很多的功能。。以前本来在soa esb上面的东西就是个空白。在Google上找了一天最后由我自己觉得用mule2.1.2。让后就疯狂的找些好的帖子。希望能够很快的入门。但发现不是那么一回事。找到的很多都是1.X的版本。2.1.2 的少得很。经过近半周的研究。。终于自己写了一个小的test。贴上来给新入门的朋友希望有帮助。深入的研究以后还会继续。 <br />配置文件：mule_config.xml <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/topic/307149#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>&lt;?xml version=</span><span class="string"><font color="#0000ff">"1.0"</font></span><span> encoding=</span><span class="string"><font color="#0000ff">"UTF-8"</font></span><span>?&gt;   </span></span></li><li><span>&lt;mule xmlns=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/core/2.1"</font></span><span>  </span></li><li><span>      xmlns:xsi=</span><span class="string"><font color="#0000ff">"http://www.w3.org/2001/XMLSchema-instance"</font></span><span>  </span></li><li><span>      xmlns:spring=</span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/beans"</font></span><span>  </span></li><li><span>      xmlns:vm=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/vm/2.1"</font></span><span>  </span></li><li><span>      xmlns:cxf=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/cxf/2.1"</font></span><span>  </span></li><li><span>      xmlns:axis=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/axis/2.1"</font></span><span>  </span></li><li><span>      xmlns:smtps=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/smtps/2.1"</font></span><span>  </span></li><li><span>      xmlns:http=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/http/2.1"</font></span><span>  </span></li><li><span>      xmlns:stdio=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/stdio/2.1"</font></span><span>  </span></li><li><span>      xmlns:soap=</span><span class="string"><font color="#0000ff">"http://www.mulesource.org/schema/mule/soap/2.1"</font></span><span>  </span></li><li><span>      xsi:schemaLocation="   </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/core/2.1 http://www.mulesource.org/schema/mule/core/2.1/mule.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/stdio/2.1 http://www.mulesource.org/schema/mule/stdio/2.1/mule-stdio.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/vm/2.1 http://www.mulesource.org/schema/mule/vm/2.1/mule-vm.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/cxf/2.1 http://www.mulesource.org/schema/mule/cxf/2.1/mule-cxf.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/axis/2.1 http://www.mulesource.org/schema/mule/axis/2.1/mule-axis.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/smtps/2.1 http://www.mulesource.org/schema/mule/smtps/2.1/mule-smtps.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/soap/2.1 http://www.mulesource.org/schema/mule/soap/2.1/mule-soap.xsd </font></span><span>  </span></li><li><span>               http:</span><span class="comment"><font color="#008200">//www.mulesource.org/schema/mule/http/2.1 http://www.mulesource.org/schema/mule/http/2.1/mule-http.xsd </font></span><span>  </span></li><li><span>               "&gt;   </span></li><li><span>     &lt;description&gt;   </span></li><li><span>        eagleMule demo which shows how to publish web services over CXF.   </span></li><li><span>    &lt;/description&gt;   </span></li><li><span>    &lt;model name=</span><span class="string"><font color="#0000ff">"eagleMule"</font></span><span>&gt;   </span></li><li><span>         &lt;service name=</span><span class="string"><font color="#0000ff">"testMuleService"</font></span><span>&gt;   </span></li><li><span>            &lt;inbound&gt;   </span></li><li><span>                &lt;axis:inbound-endpoint address=</span><span class="string"><font color="#0000ff">"http://localhost:8899/services/testMuleService"</font></span><span>&gt;   </span></li><li><span>                    &lt;soap:http-to-soap-request-transformer /&gt;   </span></li><li><span>                &lt;/axis:inbound-endpoint&gt;   </span></li><li><span>                &lt;cxf:inbound-endpoint address=</span><span class="string"><font color="#0000ff">"http://localhost:8898/services/testMuleService"</font></span><span>&gt;   </span></li><li><span>                    &lt;soap:http-to-soap-request-transformer /&gt;   </span></li><li><span>                &lt;/cxf:inbound-endpoint&gt;   </span></li><li><span>            &lt;/inbound&gt;   </span></li><li><span>            &lt;component </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>=</span><span class="string"><font color="#0000ff">"com.eagle.mule.test.imp.MuleServiceImp"</font></span><span>&gt;   </span></li><li><span>            &lt;/component&gt;   </span></li><li><span>        &lt;/service&gt;   </span></li><li><span>    &lt;/model&gt;   </span></li><li><span>    &lt;/mule&gt;  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;mule xmlns="http://www.mulesource.org/schema/mule/core/2.1"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:spring="http://www.springframework.org/schema/beans"
      xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.1"
      xmlns:cxf="http://www.mulesource.org/schema/mule/cxf/2.1"
      xmlns:axis="http://www.mulesource.org/schema/mule/axis/2.1"
      xmlns:smtps="http://www.mulesource.org/schema/mule/smtps/2.1"
      xmlns:http="http://www.mulesource.org/schema/mule/http/2.1"
      xmlns:stdio="http://www.mulesource.org/schema/mule/stdio/2.1"
      xmlns:soap="http://www.mulesource.org/schema/mule/soap/2.1"
      xsi:schemaLocation="
               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.mulesource.org/schema/mule/core/2.1 http://www.mulesource.org/schema/mule/core/2.1/mule.xsd
               http://www.mulesource.org/schema/mule/stdio/2.1 http://www.mulesource.org/schema/mule/stdio/2.1/mule-stdio.xsd
               http://www.mulesource.org/schema/mule/vm/2.1 http://www.mulesource.org/schema/mule/vm/2.1/mule-vm.xsd
               http://www.mulesource.org/schema/mule/cxf/2.1 http://www.mulesource.org/schema/mule/cxf/2.1/mule-cxf.xsd
               http://www.mulesource.org/schema/mule/axis/2.1 http://www.mulesource.org/schema/mule/axis/2.1/mule-axis.xsd
               http://www.mulesource.org/schema/mule/smtps/2.1 http://www.mulesource.org/schema/mule/smtps/2.1/mule-smtps.xsd
               http://www.mulesource.org/schema/mule/soap/2.1 http://www.mulesource.org/schema/mule/soap/2.1/mule-soap.xsd
               http://www.mulesource.org/schema/mule/http/2.1 http://www.mulesource.org/schema/mule/http/2.1/mule-http.xsd
               "&gt;
     &lt;description&gt;
        eagleMule demo which shows how to publish web services over CXF.
    &lt;/description&gt;
    &lt;model name="eagleMule"&gt;
    	 &lt;service name="testMuleService"&gt;
            &lt;inbound&gt;
                &lt;axis:inbound-endpoint address="http://localhost:8899/services/testMuleService"&gt;
            		&lt;soap:http-to-soap-request-transformer /&gt;
            	&lt;/axis:inbound-endpoint&gt;
            	&lt;cxf:inbound-endpoint address="http://localhost:8898/services/testMuleService"&gt;
            		&lt;soap:http-to-soap-request-transformer /&gt;
            	&lt;/cxf:inbound-endpoint&gt;
            &lt;/inbound&gt;
            &lt;component class="com.eagle.mule.test.imp.MuleServiceImp"&gt;
            &lt;/component&gt;
        &lt;/service&gt;
    &lt;/model&gt;
    &lt;/mule&gt;
</pre><br />一个简单的 接口 为了先跑同就这样把。 <br />MuleService.java <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/topic/307149#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span> </span><span class="annotation"><font color="#646464">@WebService</font></span><span>  </span></span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">interface</font></strong></span><span> MuleService {   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String testMule(</span><span class="annotation"><font color="#646464">@WebParam</font></span><span>(name=</span><span class="string"><font color="#0000ff">"str"</font></span><span>)String str);   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code"> @WebService
public interface MuleService {
public String testMule(@WebParam(name="str")String str);
}
</pre><br />MuleServiceImp.java <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/topic/307149#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="annotation"><font color="#646464">@WebService</font></span><span>(serviceName=</span><span class="string"><font color="#0000ff">"eagleMuleService"</font></span><span>,   </span></span></li><li><span>          endpointInterface=</span><span class="string"><font color="#0000ff">"com.eagle.mule.test.MuleService"</font></span><span>)   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> MuleServiceImp </span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span> MuleService {   </span></li><li><span>  </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String testMule(String str) {   </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"----service---"</font></span><span>);   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"hello--"</font></span><span>+str;   </span></li><li><span>    }   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">@WebService(serviceName="eagleMuleService",
		  endpointInterface="com.eagle.mule.test.MuleService")
public class MuleServiceImp implements MuleService {

	public String testMule(String str) {
		System.out.println("----service---");
		return "hello--"+str;
	}
}
</pre><br />启动服务： <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/topic/307149#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> EagleMuleMain {   </span></span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">static</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> main(String[] args) </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> ConfigurationException, InitialisationException {   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">try</font></strong></span><span> {   </span></li><li><span>            String configFile = </span><span class="string"><font color="#0000ff">"com/eagle/mule/test/mule_config.xml"</font></span><span>;   </span></li><li><span>            String[] configFileArr = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> String[] { configFile };   </span></li><li><span>            MuleContextFactory muleContextFactory = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> DefaultMuleContextFactory();   </span></li><li><span>            MuleContext context = muleContextFactory   </span></li><li><span>                    .createMuleContext(</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> SpringXmlConfigurationBuilder(   </span></li><li><span>                            configFileArr));   </span></li><li><span>            context.start();   </span></li><li><span>        } </span><span class="keyword"><strong><font color="#7f0055">catch</font></strong></span><span> (MuleException t) {   </span></li><li><span>            t.printStackTrace();   </span></li><li><span>        }   </span></li><li><span>    }   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">public class EagleMuleMain {
	public static void main(String[] args) throws ConfigurationException, InitialisationException {
		try {
			String configFile = "com/eagle/mule/test/mule_config.xml";
			String[] configFileArr = new String[] { configFile };
			MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
			MuleContext context = muleContextFactory
					.createMuleContext(new SpringXmlConfigurationBuilder(
							configFileArr));
			context.start();
		} catch (MuleException t) {
			t.printStackTrace();
		}
	}
}
</pre><br />测试 
<div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/topic/307149#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span> com.eagle.mule.test.clint;   </span></span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.io.IOException;   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.io.InputStream;   </span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> org.apache.commons.io.IOUtils;   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> org.mule.api.MuleException;   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> org.mule.api.MuleMessage;   </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> org.mule.module.client.MuleClient;   </span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> Client {   </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">static</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> main(String[] args){   </span></li><li><span>        MuleClient client = </span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>;    </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">try</font></strong></span><span> {   </span></li><li><span>            client = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleClient();   </span></li><li><span>            String url = </span><span class="string"><font color="#0000ff">"axis:http://localhost:8899/services/testMuleService/testMuleService?method=testMule"</font></span><span>;   </span></li><li><span>  </span></li><li><span>            MuleMessage message = client.send(url, </span><span class="string"><font color="#0000ff">"eagle"</font></span><span>, </span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>);   </span></li><li><span>            Object obj = message.getPayload();   </span></li><li><span>            System.out.println(</span><span class="string"><font color="#0000ff">"--------------obj---------"</font></span><span>+obj.getClass().getName());   </span></li><li><span>            </span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(obj </span><span class="keyword"><strong><font color="#7f0055">instanceof</font></strong></span><span> String){   </span></li><li><span>                System.out.println(</span><span class="string"><font color="#0000ff">"---------str--------------"</font></span><span>+obj);   </span></li><li><span>            }   </span></li><li><span>        } </span><span class="keyword"><strong><font color="#7f0055">catch</font></strong></span><span> (MuleException e) {   </span></li><li><span>            </span><span class="comment"><font color="#008200">// TODO Auto-generated catch block </font></span><span>  </span></li><li><span>            e.printStackTrace();   </span></li><li><span>        }</span><span class="keyword"><strong><font color="#7f0055">finally</font></strong></span><span>{   </span></li><li><span>            client.dispose();   </span></li><li><span>        }   </span></li><li><span>  </span></li><li><span>    }   </span></li><li><span>}   </span></li><li><span>注意 这里需要把mule 下lib中 endorsed  mule  opt 文件夹中的jar都加进去。如果不发布cxf的服务 可以不用添加endorsed文件夹中的jar。 </span></li></ol></div><img src ="http://www.blogjava.net/libin2722/aggbug/296106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2009-09-23 09:05 <a href="http://www.blogjava.net/libin2722/articles/296106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源ESB引擎Mule初印象</title><link>http://www.blogjava.net/libin2722/articles/295695.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 19 Sep 2009 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/295695.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/295695.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/295695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/295695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/295695.html</trackback:ping><description><![CDATA[
		<strong>关键字: ESB SOA WebService <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span></strong>
		<div class="blog_content">
				<a href="http://mule.codehaus.org/" target="_blank">
						<span class="hilite1">
								<font style="BACKGROUND-COLOR: #ffff00" color="#006699">Mule</font>
						</span>
				</a> is the leading open source ESB (Enterprise Service Bus) and integration platform. It is a scalable, highly distributable <br />object broker that can seamlessly handle interactions with services and applications using disparate transport and messaging <br />technologies。 <br /><img src="http://mule.codehaus.org/download/attachments/1401/mule_esb.gif" /><br />在这里我们简单看看如何用<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>发布和调用Web服务，体验一下<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>的简洁和高效。 <br /><br /><strong>安装<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span></strong><br />去<a href="http://mule.codehaus.org/display/MULE/Download" target="_blank"><font color="#006699"><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>官方下载页</font></a>下载最新的Full版zip文件，解压到一个目录。 <br />运行一下MULE_HOME\examples\maven\echo目录下的echo.bat，则<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>会自动下载合适版本的activation.jar和mail.jar到MULE_HOME\lib\user目录 <br />echo.bat示例了一个command prompt下的echo程序，该程序会echo你在命令行输入的字符串。 <br /><br /><strong>创建Eclipse项目</strong><br />我们在Eclipse下新建命名为<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>的Java project，其中包结构如下: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>   </span></span></li><li><span>  src-demo   </span></li><li><span>    cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo   </span></li><li><span>      EchoService.java   </span></li><li><span>      IEchoService.java   </span></li><li><span>  images   </span></li><li><span>    <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-banner.gif   </span></li><li><span>  WEB-INF   </span></li><li><span>    lib   </span></li><li><span>    <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-echo-config.xml   </span></li><li><span>    web.xml   </span></li><li><span>  contents.html   </span></li><li><span>  echo.jsp   </span></li><li><span>  header.html   </span></li><li><span>  index.html   </span></li><li><span>  welcome.html  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code"><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>
  src-demo
    cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo
      EchoService.java
      IEchoService.java
  images
    <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-banner.gif
  WEB-INF
    lib
    <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-echo-config.xml
    web.xml
  contents.html
  echo.jsp
  header.html
  index.html
  welcome.html
</pre><br />将MULE_HOME\lib\<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>目录和MULE_HOME\lib\opt目录下所有的jar包以及MULE_HOME\lib\user目录下的activation.jar和mail.jar统统扔到WEB-INF\lib目录下。 <br />其中<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-banner.gif、contents.html、header.html、index.html、welcome.html等来自将MULE_HOME\examples\ant\webapp目录下的build.xml用ant <br />build后在build目录下生成的<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-example-webapp.war中的文件。 <br />在这里我们修改该<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-example-webapp.war工程来demo一下使用<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>发布和调用Web服务。 <br /><br /><strong>写我们要发布的服务</strong><br />上面列出的IEchoService.java为我们要发布的服务的接口，该接口约束了我们要发布的服务: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span> cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo;   </span></span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">interface</font></strong></span><span> IEchoService {   </span></li><li><span>    String echo(String s);   </span></li><li><span>  </span></li><li><span>    String haha(String s);   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">package cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo;

public interface IEchoService {
	String echo(String s);

	String haha(String s);
}
</pre><br />如上，我们将使用该接口发布echo和haha这两个服务。现在写我们的服务实现类EchoService.java(系统集成时可能实现已经存在，我们只需抽离要 <br />发布的服务的窄接口即可): <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span> cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo;   </span></span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> EchoService </span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span> IEchoService {   </span></li><li><span>  </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String echo(String s) {   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"Hello, "</font></span><span> + s + </span><span class="string"><font color="#0000ff">"!"</font></span><span>;   </span></li><li><span>    }   </span></li><li><span>  </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String haha(String s) {   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"haha"</font></span><span>;   </span></li><li><span>    }   </span></li><li><span>  </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String hehe(String s) {   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"hehe"</font></span><span>;   </span></li><li><span>    }   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">package cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo;

public class EchoService implements IEchoService {

	public String echo(String s) {
		return "Hello, " + s + "!";
	}

	public String haha(String s) {
		return "haha";
	}

	public String hehe(String s) {
		return "hehe";
	}
}
</pre><br />可以看到，虽然我们的EchoService提供了echo/haha/hehe三个服务，但我们使用IEchoService来约束它，从而只发布其中的echo和haha这两个服务。 <br /><br /><strong>配置使我们的服务以Web Service发布</strong><br />首先我们修改web.xml来让servlet容器listen和mapping一些东西: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>&lt;?xml version=</span><span class="string"><font color="#0000ff">"1.0"</font></span><span> encoding=</span><span class="string"><font color="#0000ff">"UTF-8"</font></span><span>?&gt;   </span></span></li><li><span>&lt;!DOCTYPE web-app PUBLIC </span><span class="string"><font color="#0000ff">"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"</font></span><span> </span><span class="string"><font color="#0000ff">"http://java.sun.com/dtd/web-app_2_3.dtd"</font></span><span>&gt;   </span></li><li><span>&lt;web-app&gt;   </span></li><li><span>    &lt;display-name&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>&lt;/display-name&gt;   </span></li><li><span>    &lt;description&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span> Demo&lt;/description&gt;   </span></li><li><span>  </span></li><li><span>    &lt;context-param&gt;   </span></li><li><span>        &lt;param-name&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.config&lt;/param-name&gt;   </span></li><li><span>        &lt;param-value&gt;/WEB-INF/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-echo-config.xml,&lt;/param-value&gt;   </span></li><li><span>    &lt;/context-param&gt;   </span></li><li><span>  </span></li><li><span>    &lt;listener&gt;   </span></li><li><span>        &lt;listener-</span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.config.builders.MuleXmlBuilderContextListener&lt;/listener-</span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&gt;   </span></li><li><span>    &lt;/listener&gt;   </span></li><li><span>  </span></li><li><span>    &lt;servlet&gt;   </span></li><li><span>        &lt;servlet-name&gt;muleServlet&lt;/servlet-name&gt;   </span></li><li><span>        &lt;servlet-</span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.providers.http.servlet.MuleReceiverServlet&lt;/servlet-</span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span>&gt;   </span></li><li><span>        &lt;load-on-startup/&gt;   </span></li><li><span>    &lt;/servlet&gt;   </span></li><li><span>  </span></li><li><span>    &lt;servlet-mapping&gt;   </span></li><li><span>        &lt;servlet-name&gt;muleServlet&lt;/servlet-name&gt;   </span></li><li><span>        &lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;   </span></li><li><span>    &lt;/servlet-mapping&gt;   </span></li><li><span>  </span></li><li><span>    &lt;welcome-file-list&gt;   </span></li><li><span>        &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;   </span></li><li><span>    &lt;/welcome-file-list&gt;   </span></li><li><span>&lt;/web-app&gt;  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
&lt;web-app&gt;
    &lt;display-name&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>&lt;/display-name&gt;
    &lt;description&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span> Demo&lt;/description&gt;

    &lt;context-param&gt;
        &lt;param-name&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.config&lt;/param-name&gt;
        &lt;param-value&gt;/WEB-INF/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-echo-config.xml,&lt;/param-value&gt;
    &lt;/context-param&gt;

    &lt;listener&gt;
        &lt;listener-class&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.config.builders.MuleXmlBuilderContextListener&lt;/listener-class&gt;
    &lt;/listener&gt;

    &lt;servlet&gt;
        &lt;servlet-name&gt;muleServlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.providers.http.servlet.MuleReceiverServlet&lt;/servlet-class&gt;
        &lt;load-on-startup/&gt;
    &lt;/servlet&gt;

    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;muleServlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

    &lt;welcome-file-list&gt;
        &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
&lt;/web-app&gt;
</pre><br />然后我们配置<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-echo-config.xml来以Web Service方式发布我们的服务: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>&lt;?xml version=</span><span class="string"><font color="#0000ff">"1.0"</font></span><span> encoding=</span><span class="string"><font color="#0000ff">"UTF-8"</font></span><span>?&gt;   </span></span></li><li><span>  </span></li><li><span>&lt;!DOCTYPE <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration PUBLIC </span><span class="string"><font color="#0000ff">"-//MuleSource //DTD </font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">-configuration XML V1.0//EN"</font></span><span>  </span></li><li><span>                                </span><span class="string"><font color="#0000ff">"http://</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">.mulesource.org/dtds/</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">-configuration.dtd"</font></span><span>&gt;   </span></li><li><span>  </span></li><li><span>&lt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration id=</span><span class="string"><font color="#0000ff">"Mule_Demo"</font></span><span> version=</span><span class="string"><font color="#0000ff">"1.0"</font></span><span>&gt;   </span></li><li><span>    &lt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-descriptor name=</span><span class="string"><font color="#0000ff">"echoService"</font></span><span> implementation=</span><span class="string"><font color="#0000ff">"cn.hidetoishandsome.</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">.demo.EchoService"</font></span><span>&gt;   </span></li><li><span>        &lt;inbound-router&gt;   </span></li><li><span>            &lt;endpoint address=</span><span class="string"><font color="#0000ff">"xfire:http://localhost:8181/services"</font></span><span>/&gt;   </span></li><li><span>        &lt;/inbound-router&gt;   </span></li><li><span>        &lt;properties&gt;     </span></li><li><span>            &lt;list name=</span><span class="string"><font color="#0000ff">"serviceInterfaces"</font></span><span>&gt;      </span></li><li><span>                &lt;entry value=</span><span class="string"><font color="#0000ff">"cn.hidetoishandsome.</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">.demo.IEchoService"</font></span><span>/&gt;      </span></li><li><span>            &lt;/list&gt;     </span></li><li><span>        &lt;/properties&gt;     </span></li><li><span>   &lt;/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-descriptor&gt;   </span></li><li><span>&lt;/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration&gt;  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;!DOCTYPE <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration PUBLIC "-//MuleSource //DTD <span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration XML V1.0//EN"
                                "http://<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.mulesource.org/dtds/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration.dtd"&gt;

&lt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration id="Mule_Demo" version="1.0"&gt;
    &lt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-descriptor name="echoService" implementation="cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo.EchoService"&gt;
        &lt;inbound-router&gt;
            &lt;endpoint address="xfire:http://localhost:8181/services"/&gt;
        &lt;/inbound-router&gt;
        &lt;properties&gt;  
            &lt;list name="serviceInterfaces"&gt;   
                &lt;entry value="cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo.IEchoService"/&gt;   
            &lt;/list&gt;  
        &lt;/properties&gt;  
   &lt;/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-descriptor&gt;
&lt;/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>-configuration&gt;
</pre><br />这里我们的echoService实现为cn.hidetoishandsome.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.demo.EchoService，inbound-router中&lt;endpoint address="xfire:http://localhost:8181/services"/&gt;表示我们以xfire发布我们的服务到本机该端口的services这个context下，而serviceInterfaces的entry表示我们使用IEchoService <br />来约束我们要发布的服务接口。 <br /><br /><strong>运行和调用服务</strong><br />让我们将该<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>项目在<span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">Tomcat</font></span>中跑起来看看效果吧。 <br />例如配置<span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">Tomcat</font></span>的server.xml，在&lt;Host&gt;标签中加入&lt;Context path="/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>" docBase="D:\project\<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>" reloadable="true" /&gt; <br />启动<span class="hilite2"><font style="BACKGROUND-COLOR: #55ff55">Tomcat</font></span>，打开浏览器访问<a href="http://localhost:8181/services/echoService?wsdl" target="_blank"><font color="#006699">http://localhost:8181/services/echoService?wsdl</font></a>可以看到<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>通过xfire自动生成的wsdl文档，其中 <br />我们可以看到<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>只暴露了EchoService和echo和haha方法，而没有暴露hehe方法。 <br />现在我们在echo.jsp中利用<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span>的UMO(Universal Message Object)API写对我们刚发布的Web服务的客户端调用: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>&lt;%@ page </span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span>=</span><span class="string"><font color="#0000ff">"org.</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">.extras.client.MuleClient, org.</font><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span><font color="#0000ff">.umo.UMOMessage"</font></span><span>%&gt;   </span></span></li><li><span>&lt;%@ page language=</span><span class="string"><font color="#0000ff">"java"</font></span><span> contentType=</span><span class="string"><font color="#0000ff">"text/html; charset=UTF-8"</font></span><span> %&gt;   </span></li><li><span>  </span></li><li><span>&lt;html&gt;   </span></li><li><span>&lt;head&gt;   </span></li><li><span>&lt;title&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span> Echo Example&lt;/title&gt;   </span></li><li><span>&lt;/head&gt;   </span></li><li><span>&lt;body&gt;   </span></li><li><span>&lt;%   </span></li><li><span>    String s = request.getParameter(</span><span class="string"><font color="#0000ff">"name"</font></span><span>);   </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span>(s!=</span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>) {   </span></li><li><span>        MuleClient client = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleClient();   </span></li><li><span>        UMOMessage message = client.send(</span><span class="string"><font color="#0000ff">"xfire:http://localhost:8181/services/echoService?method=echo"</font></span><span>, s, </span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>);     </span></li><li><span>%&gt;   </span></li><li><span>&lt;h3&gt;&lt;%=message.getPayload()%&gt;&lt;/h3&gt;   </span></li><li><span>     &lt;%}%&gt;   </span></li><li><span>Please enter your name:   </span></li><li><span>&lt;form method=</span><span class="string"><font color="#0000ff">"POST"</font></span><span> name=</span><span class="string"><font color="#0000ff">"submitEcho"</font></span><span> action=</span><span class="string"><font color="#0000ff">""</font></span><span>&gt;   </span></li><li><span>    &lt;table&gt;   </span></li><li><span>        &lt;tr&gt;&lt;td&gt;   </span></li><li><span>            &lt;input type=</span><span class="string"><font color="#0000ff">"text"</font></span><span> name=</span><span class="string"><font color="#0000ff">"name"</font></span><span>/&gt;&lt;/td&gt;&lt;td&gt;&lt;input type=</span><span class="string"><font color="#0000ff">"submit"</font></span><span> name=</span><span class="string"><font color="#0000ff">"Go"</font></span><span> value=</span><span class="string"><font color="#0000ff">" Go "</font></span><span> /&gt;   </span></li><li><span>        &lt;/td&gt;&lt;/tr&gt;   </span></li><li><span>    &lt;/table&gt;   </span></li><li><span>&lt;/form&gt;   </span></li><li><span>&lt;p/&gt;   </span></li><li><span>&lt;/body&gt;   </span></li><li><span>&lt;/html&gt;  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">&lt;%@ page import="org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.extras.client.MuleClient, org.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>.umo.UMOMessage"%&gt;
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" %&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Mule</font></span> Echo Example&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;%
    String s = request.getParameter("name");
    if(s!=null) {
        MuleClient client = new MuleClient();
        UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=echo", s, null);  
%&gt;
&lt;h3&gt;&lt;%=message.getPayload()%&gt;&lt;/h3&gt;
     &lt;%}%&gt;
Please enter your name:
&lt;form method="POST" name="submitEcho" action=""&gt;
    &lt;table&gt;
        &lt;tr&gt;&lt;td&gt;
            &lt;input type="text" name="name"/&gt;&lt;/td&gt;&lt;td&gt;&lt;input type="submit" name="Go" value=" Go " /&gt;
        &lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
&lt;/form&gt;
&lt;p/&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre><br />好了，用浏览器访问<a href="http://localhost:8080/mule" target="_blank"><font color="#006699">http://localhost:8080/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span></font></a>并点击左侧菜单的Echo链接，或者直接访问<a href="http://localhost:8080/mule/echo.jsp" target="_blank"><font color="#006699">http://localhost:8080/<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">mule</font></span>/echo.jsp</font></a>，然后在input框输入一些文本内容如"Hideto"，点击Go，则你会看到页面返回"Hello, Hideto!"。 <br />现在让我们修改echo.jsp，将UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=echo", s, null); <br />这段代码中的method改为haha，即: <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://hideto.javaeye.com/blog/64742#"><img alt="复制代码" src="http://hideto.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>UMOMessage message = client.send(</span><span class="string"><font color="#0000ff">"xfire:http://localhost:8181/services/echoService?method=haha"</font></span><span>, s, </span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>);  </span></span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=haha", s, null);
</pre><br />然后刷新一下浏览器页面，再输入一些文本内容，看看页面是不是返回"haha"字样了？ </div>
<img src ="http://www.blogjava.net/libin2722/aggbug/295695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2009-09-19 22:20 <a href="http://www.blogjava.net/libin2722/articles/295695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Using the Web Service Wrapper on Mule2.x</title><link>http://www.blogjava.net/libin2722/articles/295692.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 19 Sep 2009 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/295692.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/295692.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/295692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/295692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/295692.html</trackback:ping><description><![CDATA[
		<h1>
				<a name="WebServiceWrapper-UsingtheWebServiceWrapper">
				</a>Using the Web Service Wrapper</h1>
		<p>The <a href="http://www.mulesource.org/docs/site/current2/apidocs/org/mule/transport/soap/axis/component/WebServiceWrapperComponent.html">WebServiceWrapperComponent</a> class allows you to send the result of a web service call to another endpoint. The web service call is performed within <tt>WebServiceWrapperComponent</tt>, providing the following advantages:</p>
		<ul>
				<li>You can set any type of router on inbound and outbound. 
</li>
				<li>Unlike the chaining router, it can send more than one HTTP request at a time 
</li>
				<li>The URL for the web service call can be changed at run-time by sending the URL with the message </li>
		</ul>
		<h2>
				<a name="WebServiceWrapper-ConfiguringtheWebServiceWrapper">
				</a>Configuring the Web Service Wrapper</h2>
		<p>To use the web service wrapper, you specify the <tt>&lt;wrapper-component&gt;</tt> configuration element. The following table describes the attributes you can set for this element. These attributes are described in more detail in the examples that follow.</p>
		<table class="confluenceTable">
				<tbody>
						<tr>
								<th class="confluenceTh">Attribute</th>
								<th class="confluenceTh">Description</th>
								<th class="confluenceTh">Required?</th>
						</tr>
						<tr>
								<td class="confluenceTd">address</td>
								<td class="confluenceTd">Specifies the URL of the web service to call</td>
								<td class="confluenceTd">Yes, unless <tt>addressFromMessage</tt> is set to true</td>
						</tr>
						<tr>
								<td class="confluenceTd">addressFromMessage (default is false)</td>
								<td class="confluenceTd">Specifies that the URL of the web service will be obtained from the message itself</td>
								<td class="confluenceTd">Not required if <tt>address</tt> is set</td>
						</tr>
						<tr>
								<td class="confluenceTd">wrapperProperties</td>
								<td class="confluenceTd">The SOAP document style, expressed as a map of two properties: <tt>style</tt>, which can be set to <tt>RPC</tt> (the default), <tt>Document</tt>, <tt>Message</tt>, or <tt>Wrapped</tt>, and <tt>use</tt>, which can be <tt>Encoded</tt> or <tt>Literal</tt>.</td>
								<td class="confluenceTd">No</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>&lt;soap-method&gt;</tt>
								</td>
								<td class="confluenceTd">A SOAP method to call (see <a href="http://www.mulesoft.org/display/MULE2USER/Web+Service+Wrapper#WebServiceWrapper-soapmethods">Configuring SOAP Methods</a> below)</td>
								<td class="confluenceTd">No</td>
						</tr>
				</tbody>
		</table>
		<p>The web service wrapper is generic and can be used with any type of web service stack supported by Mule, including Axis and CXF. The examples below show synchronous use cases, but the web service wrapper can also support an asynchronous use case like the <a title="Loan Broker Example" href="http://www.mulesoft.org/display/MULE2INTRO/Loan+Broker+Example">loan broker example</a>. </p>
		<h3>
				<a name="WebServiceWrapper-ExampleConfigurationUsingtheCXFTransport">
				</a>Example Configuration Using the CXF Transport</h3>
		<p>Consider the following example. The web service wrapper is configured as a Mule component, accepting messages from a VM endpoint. A call must be made to a web service on the URL <tt>cxf:<a href="http://localhost:65081/services/TestUMO?method=onReceive" rel="nofollow">http://localhost:65081/services/TestUMO?method=onReceive</a></tt> and the result must be sent to the outbound endpoint <tt>vm://testout</tt>. </p>
		<p>The inbound and outbound endpoints are configured in the usual way. The address is set as an attribute on the component, specifying the web service URL that you want to call. </p>
		<div class="code panel" style="BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px">
				<div class="codeContent panelContent">
						<pre class="code-xml">
								<span class="code-tag">&lt;cxf:connector name=<span class="code-quote">"cxf"</span> defaultFrontend=<span class="code-quote">"simple"</span> /&gt;</span>
								<span class="code-tag">&lt;model name=<span class="code-quote">"Sample"</span>&gt;</span>
								<span class="code-tag">&lt;service name=<span class="code-quote">"WebServiceSample"</span>&gt;</span>
								<span class="code-tag">&lt;inbound&gt;</span>
								<span class="code-tag">&lt;vm:inbound-endpoint path=<span class="code-quote">"testin"</span> /&gt;</span>
								<span class="code-tag">&lt;/inbound&gt;</span>
								<span class="code-tag">&lt;cxf:wrapper-component address=<span class="code-quote">"http://localhost:65081/services/TestUMO?method=onReceive"</span>/&gt;</span>
								<span class="code-tag">&lt;outbound&gt;</span>
								<span class="code-tag">&lt;pass-through-router&gt;</span>
								<span class="code-tag">&lt;outbound-endpoint address=<span class="code-quote">"vm://testout"</span>/&gt;</span>
								<span class="code-tag">&lt;/pass-through-router&gt;</span>
								<span class="code-tag">&lt;/outbound&gt;</span>
								<span class="code-tag">&lt;/service&gt;</span>
						</pre>
				</div>
		</div>
		<h3>
				<a name="WebServiceWrapper-ExampleConfigurationUsingtheaddressFromMessageProperty">
				</a>Example Configuration Using the addressFromMessage Property</h3>
		<p>The "address" property is ideal to use when the web service URL for the web service is known at configuration time. However, if this URL is either not known or else needs to be changed at run-time, the "address" property can be omitted and the "adddressFromMessage" property can be set to true. The following example shows this configuration:</p>
		<div class="code panel" style="BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px">
				<div class="codeContent panelContent">
						<pre class="code-xml">
								<span class="code-tag">&lt;service name = <span class="code-quote">"WebServiceSample2"</span>&gt;</span>
								<span class="code-tag">&lt;inbound&gt;</span>
								<span class="code-tag">&lt;vm:inbound-endpoint path = <span class="code-quote">"testin2"</span>/&gt;</span>
								<span class="code-tag">&lt;/inbound&gt;</span>
								<span class="code-tag">&lt;cxf:wrapper-component addressFromMessage = <span class="code-quote">"true"</span>/&gt;</span>
								<span class="code-tag">&lt;/service&gt;</span>
						</pre>
				</div>
		</div>
		<p>The URL must be set on the message with the property name "ws.service.url".<br /><a name="WebServiceWrapper-soapmethods"></a></p>
		<h3>
				<a name="WebServiceWrapper-ConfiguringSOAPMethods">
				</a>Configuring SOAP Methods</h3>
		<p>CXF endpoints are fairly easy to configure, whereas Axis needs some further configuration to set SOAP methods. You can set a SOAP method using the <tt>&lt;soap-method&gt;</tt> element as shown below: </p>
		<div class="code panel" style="BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px">
				<div class="codeContent panelContent">
						<pre class="code-xml">
								<span class="code-tag">&lt;service name = <span class="code-quote">"WebServiceSample3"</span>&gt;</span>
								<span class="code-tag">&lt;inbound&gt;</span>
								<span class="code-tag">&lt;vm:inbound-endpoint path = <span class="code-quote">"queue.in"</span> connector-ref = <span class="code-quote">"VMQueue"</span>/&gt;</span>
								<span class="code-tag">&lt;/inbound&gt;</span>
								<span class="code-tag">&lt;axis:wrapper-component address = <span class="code-quote">"http://localhost:62088/axis/Calculator?method=add"</span> style = <span class="code-quote">"WRAPPED"</span> use = <span class="code-quote">"LITERAL"</span>&gt;</span>
								<span class="code-tag">&lt;axis:soap-method method = <span class="code-quote">"qname{add:http://muleumo.org/Calc}"</span>&gt;</span>
								<span class="code-tag">&lt;axis:soap-parameter parameter = <span class="code-quote">"Number1"</span> type = <span class="code-quote">"int"</span> mode = <span class="code-quote">"IN"</span>/&gt;</span>
								<span class="code-tag">&lt;axis:soap-parameter parameter = <span class="code-quote">"Number2"</span> type = <span class="code-quote">"int"</span> mode = <span class="code-quote">"IN"</span>/&gt;</span>
								<span class="code-tag">&lt;axis:soap-return type = <span class="code-quote">"int"</span>/&gt;</span>
								<span class="code-tag">&lt;/axis:soap-method&gt;</span>
								<span class="code-tag">&lt;/axis:wrapper-component&gt;</span>
								<span class="code-tag">&lt;outbound&gt;</span>
								<span class="code-tag">&lt;pass-through-router&gt;</span>
								<span class="code-tag">&lt;vm:outbound-endpoint path = <span class="code-quote">"queue.out"</span> connector-ref = <span class="code-quote">"VMQueue"</span>/&gt;</span>
								<span class="code-tag">&lt;/pass-through-router&gt;</span>
								<span class="code-tag">&lt;/outbound&gt;</span>
								<span class="code-tag">&lt;/service&gt;</span>
						</pre>
				</div>
		</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/295692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2009-09-19 21:53 <a href="http://www.blogjava.net/libin2722/articles/295692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mule web service调用中的复杂类型传递</title><link>http://www.blogjava.net/libin2722/articles/295689.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 19 Sep 2009 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/295689.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/295689.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/295689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/295689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/295689.html</trackback:ping><description><![CDATA[
		<div id="header">
				<div id="blog_site_nav">  官网上很辛苦在一个旮旯里找到如何向 Mule暴露的axis web service 传递复杂数据类型 ，http://www.mulesource.org/pages/viewpage.action?pageId=4678， 官网上只提供了原理，自己补充了一下客户端测试代码,部分服务类做了修改。 <br />    <br />  类清单: <br />  Person: 数据类，测试复杂数据类型的传递 <br />  PersonService: 服务接口类 <br />  PersonServiceImpl: 服务实现类。 <br />  PersonServiceLaucher: Mule服务器启动类 <br />  PersonClient: 客户端测试类。 <br />  person-config.xml, Mule 配置，其中将 PersonServiceImpl 暴露为一个axis1.4的服务。 <br /><br />1. Person数据类 <br /></div>
		</div>
		<div id="page">
				<div class="clearfix" id="content">
						<div id="main">
								<div class="blog_main">
										<div class="blog_content">
												<div class="dp-highlighter">
														<div class="bar">
																<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div>
														</div>
														<ol class="dp-j">
																<li>
																		<span>
																				<span> </span>
																				<span class="keyword">
																						<strong>
																								<font color="#7f0055">public</font>
																						</strong>
																				</span>
																				<span> </span>
																				<span class="keyword">
																						<strong>
																								<font color="#7f0055">class</font>
																						</strong>
																				</span>
																				<span> Person    </span>
																		</span>
																</li>
																<li>
																		<span>  {   </span>
																</li>
																<li>
																		<span>
																		</span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">private</font>
																				</strong>
																		</span>
																		<span> String name;   </span>
																</li>
																<li>
																		<span>
																		</span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">private</font>
																				</strong>
																		</span>
																		<span> String surname;   </span>
																</li>
																<li>
																		<span>
																		</span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">private</font>
																				</strong>
																		</span>
																		<span> Date registerDate = </span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">new</font>
																				</strong>
																		</span>
																		<span> Date();   </span>
																</li>
																<li>
																		<span>
																		</span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">private</font>
																				</strong>
																		</span>
																		<span> </span>
																		<span class="keyword">
																				<strong>
																						<font color="#7f0055">int</font>
																				</strong>
																		</span>
																		<span> age = </span>
																		<span class="number">
																				<font color="#c00000">20</font>
																		</span>
																		<span>;   </span>
																</li>
																<li>
																		<span>   ...  </span>
																</li>
														</ol>
												</div>
												<pre class="java" style="DISPLAY: none" name="code">  public class Person 
   {
	private String name;
	private String surname;
	private Date registerDate = new Date();
	private int age = 20;
    ...</pre>
												<br />
												<br />2.  服务接口类 <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span> </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">interface</font></strong></span><span> PersonService {      </span></span></li><li><span>String printPerson(Person person) ;    </span></li><li><span>Person createPerson(String name,String surname,</span><span class="keyword"><strong><font color="#7f0055">int</font></strong></span><span> age);       </span></li><li><span>    Person[] batchCreatePerson(String namePattern);   </span></li><li><span> }  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">  public interface PersonService {	
	String printPerson(Person person) ;	
	Person createPerson(String name,String surname,int age);	
 	Person[] batchCreatePerson(String namePattern);
  }</pre><br /><br />3. 实现类： <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span> demo.mule.person;   </span></span></li><li><span>  </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> PersonServiceImpl </span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span> PersonService {   </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String printPerson(Person person) {         </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> </span><span class="string"><font color="#0000ff">"person:name="</font></span><span> + person.getName() +</span><span class="string"><font color="#0000ff">",surname="</font></span><span> + person.getSurname();   </span></li><li><span>    }   </span></li><li><span>       </span></li><li><span>    </span><span class="comment"><font color="#008200">/** </font></span> 
</li><li><span><span class="comment"><font color="#008200">     * test return a complex type by web service </font></span> </span></li><li><span><span class="comment"><font color="#008200">     */</font></span><span>  </span></span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> Person createPerson(String name, String surname,</span><span class="keyword"><strong><font color="#7f0055">int</font></strong></span><span> age) {   </span></li><li><span>        Person p = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Person(name,surname);   </span></li><li><span>        p.setAge(age);   </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"a person is created:"</font></span><span> + p.getName());   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> p;   </span></li><li><span>    }   </span></li><li><span>       </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> Person[] batchCreatePerson(String namePattern) {   </span></li><li><span>        Person[] persons = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Person[</span><span class="number"><font color="#c00000">3</font></span><span>];   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#7f0055">int</font></strong></span><span> i = </span><span class="number"><font color="#c00000">0</font></span><span>; i &lt; persons.length; i++) {   </span></li><li><span>            Person p = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Person(namePattern + i,namePattern + i);   </span></li><li><span>            p.setAge( </span><span class="number"><font color="#c00000">20</font></span><span> + i );   </span></li><li><span>            persons[i] = p;   </span></li><li><span>        }   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> persons;   </span></li><li><span>    }   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">package demo.mule.person;

public class PersonServiceImpl implements PersonService {
	public String printPerson(Person person) {		
		return "person:name=" + person.getName() +",surname=" + person.getSurname();
	}
	
	/**
	 * test return a complex type by web service
	 */
	public Person createPerson(String name, String surname,int age) {
		Person p = new Person(name,surname);
		p.setAge(age);
		System.out.println("a person is created:" + p.getName());
		return p;
	}
	
	public Person[] batchCreatePerson(String namePattern) {
		Person[] persons = new Person[3];
		for (int i = 0; i &lt; persons.length; i++) {
			Person p = new Person(namePattern + i,namePattern + i);
			p.setAge( 20 + i );
			persons[i] = p;
		}
		return persons;
	}
}</pre><br /><br />4. person-config.xml <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-xml"><li><span><span>  </span><strong><font color="#006699"><span class="tag">&lt;?</span><span class="tag-name">xml</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"1.0"</font></span><span> </span><span class="attribute"><font color="#ff0000">encoding</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"UTF-8"</font></span><span class="tag"><strong><font color="#006699">?&gt;</font></strong></span><span>  </span></span></li><li><span>&lt;!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN" "http://mule.mulesource.org/dtds/mule-configuration.dtd"</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>  </span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">mule-configuration</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"mule-test"</font></span><span> </span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"1.0"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>  </span></li><li><span>    </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">model</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"personService"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>  </span></li><li><span>        </span><span class="comments"><font color="#008200">&lt;!-- test: http://localhost:8082/services/personService?method=createPerson --&gt;</font></span><span>              </span></li><li><span>        </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">mule-descriptor</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"personService"</font></span><span> </span><span class="attribute"><font color="#ff0000">implementation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"demo.mule.person.PersonServiceImpl"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>  </span></li><li><span>            </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">inbound-router</span><span class="tag">&gt;</span></font></strong><span>  </span></li><li><span>                </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">endpoint</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">address</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"axis:http://localhost:8082/services"</font></span><strong><font color="#006699"><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">endpoint</span><span class="tag">&gt;</span></font></strong><span>  </span></li><li><span>            </span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">inbound-router</span><span class="tag">&gt;</span></font></strong><span>        </span></li><li><span>            &lt;!-- not nessesary    </span></li><li><span>            </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">properties</span><span class="tag">&gt;</span></font></strong><span>  </span></li><li><span>                </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"style"</font></span><span> </span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"wrapped"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>  </span></li><li><span>                </span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span> </span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"use"</font></span><span> </span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"literal"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>  </span></li><li><span>            </span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">properties</span><span class="tag">&gt;</span></font></strong><span>        </span></li><li><span>            --</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>  </span></li><li><span>        </span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">mule-descriptor</span><span class="tag">&gt;</span></font></strong><span>               </span></li><li><span>    </span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">model</span><span class="tag">&gt;</span></font></strong><span>  </span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">mule-configuration</span><span class="tag">&gt;</span></font></strong><span>  </span></li></ol></div><pre class="xml" style="DISPLAY: none" name="code">  &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN" "http://mule.mulesource.org/dtds/mule-configuration.dtd"&gt;
&lt;mule-configuration id="mule-test" version="1.0"&gt;
	&lt;model name="personService"&gt;
		&lt;!-- test: http://localhost:8082/services/personService?method=createPerson --&gt;			
		&lt;mule-descriptor name="personService" implementation="demo.mule.person.PersonServiceImpl"&gt;
			&lt;inbound-router&gt;
				&lt;endpoint address="axis:http://localhost:8082/services"&gt;&lt;/endpoint&gt;
			&lt;/inbound-router&gt;		
			&lt;!-- not nessesary 
			&lt;properties&gt;
				&lt;property name="style" value="wrapped"/&gt;
				&lt;property name="use" value="literal"/&gt;
			&lt;/properties&gt;		
			--&gt;
		&lt;/mule-descriptor&gt;			
	&lt;/model&gt;
&lt;/mule-configuration&gt;</pre><br /><br /><br />5. server启动 <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span>  </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> PersonServiceLaucher {   </span></span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">static</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> main(String[] args) </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> ConfigurationException {   </span></li><li><span>    MuleXmlConfigurationBuilder muleXmlConfigurationBuilder = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleXmlConfigurationBuilder();   </span></li><li><span>    UMOManager manager = muleXmlConfigurationBuilder.configure(</span><span class="string"><font color="#0000ff">"demo/mule/person/person-config.xml"</font></span><span>);   </span></li><li><span>}   </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">   public class PersonServiceLaucher {
	public static void main(String[] args) throws ConfigurationException {
		MuleXmlConfigurationBuilder muleXmlConfigurationBuilder = new MuleXmlConfigurationBuilder();
		UMOManager manager = muleXmlConfigurationBuilder.configure("demo/mule/person/person-config.xml");
	}
}</pre><br /><br /><br />6. 测试类 <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://raymondhekk.javaeye.com/blog/300604#"><img alt="复制代码" src="http://raymondhekk.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span> </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> PersonClient {       </span></span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span> MuleClient muleClient ;    </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> PersonClient() {   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">try</font></strong></span><span> {   </span></li><li><span>            muleClient = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleClient();   </span></li><li><span>        } </span><span class="keyword"><strong><font color="#7f0055">catch</font></strong></span><span> (UMOException e) {         </span></li><li><span>            e.printStackTrace();   </span></li><li><span>        }   </span></li><li><span>    }   </span></li><li><span>  </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> testPrintPerson() </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> Exception {   </span></li><li><span>           </span></li><li><span>        Person person = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Person(</span><span class="string"><font color="#0000ff">"David"</font></span><span>,</span><span class="string"><font color="#0000ff">"Jones"</font></span><span>);   </span></li><li><span>        UMOMessage msg = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleMessage(person );   </span></li><li><span>        UMOMessage message = muleClient.send(</span><span class="string"><font color="#0000ff">"axis:http://localhost:8082/services/personService?method=printPerson"</font></span><span>,msg);   </span></li><li><span>           </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"message:"</font></span><span> + message.getPayloadAsString());   </span></li><li><span>    }   </span></li><li><span>       </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> testCreatePerson() </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> Exception {   </span></li><li><span>        Object[] args = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Object[]{</span><span class="string"><font color="#0000ff">"小龙"</font></span><span>,</span><span class="string"><font color="#0000ff">"李"</font></span><span>, </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Integer(</span><span class="number"><font color="#c00000">23</font></span><span>)};   </span></li><li><span>        UMOMessage msg = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleMessage(args );   </span></li><li><span>        UMOMessage message = muleClient.send(</span><span class="string"><font color="#0000ff">"axis:http://localhost:8082/services/personService?method=createPerson"</font></span><span>,msg);   </span></li><li><span>       </span></li><li><span>        Person p = (Person)message.getPayload();   </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"message:"</font></span><span> + message.getPayloadAsString());   </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"payload:"</font></span><span> + p.getName() +</span><span class="string"><font color="#0000ff">","</font></span><span> + p.getSurname() +</span><span class="string"><font color="#0000ff">","</font></span><span> + p.getAge());   </span></li><li><span>    }   </span></li><li><span>       </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> testBatchCreatePerson() </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> UMOException {   </span></li><li><span>        Object[] args = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Object[]{</span><span class="string"><font color="#0000ff">"Admin"</font></span><span>};   </span></li><li><span>        UMOMessage msg = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> MuleMessage(args );   </span></li><li><span>        UMOMessage message = muleClient.send(</span><span class="string"><font color="#0000ff">"axis:http://localhost:8082/services/personService?method=batchCreatePerson"</font></span><span>,msg);   </span></li><li><span>           </span></li><li><span>        Person[] ps = (Person[])message.getPayload();   </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"persons:"</font></span><span> + ps.length);   </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">for</font></strong></span><span> (</span><span class="keyword"><strong><font color="#7f0055">int</font></strong></span><span> i = </span><span class="number"><font color="#c00000">0</font></span><span>; i &lt; ps.length; i++) {   </span></li><li><span>            Person p = ps[i];   </span></li><li><span>            System.out.println(</span><span class="string"><font color="#0000ff">"person:"</font></span><span> + p.getName() +</span><span class="string"><font color="#0000ff">","</font></span><span> + p.getSurname() +</span><span class="string"><font color="#0000ff">","</font></span><span> + p.getAge());   </span></li><li><span>        }          </span></li><li><span>    }   </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">static</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span> main(String[] args) </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> Exception {   </span></li><li><span>        PersonClient personClient = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> PersonClient();   </span></li><li><span>        personClient.testPrintPerson();   </span></li><li><span>        personClient.testCreatePerson();           </span></li><li><span>        personClient.testBatchCreatePerson();   </span></li><li><span>    }   </span></li><li><span>}  </span></li></ol></div><pre class="java" style="DISPLAY: none" name="code"> public class PersonClient {	
	private MuleClient muleClient ;	
	public PersonClient() {
		try {
			muleClient = new MuleClient();
		} catch (UMOException e) {		
			e.printStackTrace();
		}
	}

	public void testPrintPerson() throws Exception {
		
		Person person = new Person("David","Jones");
		UMOMessage msg = new MuleMessage(person );
		UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=printPerson",msg);
		
		System.out.println("message:" + message.getPayloadAsString());
	}
	
	public void testCreatePerson() throws Exception {
		Object[] args = new Object[]{"小龙","李", new Integer(23)};
		UMOMessage msg = new MuleMessage(args );
		UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=createPerson",msg);
	
		Person p = (Person)message.getPayload();
		System.out.println("message:" + message.getPayloadAsString());
		System.out.println("payload:" + p.getName() +"," + p.getSurname() +"," + p.getAge());
	}
	
	public void testBatchCreatePerson() throws UMOException {
		Object[] args = new Object[]{"Admin"};
		UMOMessage msg = new MuleMessage(args );
		UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=batchCreatePerson",msg);
		
		Person[] ps = (Person[])message.getPayload();
		System.out.println("persons:" + ps.length);
		for (int i = 0; i &lt; ps.length; i++) {
			Person p = ps[i];
			System.out.println("person:" + p.getName() +"," + p.getSurname() +"," + p.getAge());
		}		
	}
	public static void main(String[] args) throws Exception {
		PersonClient personClient = new PersonClient();
		personClient.testPrintPerson();
		personClient.testCreatePerson();		
		personClient.testBatchCreatePerson();
	}
}</pre><br /><br /><br />测试过程： <br />1） 启动Mule服务容器 <br />2） 执行PersonClient <br /><br /><br />总结： <br />  1) Mule暴露POJO为一个服务还是很简单的, 配置非常少 <br />  2) 传递和返回Java复杂数据类型，自定义数据类型都非常方便。不过，客户端需要明确知道每个方法传递的参数个数和类型，以及返回的参数类型，并且需要自己type cast。 在具体项目中，可以自己再做一层封装或用AOP， 以本地调用的方式调用 mule 的web service。 <br /></div>
								</div>
						</div>
				</div>
		</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/295689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2009-09-19 20:42 <a href="http://www.blogjava.net/libin2722/articles/295689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>