cxf开发webservice
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用cxf开发webservice
Apache CXF是一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。
CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。
在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP 或JMS)进行访问。
CXF同样支持多种model 如:JAX-WS,JBI,SCA和CORBA service。
CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA,Servlet和J2EE容器。
1.准备工作
cxf是apache的一个正式的开源项目,目前已经更新到2.6.2版本,从下面的地址可以下载最新的版本。
/
这里我用2.6.1的版本就行讲解。
需要的jar包有:
cxf-2.6.1.jar
cxf-manifest.jar
cxf-services-sts-core-2.6.1.jar
cxf-services-wsn-api-2.6.1.jar
cxf-services-wsn-core-2.6.1.jar
cxf-xjc-boolean-2.6.0.jar
cxf-xjc-bug671-2.6.0.jar
cxf-xjc-dv-2.6.0.jar
cxf-xjc-runtime-2.6.0.jar
cxf-xjc-ts-2.6.0.jar
2.服务端配置与开发
2.1.web.xml配置
在<context-param>里边要加上lasspath*:applicationContext-cxf.xml一项的
值:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext.xml,
classpath*:applicationContext-cxf.xml,
classpath*:applicationContext-beans.xml,
classpath*:applicationContext-service.xml,
classpath*:applicationContext-beans-*.xml,
classpath*:applicationContext-service-*.xml
</param-value>
</context-param>
同时还要在下面加上如下的servlet配置:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-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>/service/*</url-pattern>
</servlet-mapping>
2.2.applicationContext-cxf.xml文件配置
在src目录下创建一个applicationContext-cxf.xml文件,里边的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:context="/schema/context"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd
/schema/context
/schema/context/spring-context-3.1.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<context:component-scan base-package="pare.webservice" />
<bean id="webServicesAgent"
class="org.apache.cxf.spring.remoting.Jsr181HandlerMapping">
<property name="urlPrefix"><value>/</value></property>
</bean>
</beans>
其中<context:component-scan base-package="com.webservice.cxf" />是配置存放webservice服务的java文件的包路径。
cxf会在这个包下面去扫描webservice 服务。
2.3.代码编写
先在com.webservice.cxf包下写一个接口TestCXFWebService.java,代码如下:
package com.webservice.cxf;
import javax.jws.WebService;
@WebService
public interface TestCXFWebService
{
String sayHello(String path);
}
然后写接口的实现类TestCXFWebServiceImpl.java,代码如下:
package com.webservice.cxf;
import javax.jws.WebService;
import ponent;
@Component
@WebService(serviceName = "testCxfService", endpointInterface = "com.webservice.cxf.TestCXFWebService")
public class TestCXFWebServiceImpl implements TestCXFWebService
{
public String sayHello(String name)
{
String reply = "hello,my friend " + name;
return reply;
}
}
好了,一个简单的webservice服务写好了。
启动tomcat服务,那么testCxfService服务就发布成功了。
3.客户端代码
写一个Junit的客户端测试代码,来测试上面发布的webservice服务,测试代码如下:
package pare.webservice;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
import org.junit.Test;
public class TestCxfClient
{
@Test
public void testSayHello() throws Exception
{
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client =
dcf.createClient("http://localhost//service/testCxfService?wsdl");
Object[] reply = client.invoke("sayHello", new Object[]{"harsh"});
if(reply!=null && reply.length>0)
{
System.out.println(reply[0]);
}
}
}
运行测试代码,就可以得到调用服务返回的结果如下:
hello,my friend harsh
4.结束语
从上面的例子代码可以看出来,用这种方式写web service代码简单方便,客户端调用web service的代码也很简单。