zoukankan      html  css  js  c++  java
  • IIdea使用CXF开发WebService

    写这篇文章主要是用于增强记忆,而我参考的是这位朋友的随笔,链接如下

    http://www.xiaomager.com/415.html 

    服务端开发过程

    1.首先创建一个maven项目,如下图

    2.添加项目的依赖包以及设置相关配置

     提示:首先介绍一下基础环境 ,开发编译器 intellij idea ,我们的jdk是1.7,tomcat是7,spring使用的是spring4,cxf准备使用3.1.4,这里特别需要说明的是,cxf 3.0以后的版本只能在jdk1.7上使用,如果在1.6使用的话,会直接报错的。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.rainsoft</groupId>
      <artifactId>cxfWebservice</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
    
      <name>cxfWebservice</name>
      <url>http://maven.apache.org</url>
    
      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <java.version>1.7</java.version>
          <!-- spring版本号 -->
          <spring.version>4.3.2.RELEASE</spring.version>
          <!-- CXF版本号 -->
          <cxf.version>3.1.4</cxf.version>
      </properties>
    
      <dependencies>
        <!-- spring核心包 -->
        <!-- springframe start -->
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-beans</artifactId>
              <version>${spring.version}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-web</artifactId>
              <version>${spring.version}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>${spring.version}</version>
          </dependency>
    
          <!-- CXF webservice -->
          <dependency>
              <groupId>org.apache.cxf</groupId>
              <artifactId>cxf-rt-frontend-jaxws</artifactId>
              <version>${cxf.version}</version>
          </dependency>
          <dependency>
              <groupId>org.apache.cxf</groupId>
              <artifactId>cxf-rt-transports-http</artifactId>
              <version>${cxf.version}</version>
          </dependency>
          <dependency>
              <groupId>org.apache.cxf</groupId>
              <artifactId>cxf-rt-frontend-jaxrs</artifactId>
              <version>${cxf.version}</version>
          </dependency>
    
      </dependencies>
      <build>
          <finalName>cxfWebservice</finalName>
          <defaultGoal>compile</defaultGoal>
          <resources>
              <resource>
                  <directory>src/main/resources</directory>
                  <!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 -->
                  <excludes>
                      <!--测试环境-->
                      <exclude>conf/test/*</exclude>
                      <!--生产环境-->
                      <exclude>conf/production/*</exclude>
                      <!--开发环境-->
                      <exclude>conf/development/*</exclude>
                  </excludes>
              </resource>
              <resource>
                  <directory>src/main/resources/conf/${profiles.active}</directory>
                  <targetPath>conf</targetPath>
              </resource>
          </resources>
          <plugins>
              <!-- compiler插件, 设定JDK版本 -->
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.3</version>
                  <configuration>
                      <source>${java.version}</source>
                      <target>${java.version}</target>
                      <showWarnings>true</showWarnings>
                      <encoding>${project.build.sourceEncoding}</encoding>
                      <compilerArguments>
                          <verbose />
                          <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
                      </compilerArguments>
                  </configuration>
              </plugin>
              <!-- 解决maven命令console出现中文乱码 -->
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <version>2.7.2</version>
                  <configuration>
                      <forkMode>once</forkMode>
                      <argLine>-Dfile.encoding=UTF-8</argLine>
                      <skipTests>true</skipTests>
                  </configuration>
              </plugin>
          </plugins>
    
      </build>
    
      <distributionManagement>
          <repository>
              <id>nexus-releases</id>
              <url>http://192.168.1.22:8081/nexus/content/repositories/releases/</url>
          </repository>
          <snapshotRepository>
              <id>nexus-snapshots</id>
              <url>http://192.168.1.22:8081/nexus/content/repositories/releases/</url>
          </snapshotRepository>
      </distributionManagement>
    
      <profiles>
        <!--生产环境-->
        <profile>
              <id>production</id>
              <properties>
                  <profiles.active>production</profiles.active>
              </properties>
          </profile>
          <!--测试环境-->
          <profile>
              <id>test</id>
              <properties>
                  <profiles.active>test</profiles.active>
              </properties>
          </profile>
    
          <profile>
              <id>development</id>
              <properties>
                  <profiles.active>development</profiles.active>
              </properties>
              <activation><activeByDefault>true</activeByDefault></activation>
          </profile>
      </profiles>
    </project>

    保存后,需要执行maven 的 clean, install 来下载jar包到maven的本地库。

     3.添加配置文件支持

    一共有三处配置文件需要更新

    第一处:需要新增一个cxf的配置文件,这里取名为cxf-servlet.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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://cxf.apache.org/jaxws
           http://cxf.apache.org/schemas/jaxws.xsd">
    
        <context:component-scan base-package="com.daisy" />
        <bean id="cxfdemo" class="com.daisy.cxf.server.impl.MyCxfServerImpl">
        </bean>
        <jaxws:endpoint id="cxfService" implementor="#cxfdemo" address="/cxfserver" />
    </beans>

    此处需要根据自己的包以及配置文件,添加配置

    这里面主要就是定义了一个cxfService,它的 实现类是com.daisy.cxf.server.impl.CxfServerImpl,这个 实现类我们在第三步骤来加上,其次还定义了一个/cxfserver的路径,即我们的cxfserver服务端的请求路径。

     第二处:需要在spring主配置applicationContext文件里把这个新建的文件添加上,配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
                   xmlns:context="http://www.springframework.org/schema/context"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
        <context:annotation-config />
    
        <import resource="cxf-servlet.xml" />
    
    </beans>

    第三处:就是需要在web.xml里面配置cxf的servlet,具体如下:

    该处定义了请求webService的前缀,及通过引入一个org.apache.cxf.transport.servlet.CXFServlet的servlet来处理 所有前缀 /webService/*的请求,所以 我们的cxf的全路径应该是 这里的servlet-mapping加上第一处的address,即  /webService/cxfserver。

    <?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_3_0.xsd" version="3.0">
      <display-name>cxfWebservice</display-name>
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:conf/applicationContext.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
      </listener>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/webService/*</url-pattern>
      </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

     4. 添加cxf服务端的接口类和接口实现类,目录结构如下

     

    java实现代码为 IMyCxfServer.java

    此处必须声明一下,在接口的上面也必须加上 @WebService , 我开始抱着试试的心理将它去掉了,结果在客户端调用的时候就怎么都找不到对应的方法了

    package com.daisy.cxf.server;
    
    import javax.jws.WebService;
    
    /**
     * @author daisy
     * @description IMyCxfServer
     * @date 2017/4/8
     */
    @WebService
    public interface IMyCxfServer {
        String sayHello(String name);
    }

     MyCxfServerImpl.java 

    package com.daisy.cxf.server.impl;
    
    import com.daisy.cxf.server.IMyCxfServer;
    
    import javax.jws.WebService;
    
    /**
     * @author daisy
     * @description MyCxfServerImpl
     * @date 2017/4/8
     */
    @WebService
    public class MyCxfServerImpl implements IMyCxfServer {
        @Override
        public String sayHello(String name) {
            return "hello "+name;
        }
    }

    以上代码表示的意思很明白,即服务端提供一个sayHello的方法,将客户端传递的字符串参数 前面加上 hello 后返回。

    5. 添加cxf服务端的接口类和接口实现类,目录结构如下

    将项目添加到tomcat服务器上运行,访问链接 http://localhost:9090/daisyCxf//webService/cxfserver?wsdl 即可看到结果,如下图所示

     

  • 相关阅读:
    使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
    用户在网站注册,网站通过微信发送验证码,这个操作是怎么实现的?
    Javascript Array和String的互转换。
    JS判断一个数组中是否有重复值的三种方法
    监控聚币网行情 并实时发送到微信
    聚币网API使用教程 demo
    sourceTree安装与使用
    SourceTree 的初次使用的两个小问题
    解决oracle语句中 含数字的字符串按数字排序问题
    使用git pull文件时和本地文件冲突怎么办
  • 原文地址:https://www.cnblogs.com/qianna-daisy/p/6681970.html
Copyright © 2011-2022 走看看