您的位置:首页 > 编程语言 > Java开发

使用cfx与springMVC集成发布与调用webservice

2017-12-01 00:00 706 查看
摘要: 根据官方版本提供的标准例子

版本:apache-cxf-3.2.1
JDK版本:1.8.0_25
注:此版本最低支持1.8 , JDK7 请下载 CXF 3.1.14 版本


必须引用的jar包列表



对应maven 依赖:
<!--apache cxf start-->
<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-wsdl</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.2.2</version>
</dependency>
<!--apache cxf end-->


修改web.xml文件,引入代码片段
<!-- 加入CXF支持 webservice start-->
<servlet>
<description>Apache CXF Endpoint</description>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- 加入CXF支持 webservice end--


创建接口与实现类
HelloWord.java
package com.quickmap.common;

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

// START SNIPPET: service

@WebService
public interface HelloWorld {

String sayHi(@WebParam(name="text")String text);// @WebParam 里面的name是请求时候的参数名
}
// END SNIPPET: service


HelloWorldImpl.java

// START SNIPPET: service
package com.quickmap.common;

import javax.jws.WebService;

@WebService(endpointInterface = "com.quickmap.common.HelloWorld",
serviceName = "HelloWorld")
public class HelloWorldImpl implements HelloWorld {

public String sayHi(String text) {
System.out.println("sayHi called");
return "Hello " + text;
}

}
// END SNIPPET: service


创建注入配置文件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:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.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">
<jaxws:server id="jaxwsService" serviceClass="com.quickmap.common.HelloWorld" address="/hello_world">
<jaxws:serviceBean>
<bean class="com.quickmap.common.HelloWorldImpl"/>
</jaxws:serviceBean>
</jaxws:server>
</beans>
该文件保存到classpath根目录,如图



然后spring-context.xml引入
<import resource="classpath:cxf-servlet.xml" />



或直接把该配置文件放到WEB-INF根目录下和web.xml放到同一目录.

启动tomcat
看到以下输出信息,说明发布成功



在浏览器访问该地址 http://localhost:8080/nkydsj/services/hello_world?wsdl


客户端调用代码 Client.java运行后
package com.quickmap.common;

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

public final class Client {

public static void main(String args[]) throws Exception {

JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = clientFactory.createClient("http://localhost:8080/nkydsj/services/hello_world?wsdl");
Object[] result = new Object[0];
try {
result = client.invoke("sayHi", ",webservice调用成功啦!!!");
System.out.println(result[0]);
} catch (Exception e) {
e.printStackTrace();
}

}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java webservice cfx