• apache CXF quickstart


    1下载

    官网: cxf.apache.org

    下载 CXF 的开发包:

    解压上面的 zip 文件 :

    2介绍

    1什么是cxf

    Apache CXF™ is an open source services framework. CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.

    2cxf 结构

    3 入门案例(服务端开发)

    第一步: 创建动态 web 项目

    第二步: 导入 CXF 相关 jar

    第三步: 在 web.xml 中配置 CXF 框架

    配置cxf框架提供的一个servlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>webservice_cxf_service</display-name>
      
      <!--配置 CXF 框架提供的 Servlet  -->
      <servlet>
          <servlet-name>cxf</servlet-name>
          <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
          <!-- 通过初始化参数指定 CXF 框架的配置文件位置 -->
          <init-param>
              <param-name>config-location</param-name>
              <param-value>classpath:cxf.xml</param-value>
          </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>cxf</servlet-name>
          <url-pattern>/service/*</url-pattern>
      </servlet-mapping>
      
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    第四步: 在类路径下提供 cxf.xml 

    (其实就是一个 spring 配置文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:soap="http://cxf.apache.org/bindings/soap"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://cxf.apache.org/bindings/soap 
                        http://cxf.apache.org/schemas/configuration/soap.xsd
                        http://cxf.apache.org/jaxws 
                        http://cxf.apache.org/schemas/jaxws.xsd">
        <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        
    </beans>

    第五步: 开发一个接口和实现类

    注解必须放到接口上

    package com.test.cxf;
    
    import javax.jws.WebService;
    
    @WebService
    public interface IHelloService {
    
        public String sayHello(String name);
    }
    package com.test.cxf;
    
    public class HelloServiceImpl implements IHelloService {
    
        @Override
        public String sayHello(String name) {
    
            System.out.println("基于CXF开发的服务端sayHello方法被调用了");
            
            return "hello:"+name;
        }
    
    }

    第六步: 在 cxf.xml 中注册服务

    最关键的一步

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:soap="http://cxf.apache.org/bindings/soap"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://cxf.apache.org/bindings/soap 
                        http://cxf.apache.org/schemas/configuration/soap.xsd
                        http://cxf.apache.org/jaxws 
                        http://cxf.apache.org/schemas/jaxws.xsd">
        <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        
        <bean name="helloService" class="com.test.cxf.HelloServiceImpl"></bean>
        
        <!-- 注册服务 -->
        <jaxws:server id="myService" address="/cxfService">
            <jaxws:serviceBean>
                <ref bean="helloService"/>
            </jaxws:serviceBean>
        </jaxws:server>
    </beans>

    http://ip:port/projectName/service/address;上面配置的 address 只是这个路径的最后一部
    分。
    如果发布到 tomcat 上, 那访问地址就是:
    http://localhost:8080/webservice_cxf_service/service/cxfService?wsdl;

    第七步:发布项目到tomcat,查看效果

    浏览器输入http://localhost:8080/webservice_cxf_service/service/cxfService?wsdl

    4 入门案例(客户端开发)

    方式一: 使用 jdk 提供的 wsimport 命令生成本地代码完成调用

    方式二: 使用 CXF 提供的方式(重点)

    第一步:创建项目导jar包

    创建 Java 项目并导入 CXF 相关 jar

    第二步:生成本地代码

    使用 wsimport 或者 CXF 提供 wsdl2java 生成本地代码, 只需要生成接口文件

    wsdl2java -d . -p com.test.cxf http://localhost:8080/webservice_cxf_service/service/cxfService?wsdl

    第三步: 将接口文件复制到项目中

     

    会报错,需要删除ObjectFactory.class

    第四步:编写配置文件

    提供 spring 配置文件, 注册客户端代理对象

    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:soap="http://cxf.apache.org/bindings/soap"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://cxf.apache.org/bindings/soap 
                        http://cxf.apache.org/schemas/configuration/soap.xsd
                        http://cxf.apache.org/jaxws 
                        http://cxf.apache.org/schemas/jaxws.xsd">
        <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        
        <!-- 注册cxf客户端对象,通过spring框架创建这个代理对象,使用代理对象实现远程调用 -->
        <jaxws:client id="myClient"
                address="http://192.168.31.247:8080/webservice_cxf_service/service/cxfService" 
                serviceClass="com.test.cxf.IHelloService">
        </jaxws:client>
    </beans>

    第五步:书写测试类

    读取 spring 配置文件, 创建 spring 工厂, 从工厂中获取代理对象, 实现远程调用

    package com.test.cxf;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App {
    
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("cxf.xml");
            
            IHelloService proxy = (IHelloService) ac.getBean("myClient");
            
            String s = proxy.sayHello("cury");
            
            System.out.println(s);
        }
    }

    第六步:运行查看结果

    客户端:

    tomcat端:

  • 相关阅读:
    [LeetCode]98. SortColors颜色排序
    [LeetCode]97. Reorder List链表重排序
    [LeetCode]96. Min Stack带Min函数的栈
    [LeetCode]95. Implement Stack using Queues用队列实现栈
    opencv的学习笔记4
    opencv的学习笔记3
    RCNN 和SPPnet的对比
    CNN & RNN 及一些常识知识(不断扩充中)
    RCNN--对象检测的又一伟大跨越 2(包括SPPnet、Fast RCNN)(持续更新)
    【转】有监督训练 & 无监督训练
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8885798.html
Copyright © 2020-2023  润新知