﻿<?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-马光军--------BLOG-文章分类-XFIRE</title><link>http://www.blogjava.net/maguangjun/category/35643.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 03 Dec 2008 09:49:54 GMT</lastBuildDate><pubDate>Wed, 03 Dec 2008 09:49:54 GMT</pubDate><ttl>60</ttl><item><title>XFIRE的简单实现</title><link>http://www.blogjava.net/maguangjun/articles/238062.html</link><dc:creator>马光军</dc:creator><author>马光军</author><pubDate>Sat, 01 Nov 2008 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/maguangjun/articles/238062.html</guid><wfw:comment>http://www.blogjava.net/maguangjun/comments/238062.html</wfw:comment><comments>http://www.blogjava.net/maguangjun/articles/238062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/maguangjun/comments/commentRss/238062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/maguangjun/services/trackbacks/238062.html</trackback:ping><description><![CDATA[首先，我们应当创建一个实体类一个接口和一个实现类（User.java、UserService.java、UserServiceImpl.java）<br />
<table style="width: 776px; height: 31px" cellspacing="2" cellpadding="2" width="776" border="0">
    <tbody>
        <tr>
            <td>
            <p>package com.mgj.xfiretext.domain;</p>
            <p>import java.io.Serializable;<br />
            import java.util.Date;</p>
            <p>/**<br />
            &nbsp;* <br />
            &nbsp;* User.java com.mgj.xfiretext.domain xfire<br />
            &nbsp;* <br />
            &nbsp;* @author magj mailto:m441748725@163.com 2008-10-17 下午04:18:26<br />
            &nbsp;* <br />
            &nbsp;*/<br />
            public class User implements Serializable {<br />
            &nbsp;<br />
            &nbsp;private static final long serialVersionUID = 6517808321041980976L;</p>
            <p>&nbsp;private Long userId;</p>
            <p>&nbsp;private String accountId;</p>
            <p>&nbsp;private String userName;</p>
            <p>&nbsp;private Date lastLogin;</p>
            <p>&nbsp;public String getAccountId() {<br />
            &nbsp;&nbsp;return accountId;<br />
            &nbsp;}</p>
            <p>&nbsp;public void setAccountId(String accountId) {<br />
            &nbsp;&nbsp;this.accountId = accountId;<br />
            &nbsp;}</p>
            <p>&nbsp;public Date getLastLogin() {<br />
            &nbsp;&nbsp;return lastLogin;<br />
            &nbsp;}</p>
            <p>&nbsp;public void setLastLogin(Date lastLogin) {<br />
            &nbsp;&nbsp;this.lastLogin = lastLogin;<br />
            &nbsp;}</p>
            <p>&nbsp;public Long getUserId() {<br />
            &nbsp;&nbsp;return userId;<br />
            &nbsp;}</p>
            <p>&nbsp;public void setUserId(Long userId) {<br />
            &nbsp;&nbsp;this.userId = userId;<br />
            &nbsp;}</p>
            <p>&nbsp;public String getUserName() {<br />
            &nbsp;&nbsp;return userName;<br />
            &nbsp;}</p>
            <p>&nbsp;public void setUserName(String userName) {<br />
            &nbsp;&nbsp;this.userName = userName;<br />
            &nbsp;}<br />
            }<br />
            </p>
            <p><br />
            package com.mgj.xfiretext.webserver;</p>
            <p>import com.mgj.xfiretext.domain.User;<br />
            /**<br />
            &nbsp;* <br />
            &nbsp;* UserService.java<br />
            &nbsp;* com.mgj.xfiretext.webserver<br />
            &nbsp;* xfire<br />
            &nbsp;* @author magj mailto:m441748725@163.com<br />
            &nbsp;*&nbsp; 2008-10-17&nbsp; 下午04:16:09<br />
            &nbsp;*<br />
            &nbsp;*/<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            public interface UserService {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; public User queryUserByAccoutId(String accountId);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp; <br />
            }<br />
            <br />
            </p>
            <p>package com.mgj.xfiretext.webserver;</p>
            <p>import java.util.Date;</p>
            <p>import org.apache.commons.logging.Log;<br />
            import org.apache.commons.logging.LogFactory;</p>
            <p>import com.mgj.xfiretext.domain.User;</p>
            <p>/**<br />
            &nbsp;* <br />
            &nbsp;* UserServiceImpl.java<br />
            &nbsp;* com.mgj.xfiretext.webserver<br />
            &nbsp;* xfire<br />
            &nbsp;* @author magj mailto:m441748725@163.com<br />
            &nbsp;*&nbsp; 2008-10-17&nbsp; 下午04:17:26<br />
            &nbsp;*<br />
            &nbsp;*/<br />
            public class UserServiceImpl&nbsp; implements UserService{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private static final Log log = LogFactory.getLog(UserServiceImpl.class);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; public User queryUserByAccoutId(String accountId){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("accountId=" + accountId);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = new User();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setAccountId("testAccount");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setLastLogin(new Date());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setUserName("mgj");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setUserId(new Long(123L));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return user;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            }</p>
            </td>
        </tr>
    </tbody>
</table>
创建一个bulild.xml文件：<br />
<table style="width: 773px; height: 31px" cellspacing="2" cellpadding="2" width="773" border="0">
    <tbody>
        <tr>
            <td>&lt;?xml version="1.0"?&gt;<br />
            &lt;project name="xfire" default="genfiles" basedir="."&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;property name="lib" value="${basedir}/../WebRoot/WEB-INF/lib" /&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;path id="myclasspath"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib}"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar" /&gt;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement location="${genfiles}" /&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/path&gt;<br />
            &nbsp;&lt;!--${basedir}/../src表示放在src下面 --&gt;<br />
            &nbsp;&lt;!--${basedir}/../../ssh/src表示放在另外一个工程（ssh）下的src下面 --&gt;<br />
            &nbsp;&lt;!--${basedir}表示当前目录--&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;!--通过XFire ant任务生成客户端代码的存放位置--&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;property name="code_path" value="${basedir}/../src" /&gt;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;!--需要生成客户端代码的wsdl文件--&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;property name="wsdl_path" value="http://localhost:8090/xfire/services/UserService?wsdl" /&gt; <br />
            &nbsp;&nbsp;&nbsp; &lt;!--生成客户端代码的包名--&gt; <br />
            &nbsp;&nbsp;&nbsp; &lt;property name="code_package" value="com.mgj.xfiretext.webserver.client" /&gt;<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;!-- Remove classes directory for clean build --&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;target name="clean" description="Prepare for clean build"&gt;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${code_path}"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${code_path}"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;!--&lt;target name="genfiles" depends="clean" description="Generate the files"&gt;&nbsp; --&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;target name="genfiles" description="Generate the files"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="myclasspath" /&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--outputDirectory属性定义创建的代码所在的文件夹<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wsdl是web服务的wsdl文件<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; package代表创建的代码的package<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsgen outputDirectory="${code_path}" wsdl="${wsdl_path}" package="${code_package}" binding="xmlbeans" /&gt;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
            &lt;/project&gt;</td>
        </tr>
    </tbody>
