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端:

原文地址:https://www.cnblogs.com/jepson6669/p/8885798.html