Xfire+Spring构建WebService服务器和客户端

Xfire简介

        XFire是新一代的Java WebService引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。

   XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。

   XFire 支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor;

  支持基于HTTP、JMS、XMPP等多种协议访问Web服务;

  支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-Security)等;

  支持JSR181,可以通过JDK5配置Web服务;

  高性能的SOAP实现;

  服务器端、客户端代码辅助生成;

  对Spring、Pico、Plexus等项目的支持等。

   XFire是一种基于Servlet技术的SOA应用开发框架,需要Servlet容器的支持。XFire支持在多种Servlet容器中运行,包括Websphere、Weblogic、TOMCAT等。支持JDK 1.4以上(含1.4).

   XFire框架目前的最新版本是1.2.6,可以访问http://xfire.codehaus.org 下载XFire框架的安装包,下载时请选择“全部二进制发布包”,而不仅仅是“XFirejar文件".下载地址:http://xfire.codehaus.org/Download

       Xfire已经不更新了,所以目前Spring4.0及以上已经不支持Xfire,如果需要和Spring集成,就用Spring3.2.x吧,当然也可以选择CXF(Xfire的下一代),新入职一家公司用的是Xfire,就简单看了一下。

快速发布WebService接口

1.Idea新建一个Spring  + Web项目

新建项目

2.将下载的Xfire包导入项目

导入jar

3.确保jar包在发布的war包根目录的lib目录下

打包注意

4.编写暴露方法的接口和实现类,如图示,具体代码就不粘贴了,就是写一个简答接口和实现类就行

项目结构钢

5.修改web.xml文件,目的是注册servlet, 发布暴露WSDL

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>xfireSpringServlet</servlet-name>
        <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>xfireSpringServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

6.修改spring配置文件applicationContext.xml

<?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="BookService" class="org.codehaus.xfire.spring.remoting.XFireExporter">
        <property name="serviceFactory" ref="xfire.serviceFactory"></property>
        <property name="xfire" ref="xfire"></property>

        <property name="serviceBean" ref="BookServiceImpl"></property>
        <property name="serviceClass" value="com.jett.service.BookService"></property>
        <property name="name" value="BookService"></property>
    </bean>

    <bean id="BookServiceImpl" class="com.jett.service.impl.BookServiceImpl"></bean>

    <bean id="FoodService" class="org.codehaus.xfire.spring.remoting.XFireExporter">
        <property name="serviceFactory" ref="xfire.serviceFactory"></property>
        <property name="xfire" ref="xfire"/>
        <property name="serviceBean" ref="FoodServiceImpl"/>
        <property name="serviceClass" value="com.jett.service.FoodService"/>
        <property name="name" value="FoodService"/>
    </bean>
    <bean id="FoodServiceImpl" class="com.jett.service.impl.FoodServiceImpl"></bean>
</beans>

7. 启动TOMCAT, 

访问地址:  http://localhost:8080/应用根/service 查看wsdl

如果能查看到wsdl,服务端就OK了

wsdl

如果项目在添加Maven框架,就不需要自己下载jar包,只需要添加如下依赖就好了

        <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-core</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-spring</artifactId>
            <version>1.2.6</version>
        </dependency>

当然最后需要保证自动下载的jar要打包发布到war中,不然在tomcat上找不到相应的jar包

客户端访问

客户端可以有多种方式访问,比如下载生成客户端啊,我这边就介绍客户端动态访问的方式

客户端也需要Xfire的jar,可以自己导入或者maven导入,这里给出访问代码

import org.codehaus.xfire.client.Client;
import java.net.URL;

/**
 * @Author: Jett
 * @Date: 2019/4/4 10:10
 * Desciption:
 */
public class FoodTest {
    public static void main(String[] args) throws Exception {
        Client client = new Client(new URL("http://localhost:8080/xfireTest/services/FoodService?wsdl"));
        Object[] objects = client.invoke("food", new Object[]{"apple", 2});
        System.out.println(objects[0]);
    }
}

这样一个简单的demo就实现了,深入的关于传参,传对象的就大家自己深入挖掘吧

猜你喜欢

转载自blog.csdn.net/weixin_40672761/article/details/89020615