</table>
Spring 的配置文件：<br />
<table style="width: 774px; height: 31px" cellspacing="2" cellpadding="2" width="774" border="0">
    <tbody>
        <tr>
            <td>
            <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
            &lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br />
            &lt;beans&gt;<br />
            &nbsp;&lt;import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /&gt;</p>
            <p>&nbsp;&lt;bean id="userService"<br />
            &nbsp;&nbsp;class="com.mgj.xfiretext.webserver.UserServiceImpl" /&gt;<br />
            &nbsp;&lt;bean id="addressingHandler"<br />
            &nbsp;&nbsp;class="org.codehaus.xfire.addressing.AddressingInHandler" /&gt;</p>
            <p>&nbsp;&lt;bean name="UserService"<br />
            &nbsp;&nbsp;class="org.codehaus.xfire.spring.ServiceBean"&gt;<br />
            &nbsp;&nbsp;&lt;property name="serviceBean" ref="userServiceBean" /&gt;<br />
            &nbsp;&nbsp;&lt;property name="serviceClass"<br />
            &nbsp;&nbsp;&nbsp;value="com.mgj.xfiretext.webserver.UserService" /&gt;<br />
            &nbsp;&nbsp;&lt;property name="inHandlers"&gt;<br />
            &nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="addressingHandler" /&gt;<br />
            &nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
            &nbsp;&nbsp;&lt;/property&gt;<br />
            &nbsp;&lt;/bean&gt;<br />
            &nbsp;<br />
            &nbsp;&lt;bean id="userServiceBean"<br />
            &nbsp;&nbsp;class="com.mgj.xfiretext.webserver.UserServiceImpl" /&gt;<br />
            &lt;/beans&gt;<br />
            </p>
            </td>
        </tr>
    </tbody>
