OSGI通过CXF发布WebService第一例
来源:互联网 发布:编程一小时 编辑:程序博客网 时间:2024/05/30 19:33
CXF的理论知识就不重复了。
- 发布服务
1、在OSGI bundle中发布,所以首先创建OSGI工程,并加入CXF所需要的库文件,
MANIFEST.MF文件内容:
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: MySimpleWebServiceCXF01Bundle-SymbolicName: MySimpleWebServiceCXF01Bundle-Version: 1.0.0.qualifierBundle-Activator: mysimplewebservicecxf01.ActivatorBundle-ActivationPolicy: lazyBundle-RequiredExecutionEnvironment: JavaSE-1.6Import-Package: org.apache.commons.logging;version="1.0.4", org.osgi.framework;version="1.3.0"Bundle-ClassPath: lib/geronimo-activation_1.1_spec-1.1.jar, lib/geronimo-annotation_1.0_spec-1.1.1.jar, lib/geronimo-javamail_1.4_spec-1.7.1.jar, lib/geronimo-jaxws_2.2_spec-1.1.jar, lib/geronimo-servlet_2.5_spec-1.1.2.jar, lib/geronimo-stax-api_1.0_spec-1.0.1.jar, lib/geronimo-ws-metadata_2.0_spec-1.1.3.jar, lib/jaxb-api-2.2.3.jar, lib/jaxb-impl-2.2.4-1.jar, lib/jetty-util-7.5.4.v20111024.jar, lib/neethi-3.0.1.jar, lib/saaj-api-1.3.4.jar, lib/saaj-impl-1.3.12.jar, lib/wsdl4j-1.6.2.jar, lib/xml-resolver-1.2.jar, lib/xmlschema-core-2.0.1.jar, ., lib/cxf-2.5.2.jar, lib/org.eclipse.equinox.http.jetty_2.0.0.v20100503.jar, lib/jetty-server-7.5.4.v20111024.jar, lib/jetty-http-7.5.4.v20111024.jar, lib/jetty-continuation-7.5.4.v20111024.jar, lib/jetty-io-7.5.4.v20111024.jar, lib/jetty-security-7.5.4.v20111024.jar, lib/stax2-api-3.1.1.jar, lib/wstx-asl-3.2.0.jar
2、声明一个WebService服务接口并实现
WebService接口文件 IUserManager.java
package mysimplewebservicecxf01.user.api;import java.util.List;import javax.jws.WebService;import mysimplewebservicecxf01.user.api.model.User;@WebServicepublic interface IUserManager { int addUser(String name); List<User> queryUsers(); User queryUser(int userId); boolean deleteUser(int userId);}Java Bean对象User.java
package mysimplewebservicecxf01.user.api.model;public class User {public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}private int id;private String name;}
WebService的实现 UserManager.java
package mysimplewebservicecxf01.user.impl;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import mysimplewebservicecxf01.user.api.IUserManager;import mysimplewebservicecxf01.user.api.model.User;public class UserManager implements IUserManager {Map<Integer, User> userMap = new HashMap<Integer, User>();int newID = 0;@Overridepublic int addUser(String name) {int newId = this.newID++;System.out.println("add a user begin,userId:"+newId + ",name:"+name);User user = new User();user.setId(newId);user.setName(name);userMap.put(newId, user);System.out.println("add a user ok");return newId;}@Overridepublic List<User> queryUsers() {System.out.println("query all users begin");List<User> userList = new ArrayList<User>();for(User user:userMap.values()){userList.add(user);}System.out.println("query all users end,count:"+userList.size());return userList;}@Overridepublic User queryUser(int userId) {System.out.println("query a user begin, userId:"+userId);if(userMap.containsKey(userId)){User user = userMap.get(userId);System.out.println("query a user begin, userId:"+userId+", name:"+user.getName());return user;}System.out.println("query a user end,no the user("+userId+")");return null;}@Overridepublic boolean deleteUser(int userId) {System.out.println("delete a user begin, userId:"+userId);if(userMap.containsKey(userId)){User user = userMap.remove(userId);System.out.println("delete a user end, userId:"+userId+", name:"+user.getName());}return true;}}
3、实现一个WebService服务发布的工具类,用来发布WebService服务
package mysimplewebservicecxf01.publish;import java.util.ArrayList;import java.util.List;import mysimplewebservicecxf01.service.interceptor.SampleInterceptorService;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class ServiceManager {private static final ServiceManager instance = new ServiceManager();List<String> serviceList = new ArrayList<String>();public static ServiceManager getInstance(){return instance;}private ServiceManager(){}public void publish(Class<?> clazz, Object implObj){//创建WebService服务工厂 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //注册WebService接口 factory.setServiceClass(clazz); //发布接口 factory.setAddress("http://localhost:9000/" +clazz.getSimpleName()); factory.setServiceBean(implObj);// factory.getInInterceptors().add(new LoggingInInterceptor()); // factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.getInInterceptors().add(new SampleInterceptorService()); //创建WebService factory.create();}}
4、最后在Activator的start函数中,使用ServiceManager 将服务发布出来
package mysimplewebservicecxf01;import mysimplewebservicecxf01.publish.ServiceManager;import mysimplewebservicecxf01.user.api.IUserManager;import mysimplewebservicecxf01.user.impl.UserManager;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;public class Activator implements BundleActivator {private static BundleContext context;public void start(BundleContext bundleContext) throws Exception {Activator.context = bundleContext;ServiceManager.getInstance().publish(IUserManager.class, new UserManager()); }public void stop(BundleContext bundleContext) throws Exception {Activator.context = null;}}
- 客户端调用服务器
package mysimplewebservicecxf01;import java.util.List;import mysimplewebservicecxf01.client.interceptor.SampleInterceptorClient;import mysimplewebservicecxf01.user.api.IUserManager;import mysimplewebservicecxf01.user.api.model.User;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;public class Client {public static void main(String[] args) { IUserManager userMgr = (IUserManager) getService(IUserManager.class); List<User> userList = userMgr.queryUsers(); int count = 0; /*还不清楚为什么,当返回的List为空时,客户端收到的却是null*/ if(null != userList){ count = userList.size(); } System.out.println("Count:"+count); int userId01 = userMgr.addUser("User01"); userList = userMgr.queryUsers(); count = userList.size(); System.out.println("Count:"+count); int userId02 = userMgr.addUser("User02"); userList = userMgr.queryUsers(); count = userList.size(); System.out.println("Count:"+count); userMgr.deleteUser(userId02); userList = userMgr.queryUsers(); count = userList.size(); System.out.println("Count:"+count);}public static Object getService(Class<?> clazz){//创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //注册WebService接口 factory.setServiceClass(clazz); //设置WebService地址 factory.setAddress("http://localhost:9000/"+clazz.getSimpleName()); factory.getOutInterceptors().add(new SampleInterceptorClient()); return factory.create();}}
- OSGI通过CXF发布WebService第一例
- 【WebService】通过CXF发布WebService第一例
- 【WebService】通过CXF发布WebService第一例
- 通过CXF发布WebService第一例
- osgi webservice cxf
- CXF整合Spring通过tomcat发布webservice
- CXF学习笔记(3)-HelloWorld!-通过servlet发布webservice
- Tomcat下通过CXF实现不用注解发布WebService
- Tomcat下通过CXF实现不用注解发布WebService
- CXF学习笔记(3)-HelloWorld!-通过servlet发布webservice .
- 通过apache-cxf发布webService项目(服务器与客户端)
- cxf-dosgi 发布webservice
- cxf+spring发布webservice
- cxf发布webservice
- cxf+spring发布webservice
- CXF发布webservice入门
- Mule发布webservice--cxf
- CXF方式发布WebService
- Mysql海量数据存储和解决方案之一—分布式DB方案
- 波特率详解介绍的
- MySQL导入sql 文件的5大步骤
- Android OpenGL ES 开发教程(11):绘制三角形Triangle
- Linux查看网络流量
- OSGI通过CXF发布WebService第一例
- 内部类、迭代器、工厂、基本应用
- C++
- 多线程知识点整理
- Android OpenGL ES 开发教程(12):绘制一个20面体
- MOSS 2007 部署图示指南 .
- visual studio 2008 快捷键 (Style:Visual C# 2005)(zz.IS2120@BG57IV3)
- MySQL表复制
- LFS编译完后经验