马光军--------BLOG

BlogJava 联系 聚合 管理
  1 Posts :: 25 Stories :: 5 Comments :: 0 Trackbacks
首先,我们应当创建一个实体类一个接口和一个实现类(User.java、UserService.java、UserServiceImpl.java)

package com.mgj.xfiretext.domain;

import java.io.Serializable;
import java.util.Date;

/**
 *
 * User.java com.mgj.xfiretext.domain xfire
 *
 * @author magj mailto:m441748725@163.com 2008-10-17 下午04:18:26
 *
 */
public class User implements Serializable {
 
 private static final long serialVersionUID = 6517808321041980976L;

 private Long userId;

 private String accountId;

 private String userName;

 private Date lastLogin;

 public String getAccountId() {
  return accountId;
 }

 public void setAccountId(String accountId) {
  this.accountId = accountId;
 }

 public Date getLastLogin() {
  return lastLogin;
 }

 public void setLastLogin(Date lastLogin) {
  this.lastLogin = lastLogin;
 }

 public Long getUserId() {
  return userId;
 }

 public void setUserId(Long userId) {
  this.userId = userId;
 }

 public String getUserName() {
  return userName;
 }

 public void setUserName(String userName) {
  this.userName = userName;
 }
}


package com.mgj.xfiretext.webserver;

import com.mgj.xfiretext.domain.User;
/**
 *
 * UserService.java
 * com.mgj.xfiretext.webserver
 * xfire
 * @author magj mailto:m441748725@163.com
 *  2008-10-17  下午04:16:09
 *
 */
     
public interface UserService {     
    public User queryUserByAccoutId(String accountId);     
    
}

package com.mgj.xfiretext.webserver;

import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.mgj.xfiretext.domain.User;

/**
 *
 * UserServiceImpl.java
 * com.mgj.xfiretext.webserver
 * xfire
 * @author magj mailto:m441748725@163.com
 *  2008-10-17  下午04:17:26
 *
 */
public class UserServiceImpl  implements UserService{     
    private static final Log log = LogFactory.getLog(UserServiceImpl.class);     
         
    public User queryUserByAccoutId(String accountId){      
        log.debug("accountId=" + accountId);      
        User user = new User();      
        user.setAccountId("testAccount");      
        user.setLastLogin(new Date());      
        user.setUserName("mgj");      
        user.setUserId(new Long(123L));     
        return user;      
        }     
}

创建一个bulild.xml文件:
<?xml version="1.0"?>
<project name="xfire" default="genfiles" basedir=".">
    <property name="lib" value="${basedir}/../WebRoot/WEB-INF/lib" />
    <path id="myclasspath">
        <fileset dir="${lib}">
            <include name="*.jar" /> 
        </fileset> 
        <pathelement location="${genfiles}" />
    </path>
 <!--${basedir}/../src表示放在src下面 -->
 <!--${basedir}/../../ssh/src表示放在另外一个工程(ssh)下的src下面 -->
 <!--${basedir}表示当前目录-->
    <!--通过XFire ant任务生成客户端代码的存放位置-->
    <property name="code_path" value="${basedir}/../src" /> 
    <!--需要生成客户端代码的wsdl文件-->
    <property name="wsdl_path" value="http://localhost:8090/xfire/services/UserService?wsdl" />
    <!--生成客户端代码的包名-->
    <property name="code_package" value="com.mgj.xfiretext.webserver.client" />
   
    <!-- Remove classes directory for clean build -->
    <target name="clean" description="Prepare for clean build"> 
        <delete dir="${code_path}"/>
        <mkdir dir="${code_path}"/>
    </target>
   
    <!--<target name="genfiles" depends="clean" description="Generate the files">  -->
    <target name="genfiles" description="Generate the files">
        <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="myclasspath" />
        <!--outputDirectory属性定义创建的代码所在的文件夹
            wsdl是web服务的wsdl文件
            package代表创建的代码的package
        -->
        <wsgen outputDirectory="${code_path}" wsdl="${wsdl_path}" package="${code_package}" binding="xmlbeans" /> 
    </target>