</table>
测试类：<br />
<table style="width: 767px; height: 31px" cellspacing="2" cellpadding="2" width="767" border="0">
    <tbody>
        <tr>
            <td>
            <p>package test;</p>
            <p>import java.net.MalformedURLException;<br />
            import org.codehaus.xfire.client.XFireProxyFactory;<br />
            import org.codehaus.xfire.service.Service;<br />
            import org.codehaus.xfire.service.binding.ObjectServiceFactory;<br />
            import com.mgj.xfiretext.domain.User;<br />
            import com.mgj.xfiretext.webserver.UserService;</p>
            <p>package test;</p>
            <p>import java.net.MalformedURLException;</p>
            <p>import org.apache.xmlbeans.XmlObject;<br />
            import org.codehaus.xfire.client.XFireProxyFactory;<br />
            import org.codehaus.xfire.service.Service;<br />
            import org.codehaus.xfire.service.binding.ObjectServiceFactory;<br />
            import org.dom4j.Document;<br />
            import org.dom4j.DocumentException;<br />
            import org.dom4j.DocumentHelper;<br />
            import org.dom4j.Element;</p>
            <p>import com.zx.xfiretext.domain.User;<br />
            import com.zx.xfiretext.webserver.UserService;<br />
            import com.zx.xfiretext.webserver.client.UserServiceClient;<br />
            import com.zx.xfiretext.webserver.client.UserServicePortType;</p>
            <p>/**<br />
            &nbsp;* <br />
            &nbsp;* MyClient.java test xfire<br />
            &nbsp;* <br />
            &nbsp;* @author magj mailto:m441748725@163.com 2008-10-17 下午06:00:05<br />
            &nbsp;* <br />
            &nbsp;*/<br />
            public class MyClient {<br />
            &nbsp;public static void main(String[] args) {<br />
            &nbsp;&nbsp;try {<br />
            &nbsp;&nbsp;&nbsp;Service serviceModel = new ObjectServiceFactory()<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.create(UserService.class);<br />
            &nbsp;&nbsp;&nbsp;UserService service = (UserService) new XFireProxyFactory().create(<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceModel,<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://localhost:8090/xfire/services/UserService");<br />
            &nbsp;&nbsp;&nbsp;User user = service.queryUserByAccoutId("123");<br />
            &nbsp;&nbsp;&nbsp;System.out<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.println("userId=" + user.getUserId() + ", userName="<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ user.getUserName() + ", lastLogin="<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ user.getLastLogin());<br />
            &nbsp;&nbsp;} catch (MalformedURLException e) {<br />
            &nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
            &nbsp;&nbsp;}</p>
            <p>&nbsp;&nbsp;UserServiceClient userServiceClient = new UserServiceClient();<br />
            &nbsp;&nbsp;UserServicePortType userServicePortType = userServiceClient<br />
            &nbsp;&nbsp;&nbsp;&nbsp;.getUserServiceHttpPort();<br />
            &nbsp;&nbsp;XmlObject userXml = userServicePortType.queryUserByAccoutId("123");<br />
            &nbsp;&nbsp;System.out.println(userXml.toString());<br />
            &nbsp;&nbsp;Document userdocument = null;<br />
            &nbsp;&nbsp;try {<br />
            &nbsp;&nbsp;&nbsp;userdocument = DocumentHelper.parseText(userXml.toString());<br />
            &nbsp;&nbsp;&nbsp;Element rootElement = userdocument.getRootElement();<br />
            &nbsp;&nbsp;&nbsp;Element accountIdElement = rootElement.element("accountId");<br />
            &nbsp;&nbsp;&nbsp;Element userIdElement = rootElement.element("userId");<br />
            &nbsp;&nbsp;&nbsp;System.out.println("accountId: " + accountIdElement.getTextTrim()<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "&nbsp; userId:" + userIdElement.getTextTrim());<br />
            &nbsp;&nbsp;} catch (DocumentException e) {<br />
            &nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}<br />
            }<br />
            </p>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
说明：WEB服务器为TOMCAT，端口：8090.<br />
接下来,我们按照一下步骤来。<br />
（1）启动TOMCAT<br />
（2）我们应当执行build.xml文件，因为是在ECLIPSE中开发，所以只要点击【右键】之后，找到【ANT BUILD】选项，然后点击。就会生成UserServiceClient.java、UserServiceImpl、UserServicePortType这个三个类。<br />
（3）执行测试类。<br />
我们就会看到结果：<br />
<table style="width: 769px; height: 33px" cellspacing="2" cellpadding="2" width="769" border="0">
    <tbody>
        <tr>
            <td>userId=123, userName=mgj, lastLogin=Sat Nov 01 17:27:50 CST 2008<br />
            &lt;out xmlns="http://webserver.xfiretext.zx.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;<br />
            &nbsp; &lt;accountId xmlns="http://domain.xfiretext.zx.com"&gt;testAccount&lt;/accountId&gt;<br />
            &nbsp; &lt;lastLogin xmlns="http://domain.xfiretext.zx.com"&gt;2008-11-01T17:27:51.343+08:00&lt;/lastLogin&gt;<br />
            &nbsp; &lt;userId xmlns="http://domain.xfiretext.zx.com"&gt;123&lt;/userId&gt;<br />
            &nbsp; &lt;userName xmlns="http://domain.xfiretext.zx.com"&gt;mgj&lt;/userName&gt;<br />
            &lt;/out&gt;<br />
            accountId: testAccount&nbsp; userId:123</td>
        </tr>
    </tbody>
</table>
<br />
说明：以上我也是根据网上前辈做的例子，在结合自己的一些实践做出来的。 
 <img src ="http://www.blogjava.net/maguangjun/aggbug/238062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/maguangjun/" target="_blank">马光军</a> 2008-11-01 16:29 <a href="http://www.blogjava.net/maguangjun/articles/238062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>