Spring整合WebService-Cxf方式

1、添加依赖
依赖好多,我都不想放,同事亲测16个,一个都不能少。

         <dependency>
            <groupId>org.apache.neethi</groupId>
            <artifactId>neethi</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.xmlschema</groupId>
            <artifactId>xmlschema-core</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-bindings-soap</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-databinding-jaxb</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-simple</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-udp</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-addr</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-wsdl</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-policy</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>stax2-api</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.2.0</version>
        </dependency>
           <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.3</version>
        </dependency>

项目目录结构
项目目录结构
2、新建服务端

package person.wongya.cxf;

import javax.jws.WebMethod;
import javax.jws.WebParam;  
import javax.jws.WebService;  

@WebService  
public interface HelloWorld {  
    @WebMethod  
    String sayHello(@WebParam(name="username") String username);  
}  

这里需注意,接口类和实现类,需在实现类的注解上注明targetNamespace =”http://cxf.wongya.person/”值为endpointInterface的包路径反过来写
当然如果你的接口类和实现类同级,或者不这么骚,只有一个实现类的话,是不需要这一步的。

package person.wongya.cxf.impl;

import person.wongya.cxf.HelloWorld;

import javax.jws.WebService;

@WebService(endpointInterface = "person.wongya.cxf.HelloWorld", serviceName = "helloWorld", targetNamespace = "http://cxf.wongya.person/")
public class HelloWorldImpl implements HelloWorld {

    public String sayHello(String username) {
        System.out.println("sayHello() is called");
        return username + " helloWorld";
    }
}  

3、新建aoache-cxf.xml,在spring-mvc文件中开启

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/tx
 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd
 http://cxf.apache.org/jaxws
 http://cxf.apache.org/schemas/jaxws.xsd">

    <!--服务端发布的webservice
        在spring中使用jaxws:endpoint元素来暴露Web Service
        id:指在spring配置的bean的ID
        Implementor:指明具体的实现类
        Address:指明这个web service的相对地址 -->
    <jaxws:endpoint id="helloWorld" implementor="person.wongya.cxf.impl.HelloWorldImpl"
                    address="/HelloWorld"/>
</beans>

spring-mvc中的配置为

<import resource="classpath:apache-cxf.xml"/>

4、在web.xml添加servlet

    <!--配置apche cxf Servlet  -->
    <!-- 配置cxf的核心控制器 -->
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- 所有来自/webservice/*的请求交给cxf处理 -->
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
    </servlet-mapping>

5、新建客户端

package person.wongya.cxf.test;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;


/**
 * Created by Wongy on 2018/1/29.
 */
public class test {
    public static void main(String[] args) {
        JaxWsDynamicClientFactory jaxWsDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
        Client client = jaxWsDynamicClientFactory.createClient("http://127.0.0.1:8090/webservice/HelloWorld?wsdl");
        try {
            Object[] a = client.invoke("sayHello", "Wongya");
            System.err.println("test.main , 18 : " + a[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6、发布Cxf
运行项目,即发布Cxf,访问http://127.0.0.1:8090/webservice/HelloWorld?wsdl,如图即成功
Cxf
7、最后,运行客户端即可,我的记忆只有两天-。-

猜你喜欢

转载自blog.csdn.net/weixin_38204723/article/details/79217454