Apache CXF 第一篇:HelloWorld

1、开发环境:JDK 1.6,Spring 2.0,LZ使用Apache CXF 2.6.2 版本。因为使用Spring 2.0故不能使用CXF with Spring的方式配置WebServices服务,故采用传统的Servlet方式。

2、所需CXFJAR,在CXF下载包中均存在


<!-- WebServices Apache CXF -->
<dependency>
<groupId>cxf</groupId>
<artifactId>cxf</artifactId>
<version>2.6.2</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>neethi</artifactId>
<version>3.0.2</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.6</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.5</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>wss4j</artifactId>
<version>1.6.7</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.0.3</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>xml-resolver</artifactId>
<version>1.2</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>xmlsec</artifactId>
<version>1.5.2</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.5.0</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>saaj-api</artifactId>
<version>1.3.4</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3.18</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>geronimo-activation_1.1_spec</artifactId>
<version>1.1</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>geronimo-annotation_1.0_spec</artifactId>
<version>1.1.1</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
<version>1.7.1</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>
<dependency>
<groupId>cxf</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.5</version>
<type>jar</type>
<properties>
<war.bundle>true</war.bundle>
</properties>
</dependency>


3、服务端接口:


package com.vtradex.training.server.cxf.helloworld;

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

import com.vtradex.training.server.cxf.WsConstants;

/**
*
* @author <a href="mailto:brofe.pan@gmail.com">潘宁波</a>
* @version $Revision: v1.0 $Date: 2012-8-31 $
*/
@WebService(name = "HelloWorldService", targetNamespace = WsConstants.NS)
public interface HelloWorldService {

String say(@WebParam(name="message") String message);

}



4、服务端实现类:


package com.vtradex.training.server.cxf.helloworld.impl;

import javax.jws.WebService;

import com.vtradex.training.server.cxf.WsConstants;
import com.vtradex.training.server.cxf.helloworld.HelloWorldService;

/**
* WebService服务端实现类.
*
* serviceName与portName属性指明WSDL中的名称, endpointInterface属性指向Interface定义类.
*
* @author <a href="mailto:brofe.pan@gmail.com">潘宁波</a>
* @version $Revision: v1.0 $Date: 2012-8-31 $
*/
@WebService(serviceName = "HelloWorldService", portName = "HelloWorldServicePort", endpointInterface = "com.vtradex.training.server.cxf.helloworld.HelloWorldService", targetNamespace = WsConstants.NS)
public class HelloWorldServiceImpl implements HelloWorldService {

@Override
public String say(String message) {
return "Hello, " + message;
}

}



5、常量定义类:


package com.vtradex.training.server.cxf;

/**
* WebService常量定义.
*
* @author <a href="mailto:brofe.pan@gmail.com">潘宁波</a>
* @version $Revision: v1.0 $Date: 2012-8-31 $
*/
public class WsConstants {

/**项目内统一的NameSpace定义, for SOAP.*/
public static final String NS = "http://thorn4.training.vtradex.com";

/**项目内统一的XML charset定义, for REST*/
public static final String CHARSET = ";charset=UTF-8";
}



6、发布服务的 Servlet


package com.vtradex.training.server.cxf.helloworld;

import javax.servlet.ServletConfig;
import javax.xml.ws.Endpoint;

import org.apache.cxf.transport.servlet.CXFNonSpringServlet;

import com.vtradex.training.server.cxf.helloworld.impl.HelloWorldServiceImpl;

/**
*
*
* @author <a href="mailto:brofe.pan@gmail.com">潘宁波</a>
* @version $Revision: v1.0 $Date: 2012-9-1 $
*/
public class WsServlet extends CXFNonSpringServlet {

private static final long serialVersionUID = 1L;

@Override
protected void loadBus(ServletConfig sc) {
super.loadBus(sc);

System.out.println("Starting CXF Web Services... HelloWorldServices");

//: http://localhost:8088/training/ws/helloWorldService?wsdl
Endpoint.publish("/helloWorldService", new HelloWorldServiceImpl());
}
}



7、web.xml


<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>com.vtradex.training.server.cxf.helloworld.WsServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>


8、启动Web服务,在浏览器中即可查看WSDL

9、CXF 客户端调用:


package com.vtradex.training.server.cxf.helloworld;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

/**
*
*
* @author <a href="mailto:brofe.pan@gmail.com">潘宁波</a>
* @version $Revision: v1.0 $Date: 2012-9-1 $
*/
public class WsClient {
public static void main(String[] args) {

/**
* 这种方式要求客户端必须依赖服务端
*/
// JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();
// bean.setServiceClass(HelloWorldService.class);
// bean.setAddress("http://localhost:8088/training/ws/helloWorldService");
// HelloWorldService helloWorldService = (HelloWorldService)bean.create();
// String result = helloWorldService.say("Brofe");
// System.out.println(result);

/**
* 通过WSDL调用
*/
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:8088/training/ws/helloWorldService?wsdl");
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
Object[] result;
try {
result = client.invoke("say", "brofe");
System.out.println(result[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值