XFire的下一代产品CXF的入门(一)

原创 2007年10月06日 09:24:00

CXF step by step

 

http://incubator.apache.org/cxf/download.html 下载最新版本的CXF。之后解压到D:/CXF

示例的开发分为三步

l         设置编译环境

l         写一个简单的 JAX-WS 服务

l         通过JAX-WS API把你的服务发布

l         通过客户端调用你的服务

 

1. 设置编译环境

打开eclipse(其他的IDE也可以),引入如下的类库(也可以省事一点,把CXF/lib路径下的所有类库都引入)

commons-logging-1.1.jar

geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)

geronimo-annotation_1.0_spec-1.1.jar (JSR 250)

geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)

geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)

geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)

jaxb-api-2.0.jar

jaxb-impl-2.0.5.jar

jaxws-api-2.0.jar

jetty-6.1.5.jar

jetty-util-6.1.5.jar

neethi-2.0.jar

saaj-api-1.3.jar

saaj-impl-1.3.jar

stax-api-1.0.1.jar

wsdl4j-1.6.1.jar

wstx-asl-3.2.1.jar

XmlSchema-1.2.jar

xml-resolver-1.2.jar

 

引入Spring相关的jars (只对):

 

aopalliance-1.0.jar

spring-core-2.0.4.jar

spring-beans-2.0.4.jar

spring-context-2.0.4.jar

spring-web-2.0.4.jar

 

引入CXF相关的jar:

 

cxf-2.0-incubator.jar

 

2. 编写服务

eclipse里创建一个普通的JAVA PROJECT

服务的例子代码在 D:/cxf/samples/java_first_jaxws”路径下。最方便的办法是直接把代码引入项目,也可以手工创建这几个类,然后把代码拷贝过去。

 

首先写一个服务接口,例子中的HelloWorld.java。我们要注意的是这个例子使用了JSR181规范中的声明“@WebService”。

package demo.hw.server;
 
import javax.jws.WebService;
 
@WebService
public interface HelloWorld {
    String sayHi(String text);
}

下一步实现这个服务接口,例子中的HelloWorldImpl.java。这个例子代码中通过“@WebService”标签告诉CXF运行环境把 HelloWorld”这个服务发布为WSDL

package demo.hw.server;
 
import javax.jws.WebService;
 
@WebService(endpointInterface = "demo.hw.server.HelloWorld", 
            serviceName = "HelloWorld")
public class HelloWorldImpl implements HelloWorld {
 
    public String sayHi(String text) {
        return "Hello " + text;
    }
}

 

3. 发布你的服务

你要编写一个服务器程序。例子中的Server.javaServer.java有两个关键的作用,一个是启动CXF的运行环境,第二个是把上面的服务器实现发布到CXF运行环境中去。

public class Server {

    protected Server() throws Exception {

        // START SNIPPET: publish

        System.out.println("Starting Server");

        HelloWorldImpl implementor = new HelloWorldImpl();

        String address = "http://localhost:9000/helloWorld";        Endpoint.publish(address, implementor);

        // END SNIPPET: publish

    }

 

    public static void main(String args[]) throws Exception {

        new Server();

        System.out.println("Server ready...");

 

        Thread.sleep(5 * 60 * 1000);

        System.out.println("Server exiting");

        System.exit(0);

    }

}  

 

 

4.调用你的服务,客户端程序程序的编写

客户端例子代码为Client.java。客户端调用了Client.java的代码如下

package demo.hw.client;

 

import javax.xml.namespace.QName;

import javax.xml.ws.Service;

import javax.xml.ws.soap.SOAPBinding;

 

import demo.hw.server.HelloWorld;

 

public final class Client {

 

    private static final QName SERVICE_NAME

        = new QName("http://server.hw.demo/", "HelloWorld");

    private static final QName PORT_NAME

        = new QName("http://server.hw.demo/", "HelloWorldPort");

 

    private Client() {

    }

 

    public static void main(String args[]) throws Exception {

        Service service = Service.create(SERVICE_NAME);

        // Endpoint Address

        String endpointAddress = "http://localhost:9000/helloWorld";

 

        // Add a port to the Service

        service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

       

        HelloWorld hw = service.getPort(HelloWorld.class);

        System.out.println(hw.sayHi("World"));

 

    }

 

}

 

 

通过上面的四步,HelloWorld的例子就编写完了。可以编译执行了,由于程序中使用了标签,所以你必须要使用5.0的编译器。在Eclipse里面,配置如下图

 

运行过程:

1.       首先运行Server.java。看到如下信息,说明服务器启动成功

……

信息: jetty-6.1.5

2007-10-6 7:54:40 sun.reflect.NativeMethodAccessorImpl invoke0

信息: Started SelectChannelConnector@0.0.0.0:9000

Server ready...

 

2.       也可通过在IE中访问http://localhost:9000/helloWorld?wsdl来查看服务器的运行情况和服务的发布情况。

3.       运行Client.java,看到调用结果。

 

另外:

在使用hello world的例子中,client.java遇到了" The type class is not generic; it cannot be parameterized with arguments <T> "这样的出错提示。安装了一个新版本的JAVA 5.0 update 13后问题解决。

 

相关文章推荐

axis和xfire以及CXF三种方式实现WebServices分别有什么优缺

原文链接:http://blog.csdn.net/rockstar541/article/details/21106407
  • liliiii
  • liliiii
  • 2014年07月29日 13:28
  • 688

Axis,axis2,Xfire以及cxf对比

http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http://xfire.codehaus.org/ htt...

cxf与xfire互相调用,并且加验证机制

最近做的项目要完成与第三方系统进行webservice对接。

WebService编程(1:Axis;2:Axis2/XFire;3:CXF;4:jdk6)

【虎.无名:很早以前用过axis,只要把任意java类改名为jws部署到tomcat中,就可以发布为一个webservice,觉得很神奇。后来用MyEclipse通过XFire向导创建WebServi...

解决xfire和cxf包冲突

  • 2017年09月16日 11:42
  • 487KB
  • 下载

java webservice AXIS,XFire , CXF

  • 2013年07月18日 15:50
  • 64KB
  • 下载

axis和xfire以及CXF三种方式实现WebServices分别有什么优缺

1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebServic...

WebService框架JWS、Axis2、XFire、CXF的区别

原文转自----http://my.oschina.net/XYleung/blog/96094 1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度...

有了Java6,还需要Axis2、XFire、CXF吗?

首先说明下,对于以上这些开源的框架和JWS,我都用过了。 看了前面一系列Java6 JWS的文章,很显然,无论从开发还是部署角度来说,Java6的JWS都是最容易的。我们不禁回想:有了Java6,还需...

Web service 框架比较CXF xfire aisx2 aisx

Web 服务框架。它还体现了从 Axis 1.x 系列获得的经验和最近两年在 Web 服务领域的发展。推出 Axis2 的主要原因之一是从速度和内存方面获得更好的性能——不过还添加了一些新特性和功能。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XFire的下一代产品CXF的入门(一)
举报原因:
原因补充:

(最多只允许输入30个字)