</project>
Spring 的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />

 <bean id="userService"
  class="com.mgj.xfiretext.webserver.UserServiceImpl" />
 <bean id="addressingHandler"
  class="org.codehaus.xfire.addressing.AddressingInHandler" />

 <bean name="UserService"
  class="org.codehaus.xfire.spring.ServiceBean">
  <property name="serviceBean" ref="userServiceBean" />
  <property name="serviceClass"
   value="com.mgj.xfiretext.webserver.UserService" />
  <property name="inHandlers">
   <list>
    <ref bean="addressingHandler" />
   </list>
  </property>
 </bean>
 
 <bean id="userServiceBean"
  class="com.mgj.xfiretext.webserver.UserServiceImpl" />
</beans>

测试类:

package test;

import java.net.MalformedURLException;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.mgj.xfiretext.domain.User;
import com.mgj.xfiretext.webserver.UserService;

package test;

import java.net.MalformedURLException;

import org.apache.xmlbeans.XmlObject;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.zx.xfiretext.domain.User;
import com.zx.xfiretext.webserver.UserService;
import com.zx.xfiretext.webserver.client.UserServiceClient;
import com.zx.xfiretext.webserver.client.UserServicePortType;

/**
 *
 * MyClient.java test xfire
 *
 * @author magj mailto:m441748725@163.com 2008-10-17 下午06:00:05
 *
 */
public class MyClient {
 public static void main(String[] args) {
  try {
   Service serviceModel = new ObjectServiceFactory()
     .create(UserService.class);
   UserService service = (UserService) new XFireProxyFactory().create(
     serviceModel,
     "http://localhost:8090/xfire/services/UserService");
   User user = service.queryUserByAccoutId("123");
   System.out
     .println("userId=" + user.getUserId() + ", userName="
       + user.getUserName() + ", lastLogin="
       + user.getLastLogin());
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }

  UserServiceClient userServiceClient = new UserServiceClient();
  UserServicePortType userServicePortType = userServiceClient
    .getUserServiceHttpPort();
  XmlObject userXml = userServicePortType.queryUserByAccoutId("123");
  System.out.println(userXml.toString());
  Document userdocument = null;
  try {
   userdocument = DocumentHelper.parseText(userXml.toString());
   Element rootElement = userdocument.getRootElement();
   Element accountIdElement = rootElement.element("accountId");
   Element userIdElement = rootElement.element("userId");
   System.out.println("accountId: " + accountIdElement.getTextTrim()
     + "  userId:" + userIdElement.getTextTrim());
  } catch (DocumentException e) {
   e.printStackTrace();
  }
 }
}

 

说明:WEB服务器为TOMCAT,端口:8090.
接下来,我们按照一下步骤来。
(1)启动TOMCAT
(2)我们应当执行build.xml文件,因为是在ECLIPSE中开发,所以只要点击【右键】之后,找到【ANT BUILD】选项,然后点击。就会生成UserServiceClient.java、UserServiceImpl、UserServicePortType这个三个类。
(3)执行测试类。
我们就会看到结果:
userId=123, userName=mgj, lastLogin=Sat Nov 01 17:27:50 CST 2008
<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">
  <accountId xmlns="http://domain.xfiretext.zx.com">testAccount</accountId>
  <lastLogin xmlns="http://domain.xfiretext.zx.com">2008-11-01T17:27:51.343+08:00</lastLogin>
  <userId xmlns="http://domain.xfiretext.zx.com">123</userId>
  <userName xmlns="http://domain.xfiretext.zx.com">mgj</userName>
</out>
accountId: testAccount  userId:123

说明:以上我也是根据网上前辈做的例子,在结合自己的一些实践做出来的。
posted on 2008-11-01 16:29 马光军 阅读(396) 评论(0)  编辑  收藏 所属分类: XFIRE

只有注册用户登录后才能发表评论。


网站导航: