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

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后问题解决。

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值