xfire for web-Service

1.0 XFire

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

目前,XFire虽然已经放弃维护了,并入了apache 的顶级项目CXF中,但是使用的人还是不少,所以留下笔录.供以后回忆.

下面是官方给出的一段话:
XFire is now CXF
Icon
User's looking to use XFire on a new project, should use CXF instead. CXF is a continuation of the XFire project and is considered XFire 2.0. It has many new features, a ton of bug fixes, and is now JAX-WS compliant! XFire will continue to be maintained through bug fix releases, but most development will occur on CXF now. For more information see the XFire/Celtix merge FAQ and the CXF website.

 


1.2 XFire的使用

1.2.1 XFire的使用,自底向上篇;

1.下载Xfire , 地址 http://xfire.codehaus.org/Download

 

2.导入jar包和所有依赖

3.编写接口

package cn.c.jorcen.service;

public interface CalculatorServicer {
    public int add(int a, int b);

    public int del(int a, int b);

    public int get(int a, int b);
}

 

4.编写实现了

package cn.c.jorcen.service.impl;

import cn.c.jorcen.service.CalculatorServicer;

public class CalculatorServicerImpl implements CalculatorServicer {

    public int add(int a, int b) {

        return a + b;
    }

    public int del(int a, int b) {
        // TODO Auto-generated method stub
        return a - b;
    }

    public int get(int a, int b) {
        return a - b;
    }

    public static void main(String[] args) {
        System.out.println(CalculatorServicerImpl.class);
        
    }

}

 

5.编辑web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>XFireServlet</servlet-name>
<!--        <display-name>XFire Servlet</display-name>-->
        <servlet-class>
            org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

 

6.编辑 META-INF/xfire/services.xml

<!-- START SNIPPET: services -->
<beans xmlns="http://xfire.codehaus.org/config/1.0">
  <service>
    <name>CalculatorService</name>
    <serviceClass>cn.c.jorcen.service.CalculatorServicer</serviceClass>
    <implementationClass>cn.c.jorcen.service.impl.CalculatorServicerImpl</implementationClass>
  </service>
</beans>
<!-- END SNIPPET: services -->

 

7.启动服务器,我用的是Tomcat.测试结果;

 http://localhost:8080/web/services

 

内容如下

8.自己编写测试类:

package cn.c.jorcen.service.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 cn.c.jorcen.service.CalculatorServicer;

public class Client {
    public static void main(String[] args) throws Throwable {
        Service service = new ObjectServiceFactory()
                .create(CalculatorServicer.class);
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
                .newInstance().getXFire());
        String url = "http://localhost:8080/web/services/CalculatorService";
        CalculatorServicer cs = (CalculatorServicer) factory.create(service,
                url);
        System.out.println(cs.getClass());
        int add = cs.add(1, 3);
        int del = cs.del(1, 4);
        System.out.println(add);
        System.out.println(del);

    }
}

结果如下:

class $Proxy0
4
-3

1.2.2 XFire的使用,自顶向下篇;

Xfire 使用Ant,来自动构建的.为了方便编写,我们把Xfire 的jar 包和 依赖包放在一起.并引入工程.

新建builder.xml如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- default 定义一个默认的任务-->
<project name="calculatorServicer" basedir="." default="gen-webservice">
    <!-- 引入属性文件-->
    <property file="buider.properties">
    </property>
    <!-- 定义 jar 文件 -->
    <path id="project-classpath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <!--定义一个任务 -->
    <target name="gen-webservice">
        <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />
        <!--outputDirectory 产生源码的位置,  wsdl文件的位置,package  包名,   overwrite 是否覆盖 -->
        <wsgen outputDirectory="${src.dir}" wsdl="${wsdl.dir}" package="cn.c.ws.client" overwrite="true" />

    </target>

</project>

属性文件如下:

#引用ant里边的当前项目的src
src.dir=${basedir}/src
lib.dir=F:/bin/xfire-1.2.6/lib
wsdl.dir=http://localhost:8080/web/services/CalculatorService?wsdl

