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,如图即成功
7、最后,运行客户端即可,我的记忆只有两天-。-