实战Mule:利用Mule调用XFire发布的Web服务

下载和安装XFire和Mule
参考 http://hideto.iteye.com/blog/59750http://hideto.iteye.com/blog/64742对XFire和Mule的介绍
本文例子也以上述两篇文章的例子为背景。

利用XFire发布一个Web服务BookService
在Eclipse里新建项目webservice,目录结构如下:
webservice
  src-service
    cn.hidetoishandsome.xfire.model
      Book.java
    cn.hidetoishandsome.xfire.service
      IBookService.java
    cn.hidetoishandsome.xfire.service.impl
      BookService.java
  src-conf
    META-INF
      xfire
        services.xml
  web
    WEB-INF
      lib
      web.xml

其中web.xml:
<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  
    <servlet>  
        <servlet-name>xfire</servlet-name>  
        <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>xfire</servlet-name>  
        <url-pattern>/services/*</url-pattern>  
    </servlet-mapping>  
  
</web-app>

以及services.xml:
<beans xmlns="http://xfire.codehaus.org/config/1.0">  
    <service>  
        <name>BookService</name>  
        <namespace>http://localhost:9090/webservice/services/BookService</namespace>  
        <serviceClass>cn.hidetoishandsome.xfire.service.IBookService</serviceClass>  
        <implementationClass>cn.hidetoishandsome.xfire.service.impl.BookService</implementationClass>  
    </service>  
</beans>

我们发布BookService类的findBookByISBN方法,通过传入book的isbn返回查询到的book的title
注意services.xml中我们把BookService的namespace设置为http://localhost:9090/webservice/services/BookService,这是为了在同一机器上同时
启动两个Tomcat实例来测试我们的demo,我们将启动一个Tomcat来host我们发布的BookService,并且port设置为9090,而启动的第二个Tomcat用来
host我们的Mule ESB,以及前台页面调用测试。
好了,现在我们已经可以启动第一个Tomcat实例来发布BookService了,访问http://localhost:9090/webservice/services/BookService?wsdl可以看
到XFire自动生成的WSDL文档。

利用Mule构建我们的ESB中心
在Eclipse里创建新项目esb,目录结构如下:
esb
  web
    WEB-INF
      lib
        mule-services-config.xml
        web.xml
    index.jsp

其中web.xml:
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">  
<web-app>  
    <display-name>Mule</display-name>
    <description>Mule Demo</description>
  
    <context-param>
        <param-name>org.mule.config</param-name>
        <param-value>/WEB-INF/mule-services-config.xml,</param-value>
    </context-param>
  
    <listener>
        <listener-class>org.mule.config.builders.MuleXmlBuilderContextListener</listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

以及mule-services-config.xml:
<?xml version="1.0" encoding="UTF-8"?>  
  
<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"   
                                "http://mule.mulesource.org/dtds/mule-configuration.dtd">  
  
<mule-configuration id="Mule_Demo" version="1.0">

	<mule-descriptor name="BookService" inboundEndpoint="vm://bookservice" implementation="org.mule.components.simple.BridgeComponent">

		<outbound-router>
			<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
				<endpoint address="wsdl-xfire:http://localhost:9090/webservice/services/BookService?wsdl&amp;method=findBookByISBN"/>
			</router>
		</outbound-router>

	</mule-descriptor>

</mule-configuration>

这里我们配置了我们要调用的BookService的outbound router endpoint的address为:
wsdl-xfire:http://localhost:9090/webservice/services/BookService?wsdl&amp;method=findBookByISBN
好了,我们的Mule ESB已经构建好了,并且我们在自己的ESB中注入了一个Web服务BookService,我们不用担心底层的实现,我们只需按照接口简单调用即可。
下面我们写前端调用代码index.jsp:
<%@ page import="org.mule.extras.client.MuleClient, org.mule.umo.UMOMessage"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8" %>  
  
<html>  
<head>  
<title>Mule Echo Example</title>  
</head>  
<body>  
<%   
    String s = request.getParameter("isbn");   
    if(s!=null) {   
        MuleClient client = new MuleClient();   
        UMOMessage message = client.send("vm://bookservice", s, null);     
%>  
<h3>The book with isbn "<%=s%>" is : &lt;&lt;<%=message.getPayload()%>&gt;&gt;</h3>  
     <%}%>  
Please enter the isbn of book:   
<form method="POST" name="submitISBM" action="">  
    <table>  
        <tr><td>  
            <input type="text" name="isbn"/></td><td><input type="submit" name="Go" value=" Go " />  
        </td></tr>  
    </table>  
</form>  
<p/>  
</body>  
</html>  

现在让我们启动第二个Tomcat实例,然后访问http://localhost:8080/esb,输入isbn号码“123456”,提交来查看返回的Book的Title。

源代码
将源代码打包提供如下,WEB-INF/lib下面的jar包都删除了,请参考 http://hideto.iteye.com/blog/59750http://hideto.iteye.com/blog/64742
添加jar包。

你可能感兴趣的:(eclipse,tomcat,Web,xml,webservice)