【WebService】通过CXF发布WebService第一例

来源:互联网 发布:教育大数据app 编辑:程序博客网 时间:2024/05/09 05:34

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();}}


原创粉丝点击