CXF实战(一)
Apache CXF提供了用于方便地构建和开发WebService的可靠基础架构。它允许创建高性能和可扩展的服务,可以部署在Tomcat和基于Spring的轻量级容器中,也可以部署在更高级的服务器上,例如Jboss、WebSphere或WebLogic。
下面用CXF创建独立发布的WebService。 服务端在Eclipse中创建maven项目,配置文件pom.xml中引入CXF,具体配置如下 <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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rvho</groupId>
<artifactId>cxfstandalone</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- 文件拷贝编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 输出编码 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- CXF版本 -->
<cxf.version>3.1.1</cxf.version>
</properties>
<dependencies>
<!-- CXF -->
<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>
<!-- 如果CXF不集成到Web服务器中,必须添加该引用 -->
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- End CXF -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<!-- 指定source和target的jdk版本是1.8 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
服务接口HelloWS,该接口发布welcome方法。 package com.rvho.cxfstandalone.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(
name = "HelloWS",targetNamespace = "http://www.tmp.com/services/hello"
)
public interface HelloWS {
@WebMethod
String welcome(@WebParam(name = "name") String name);
}
服务接口HelloWS实现类HelloWSImpl。 package com.rvho.cxfstandalone.ws.impl;
import javax.jws.WebService;
import com.rvho.cxfstandalone.ws.HelloWS;
@WebService(
endpointInterface = "com.rvho.cxfserver.ws.HelloWS",portName = "HelloWSPort",serviceName = "HelloWSService",targetNamespace = "http://www.tmp.com/services/hello"
)
public class HelloWSImpl implements HelloWS {
@Override
public String welcome(String name) {
return "Welcome " + name;
}
}
发布服务 package com.rvho.cxfstandalone;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.rvho.cxfstandalone.ws.HelloWS;
import com.rvho.cxfstandalone.ws.impl.HelloWSImpl;
public class CxfServer {
public static void main(String[] args) {
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloWS.class);
//服务发布的地址
factory.setAddress("http://localhost:8999/services/hello");
factory.setServiceBean(new HelloWSImpl());
factory.create();
}
}
在浏览器中输入服务发布地址http://localhost:8999/services/hello?wsdl如果看到如下内容,表示服务发布成功。 客户端用wsimport或者wsdl2java把服务端发布的服务生成java对象。 "D:Program FilesJavajdk1.8.0_25binwsimport.exe" -encoding utf-8 -d D:devwsdlcxfserverwsimportcompile -s D:devwsdlcxfserverwsimportsrc -p com.rvho.cxfclient.wsdl.wsimport.hello http://localhost:8999/services/hello?wsdl
wsdl2java是cxf提供的wsdl转java对象工具,在cxf的bin目录下可以找到。用法是 "D:devlibraryjavacxfapache-cxf-3.1.0binwsdl2java" -p com.rvho.cxfclient.wsdl.cxf.hello -d D:devwsdlcxfservercxfsrc http://localhost:8999/services/hello?wsdl
上面命令的路径是我本机路径,有可能不一样。 //jaxws调用
//URL不是必须的,除非服务的地址有改变
URL wsdlUrl = new URL("http://localhost:8999/services/hello?wsdl");
HelloWSService helloWSS = new HelloWSService(wsdlUrl);
HelloWS helloWS = helloWSS.getHelloWSPort();
String welcome = helloWS.welcome("accountwcx@qq.com");
System.out.println(welcome);
/* cxf调用 首先在客户端添加cxf <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.1.1</version> </dependency> */
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWS.class);
factory.setAddress("http://localhost:8999/services/hello");
HelloWS helloWS = factory.create(HelloWS.class);
String welcome = helloWS.welcome("accountwcx@qq.com");
System.out.println(welcome);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |