`
cnwuzhulin
  • 浏览: 28556 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebService与XFire

阅读更多

 1、WebService与XFire简介

       WebService即分布式开发,是将一个完整的项目拆分为多个项目,分别完成前台部分(VC)和后台部分(M),各个项目之间是单独存在的,可以单独部署。
     理论上分布式开发可以提高开发效率,但会影响访问的性能。这种分布式开发一般在政府项目或多公司合作开发时使用。
 
     Java最早的分布式的开发是SUN提出的RMI(远程方法调用),在这个的基础上,结合ORMapping的概念,出现了EJB1/2。
 
     WebService概念实际上是微软提出的,也是完成分布式开发的功能,但交互数据使用w3c提供的标准XML完成。这样可以进行跨语言的交互。在这之后,Java也出现了支持WebService的语法JAXB,但语法非常复杂,基本上不用,在这个基础上出现了两个框架(XFire和AXIS),但AXIS没有工具支持,需要手工对发布的远程接口进行编译以及修改。在XFire的1.2.6版本后,XFire被Apache收购,更名为CXF,但更新版本后,只能在Spring2.5环境下使用,如果不使用Spring,该框架无法单独使用。

      在这里XML的语法格式是由w3c制订好的,语法为WSDL,之间的传输协议为SOAP。
这种项目一般在以下情况下使用:
政府项目,特别是电信项目和银行项目
多公司合作的项目
子公司项目


2、XFire+Hibernate完成登陆功能

     这里先不使用Spring框架,先单独使用Hibernate完成后台项目,Struts2完成前台项目
建立WebService项目

 

 

 

 

 

在web.xml中会自动加入以下内容:

 <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
          <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
      <servlet-name>XFireServlet</servlet-name>
       <url-pattern>/services/*</url-pattern>
</servlet-mapping>

 

    加入Hibernate支持
在编写好服务接口和实现类后。

 

 

需要建立一个WebService后台的服务 
 

  

 

 
这时会在项目的根目录下增加一下WebServices的目录,和一个services.xml文件:

 

 


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
     <service>
          <name>UserService</name>
           <serviceClass>org.wu.xfire.service.UserService</serviceClass>
           <implementationClass>
                     org.wu.xfire.service.impl.UserServiceImpl
           </implementationClass>
     <style>rpc</style>
     <use>literal</use>
     <scope>application</scope>
</service>
</beans>

 

 后台项目完成后,如果部署可以查看WSDL的信息:则表示后台项目完成。
http://localhost/WebServiceBack/services/UserService?wsdl,

 

 在WebServiceBack中编写测试类进行测试:

测试成功后可以编写前台项目调用后台项目发布的服务接口UserService!

 

 

package org.wu.xfire.test;

import java.net.MalformedURLException;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.wu.xfire.dao.HelloDAO;
import org.wu.xfire.pojo.User;
import org.wu.xfire.service.UserService;

public class Test {

public static void main(String[] args) { 
              Service service = new ObjectServiceFactory().create(UserService.class); 
              Service helloservice = new ObjectServiceFactory().create(HelloDAO.class); 
              XFireProxyFactory factory = new XFireProxyFactory(XFireFactory .newInstance().getXFire());

               String url = "http://localhost/WebServiceBack/services/UserService"; 
              try {
                       UserService userdao = (UserService) factory.create(service , url); 
                       User user = new User();
                         user.setUsername("Wuzhulin");
                          user.setUserid("Hello"); 
                          user.setPassword("12345"); 
                         System.out.println(userdao.isLogin(user));
                         System.out.println(hellodao.sayHello("张三")); 
                    } catch (MalformedURLException e) { 
                              e.printStackTrace();
                    } catch (Exception e) {
                         e.printStackTrace();
                    }

                 }

          }

 
建立前台项目WebServiceFront,加入Struts支持.方法同上,删除web.xml中的XFire相关内容。
需要建立一个WebService前台的服务(Web Service Client)



 

 

 

 

生成的pojo对象属性类型为JAXBElement,使用比较麻烦,最好重新加入一些setter和getter方法,方便使用,注意getter方法必须改名。User.java

 

 

package org.wu.xfire.pojo;

import javax.xml.bind.JAXBElement;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User", propOrder = {
    "password",
    "userid",
    "username"
})
public class User {
private static ObjectFactory factory = new ObjectFactory();
    @XmlElementRef(name = "password", namespace = "http://pojo.xfire.wu.org", type = JAXBElement.class)
    protected JAXBElement<String> password;
    @XmlElementRef(name = "userid", namespace = "http://pojo.xfire.wu.org", type = JAXBElement.class)
    protected JAXBElement<String> userid;
    @XmlElementRef(name = "username", namespace = "http://pojo.xfire.wu.org", type = JAXBElement.class)
    protected JAXBElement<String> username;

    public JAXBElement<String> getPassword() {
        return password;
    }

    public void setPassword(JAXBElement<String> value) {
        this.password = ((JAXBElement<String> ) value);
    }

    public JAXBElement<String> getUserid() {
        return userid;
    }

    public void setUserid(JAXBElement<String> value) {
        this.userid = ((JAXBElement<String> ) value);
    }

    public JAXBElement<String> getUsername() {
        return username;
    }

    public void setUsername(JAXBElement<String> value) {
        this.username = ((JAXBElement<String> ) value);
    }
    public String getPasswordValue() {
return password.getValue();
}

public void setPassword(String value) {
this.password = factory.createUserPassword(value);
}

public String getUseridValue() {
return userid.getValue();
}

public void setUserid(String value) {
this.userid = factory.createUserUserid(value);
}

public String getUsernameValue() {
return username.getValue();
}

public void setUsername(String value) {
this.username = factory.createUserUsername(value);
}

}


如果服务器端的style选择的是rpc,可以直接在前台项目中自己定义接口和pojo对象,通过XFire提供的方法直接使用。

 

 <service>
        <name>UserService</name>
         <serviceClass>org.wu.xfire.service.UserService</serviceClass>
         <implementationClass>
               org.wu.xfire.service.impl.UserServiceImpl
         </implementationClass>
       <style>rpc</style>
       <use>literal</use>
       <scope>application</scope>
 </service>

 

在WebServiceFront项目中编写测试类进行测试:

 

 

package org.wu.xfire.test;

import org.wu.xfire.hello.HelloDAOClient;
import org.wu.xfire.hello.HelloDAOPortType;
import org.wu.xfire.pojo.User;
import org.wu.xfire.user.UserServiceClient;
import org.wu.xfire.user.UserServicePortType;

public class Test {

public static void main(String[] args) {
            UserServicePortType userdao = new UserServiceClient().getUserServiceHttpPort();
             System.out.println(userdao.getClass().getName());
             User user = new User();
              user.setUsername("Wuzhulin");
              user.setUserid("hello");
              user.setPassword("12345"); 
              System.out.println(userdao.isLogin(user));
       }
}


注意,这里不支持引用传递,因此如果要前后台沟通数据,必须通过参数和返回值的形式来传递。
而且WebService对Hibernate关系映射的支持也很差。只支持单方向的一对多或多对多关系,而且Set集合必须加入泛型。
分页代码也不能直接返回Map了,因为WebService不支持Object类型。需要单独定义一个Page对象。

3、XFire + Spring 开发
Spring在开发中主要还是结合Hibernate开发。
在WebService的开发中,主要还是使用Spring完成后台项目,用来进行服务的发布功能。



 
 

选择XFireSpringServlet来完趁服务的发布。
加入 Spring与Hibernate支持,并在web.xml中配置Spring结合其他框架的监听器

 

<context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/classes/applicationContext-*.xml</param-value> 
  </context-param>
<listener>

            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


正常编写好接口与实现类,在spring中,可以直接通过bean发布服务。

 

<!-- 需要先导入一个发布服务的配置文件 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"></import>

<bean name="userService" class="org.codehaus.xfire.spring.ServiceBean">
          <property name="name" value="UserService"></property> 
          <property name="serviceClass" value="org.wu.xfire.service.UserService"></property>
          <property name="serviceBean">
             <ref bean="userserviceimpl"/>
          </property>
          <property name="style" value="rpc"></property>
          <property name="use" value="literal"></property>
          <property name="scope" value="application"></property>
</bean>

 

 

 

  • 大小: 37.1 KB
  • 大小: 33.3 KB
  • 大小: 37.2 KB
  • 大小: 23.9 KB
  • 大小: 27.4 KB
  • 大小: 32.6 KB
  • 大小: 35.1 KB
  • 大小: 19.6 KB
  • 大小: 27.7 KB
  • 大小: 32 KB
  • 大小: 35.8 KB
  • 大小: 38.2 KB
  • 大小: 27.7 KB
  • 大小: 39.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    WebService之XFire开发文档和代码

    **六、XFire与文档** 在“WebService之XFire开发文档和代码”压缩包中,包含了详细的开发文档,帮助开发者了解如何使用XFire创建、部署和测试WebService。同时,还提供了一些代码示例,可以帮助开发者快速上手实践。...

    webService-xfire入门doc

    【标题】"webService-xfire入门doc" 涉及的是Web服务技术中的XFire框架,这是一款用于构建和消费Web服务的开源Java库。XFire是早期流行的Web服务实现,它允许开发者轻松地将Java对象转换为Web服务,反之亦然。 ...

    XFire--Webservice入门xfire

    XFire--Webservice入门xfire

    java使用XFire调用webService接口

    "Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...

    xfire实现webservice实例

    五、XFire与其他技术的集成 XFire可以很好地与Spring框架集成,通过Spring的依赖注入和AOP特性,可以进一步简化Web服务的开发和管理。 六、XFire的优势与局限 虽然XFire提供了快速开发Web服务的能力,但随着技术的...

    xfire调用webservice

    xfire可以与多种类型的WebService结合使用,如SOAP、REST、XML-RPC等。xfire还提供了一个基于annotation的编程模型,使得开发者可以使用简单的Java代码来开发WebService。 xfire的主要特点包括: 1. 简单易用:...

    webservice spring xfire的实例

    【标题】:“Web服务与Spring整合——XFire实战” 【描述】:这篇博客文章通过一个实际的案例,探讨了如何将Web服务与Spring框架相结合,使用XFire进行开发。XFire是Spring框架早期用于实现Web服务的一个库,它提供...

    webService&xfire.ppt

    webService&xfire.ppt

    WebService之XFire和Jax实现身份验证

    XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...

    eclipse开发webservice的xfire插件

    XFire与Eclipse的整合,通过提供直观的用户界面和自动化工具,简化了Web服务的开发流程。在描述中提到的“最终版本1.2.6”,这可能是xfire插件的稳定版本,为开发者提供了稳定的开发环境。 首先,安装XFire插件到...

    java webservice基于xfire实例

    此外,XFire与Spring的集成使得它可以轻松地在应用上下文中管理Web服务。 总结,Java WebService基于XFire的实例是一个很好的起点,让你了解如何在Java中构建和使用Web服务。通过这个实例,你可以学习到Web服务的...

    Java使用XFire调用WebService接口

    5. **集成Spring框架**:XFire与Spring的良好集成使得开发者可以利用Spring的依赖注入和配置管理能力,轻松地在应用中引入Web服务。 6. **异常处理**:在调用Web服务时,可能会遇到网络问题或服务端错误,XFire会将...

    webservice Xfire 源码整合

    webservice Xfire 源碼整合

    Webservice使用xfire发布及客户端调用

    3. **XFire与JAX-WS**: - 虽然XFire在发布和调用Web服务方面提供了便利,但它的功能相对有限。Java API for XML Web Services (JAX-WS)是Java平台的标准,提供了更广泛的Web服务支持,包括自动代码生成和协议绑定...

    webservice(XFire)实例

    【webservice(XFire)实例详解】 在Java开发中,Webservice是一种常见的用于系统间通信的技术,它基于标准的SOAP(Simple Object Access Protocol)协议。XFire是早期流行的一款开源Java SOAP框架,它提供了轻量级的...

    webservice Xfire .jar包

    Xfire是一款专注于游戏社区的即时通讯软件,它提供了一个平台,让玩家可以方便地与朋友交流、组队以及共享游戏状态。在IT领域,Xfire的.jar包通常包含了用于构建或运行Xfire Web服务的相关组件和库。 首先,我们...

    spring+xfire( 编写webservice完整配置+案例)

    总之,Spring与XFire的结合提供了一种简洁、灵活的方式来创建和管理Web服务,使得开发者可以专注于业务逻辑,而不是底层的协议细节。虽然现在Spring社区更倾向于使用Spring-WS或其他现代的Web服务框架,如Apache CXF...

    WebService框架XFire

    WebService框架XFire是一款用于构建和消费Web服务的开源Java框架,它在早期的Web服务开发中扮演了重要角色。XFire是由Avalon项目发展而来,后来成为了CodeHaus组织的一部分,并最终演变为Apache CXF项目。理解XFire...

Global site tag (gtag.js) - Google Analytics