• CXF 3


    CXF 之初体验

    下面我们将通过直接运行与简单修改 CXF 自带的例子体验一下服务的发布与消费。

    配置与检查环境变量

    UNIX 上:

    CXF_HOME=/opt/Java/CXF
    JAVA_HOME=/opt/JDK/1.5.0
    ANT_HOME=/opt/Java/Ant
    export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$CXF_HOME/bin:$PATH
    export CLASSPATH=.:$CXF_HOME/lib/cxf-manifest-incubator.jar:./build/classes
    

    Windows 上:

    set CXF_HOME=C:\Java\CXF
    set JAVA_HOME=C:\JDK\1.5.0
    set ANT_HOME=C:\Java\Ant
    set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%CXF_HOME%\bin;%PATH%
    set CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest-incubator.jar;.\build\classes
    

    为了部署到 Java EE 的容器中进行测试,示例采用 Tomcat 来进行,同样设置 CATALINA_HOME 变量:

    UNIX 上:

    CATALINA_HOME=/opt/OpenSource/Tomcat-5.5.25
    export CATALINA_HOME
    

    Windows 上:

    set CATALINA_HOME=C:\OpenSource\Tomcat-5.5.25
    

    如果以上环境变量您没有并没有直接设置到系统的变量中,可以将之另存为一个文件,保存起来,比如存为:%CXF_HOME%/env.sh 或者 %CXF_HOME%/env.bat,这样在运行示例前,先运行它来设置环境变量即可。

     

    通过 Ant 来构建和运行示例

    构建与启动 Server

    首先,进入到 %CXF_HOME%/java_first_pojo/ 目录下。在 UNIX 或 Windows 下的命令都是一样的,如下:

    ant server
    

    最后可以看到如下信息:

    build:
    
    server:
     [java] Server ready...
    

    如果看不到这些信息,请检查环境变量设置是否正确。

    运行 Client

    再打开一个命令窗口,运行:

    ant client
    

    最后可以看到如下信息:

    client:
     [java] Invoke sayHi()....
     [java] Hello user
    
    BUILD SUCCESSFUL
    

    如果看不到这些信息,问题应当是出现在环境变量的设置上,需要再次检查一下您的环境变量设置是否正确。

     

    体验改变

    通过上面的构建,运行 Server ,再运行 Client ,我们可以体会到利用 CXF 发布与使用 Web Services 是如此简单。下面我们将开始进行简单地代码修改。

    修改 Client 端

    打开 %CXF_HOME%/samples/java_first_pojo/src/demo/hw/client 目录下的 Client.java 文件,在最后面修改为:

    System.out.println(client.sayHi("World , 利用 Apache CXF 实现 Web Services"));
    

    修改并保存后,再运行:

    ant client
    

    现在可以看到您修改后的信息,如下:

    client:
     [java] Invoke sayHi()....
     [java] Hello World , 利用 Apache CXF 实现 Web Services
    
    BUILD SUCCESSFUL
    

    修改 Server 端代码

    Ctrl + C 直接停止刚才启动的 ant server 启动端,然后打开 %CXF_HOME%/samples/java_first_pojo/src/demo/hw/server 目录下的 HelloWorldImpl.java 文件,修改

    return "Hello " + text;
    

    return "Hello " + text + new java.util.Date();
    

    我们在返回信息时增加了一个时间戳上去,然后再次分别运行 ant server 与 ant client ,可以看到返回的信息后面增加了时间,如下:

    client:
     [java] Invoke sayHi()....
     [java] Hello World , 利用 Apache CXF 实现 Web ServicesThu Sep 27 21:40:49 CST 2007
    
    BUILD SUCCESSFUL
    

    以上只是一个简单的示例,体验一下利用 CXF 进行发布与使用 Web Services,并尝试修改了 Server 端与 Client 端的代码。下面让我们更进一步,通过查看 Server.java 及 Client.java 的代码,来了解一下 CXF 的运作过程。

    代码简单分析

    Server.java 中主要的代码片断如下,它利用 ServerFactoryBean 来进行 Web Services 的发布,实例化一个实现类 HelloWorldImpl,设置将要进行发布的地址 address,最后通过 ServerFactoryBean 的 create() 方法就成功地发布了 Web Services,如此简单而已,只有六行代码:

     HelloWorldImpl helloworldImpl = new HelloWorldImpl();
     ServerFactoryBean svrFactory = new ServerFactoryBean();
     svrFactory.setServiceClass(HelloWorld.class);
     svrFactory.setAddress("http://localhost:9000/Hello");
     svrFactory.setServiceBean(helloworldImpl);
     svrFactory.create();
    

    Client.java 中的主要代码片断如下,通过 ClientProxyFactoryBean 代理工厂类来创建一个服务,绑定到 endPointAddress 地址,就可以 create 并得到服务,并进行服务消费了:

     ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
     factory.setServiceClass(HelloWorld.class);
     factory.setAddress("http://localhost:9000/Hello");
     HelloWorld client = (HelloWorld)factory.create();
     System.out.println("Invoke sayHi()....");
     System.out.println(client.sayHi("user"));
    

    最后,停止 Server,并清除构建过程中产生的一些文件,直接运行 ant clean 即可。

     

    构建和运行在 Servlet 容器里的示例

    接下来我们尝试编译打包一个示例,并部署到 Java EE 的容器里进行测试。

    构建 Web 应用程序包

    停止掉前面运行的 Server ,然后在命令行运行:

    ant war 
    

    将在 %CXF_HOME%/samples/java_first_pojo/build/war/ 目录下生成 helloworld.war 文件。

    部署应用

    先运行如下命令,将运行部署到 Tomcat 容器中:

    ant deploy -Dtomcat=true
    

    启动 Tomcat

    然后在 Windows 下通过 startup.bat 或在 Unix 下通过 startup.sh 来启动 Tomcat,CXF 的应用也就随之启动。通过 Tomcat 管理控制台 http://localhost:8080/manager/html/ 可以看到已经成功部署了 helloworld.war 的应用程序,如下图所示:


    图 2. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意图
    图 2. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意图 

     

    校验服务

    假设您的 Tomcat 服务端口是 8080 ,那运行以下命令就可以调用部署到 Java EE 容器里的 CXF 所提供的 Web Services 的服务了。

    http://localhost:8080/helloworld/services/hello_world?wsdl
    

    查看 wsdl 文件的信息内容如下:


    图 3. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意图
    图 3. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意图 

    运行 Client

    接下来我们来运行 Client 来使用它,运行:

    ant client-servlet
    

    如果您的端口不是 8080,可以使用:

    ant client-servlet -Dbase.url=http://localhost: 端口号
    

    或者

    ant client-servlet -Dhost=localhost -Dport= 端口号
    

    来调用 Web Services ,返回结果如下:

    client-servlet:
     [java] Invoke sayHi()....
     [java] Hello World , 利用 Apache CXF 实现 Web ServicesThu Sep 27 21:56:32 CST 2007
    
    BUILD SUCCESSFUL
    

    在 Tomcat 后台可以看到一些 Exception 的信息,这是正常的,是因为 public void pingMe() throws PingMeFault 特意抛出来的,不必理会,没有抛出异常信息才是不正常的,需要重新检查以上各个步骤是否正确执行了。

    卸载应用

    从 Tomcat 中卸载应用,运行:

    ant undeploy -Dtomcat=true
    

    最后,停止 Tomcat,然后清除构建过程中产生的一些文件,直接运行 ant clean 即可。

    4 页

  • 相关阅读:
    梯度下降进阶
    梯度下降基础
    python---matplotlib
    python---numpy
    浅析Jupyter Notebook
    anaconda安装
    机器学习---导学
    python---线程与进程
    mapping values are not allowed in this context at line 115 column 10
    laravel进行单元测试的时候如何模拟数据库以及mockery的调用
  • 原文地址:https://www.cnblogs.com/yujy/p/2803952.html
Copyright © 2020-2023  润新知