生产代码如下:

测试类如下:

public class Mail {
    public static void main(String[] args) {
        CalculatorServiceClient client = new CalculatorServiceClient();
        CalculatorServicePortType pro = client.getCalculatorServiceHttpPort();
        System.out.println(pro.add(1, 3));
        System.out.println(pro.del(8, 9));
    }
}

结果如下:

4
-1

 

2.使用maven来构建:

  废话不多说:

目录结构如下:

pom.xml 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>webMaven</groupId>
    <artifactId>webMaven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>webMaven</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-generator</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.3</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <configuration>
                            <tasks>
                                <!-- START SNIPPET: client -->
                                <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
                                    classpathref="maven.compile.classpath" />

                                <wsgen outputDirectory="${basedir}/src/main/java"
                                    wsdl="${basedir}/src/wsdl/test.wsdl" package="cn.c.jorcen.test"
                                    overwrite="true" />
                                <!-- END SNIPPET: client -->
                            </tasks>
                            <sourceRoot>${basedir}/src/main/java</sourceRoot>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
        <sourceDirectory>src/main</sourceDirectory>
        <testSourceDirectory>src/test</testSourceDirectory>
        <resources>
            <resource>
                <directory>src/main</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.xsd</include>
                </includes>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                    <include>**/*.wsdl</include>
                </includes>
            </testResource>
        </testResources>
    </build>

    <!--  needed for XmlSchema -->
    <repositories>
        <repository>
            <id>codehaus</id>
            <name>Codehaus maven repository</name>
            <url>http://dist.codehaus.org/</url>
            <layout>legacy</layout>
        </repository>
    </repositories>


</project>

run:

 或者在工程根目录下: mvn clean generate-sources

 控制台输出如下:

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for webMaven:webMaven:jar:0.0.1-SNAPSHOT
[WARNING] 'repositories.repository.layout = legacy' is deprecated: codehaus @ webMaven:webMaven:0.0.1-SNAPSHOT, F:\Workspaces\MyEclipse8.6\workspace-webService\webMaven\pom.xml
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building webMaven 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-antrun-plugin:1.3:run (default) @ webMaven ---
[INFO] Executing tasks
2014-4-15 11:12:36 org.codehaus.xfire.gen.Wsdl11Generator generate
信息: Generating code for WSDL at file:/F:/Workspaces/MyEclipse8.6/workspace-webService/webMaven/src/wsdl/test.wsdl with a base URI of file:/F:/Workspaces/MyEclipse8.6/workspace-webService/webMaven/src/wsdl/test.wsdl
2014-4-15 11:12:38 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator generate
信息: Creating class cn.c.jorcen.test.CalculatorServicePortType
2014-4-15 11:12:38 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator generate
信息: Creating class cn.c.jorcen.test.CalculatorServiceImpl
cn\c\jorcen\service\Add.java
cn\c\jorcen\service\AddResponse.java
cn\c\jorcen\service\Del.java
cn\c\jorcen\service\DelResponse.java
cn\c\jorcen\service\Get.java
cn\c\jorcen\service\GetResponse.java
cn\c\jorcen\service\ObjectFactory.java
cn\c\jorcen\service\package-info.java
cn\c\jorcen\test\CalculatorServiceClient.java
cn\c\jorcen\test\CalculatorServiceImpl.java
cn\c\jorcen\test\CalculatorServicePortType.java
[INFO] Executed tasks
[INFO] Registering compile source root F:\Workspaces\MyEclipse8.6\workspace-webService\webMaven\src\main\java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.436s
[INFO] Finished at: Tue Apr 15 11:12:38 CST 2014
[INFO] Final Memory: 2M/5M
[INFO] ------------------------------------------------------------------------

结果如下:

功成身退!

posted @ 2014-04-14 12:23  mjorcen  阅读(645)  评论(0编辑  收藏  举报