CXF的理论知识就不重复了。
1、在OSGI bundle中发布,所以首先创建OSGI工程,并加入CXF所需要的库文件,
?????? MANIFEST.MF文件内容:
? ? ? ?
[plain]
view plain
copy
print
?
- Manifest-Version:?1.0??
- Bundle-ManifestVersion:?2??
- Bundle-Name:?MySimpleWebServiceCXF01??
- Bundle-SymbolicName:?MySimpleWebServiceCXF01??
- Bundle-Version:?1.0.0.qualifier??
- Bundle-Activator:?mysimplewebservicecxf01.Activator??
- Bundle-ActivationPolicy:?lazy??
- Bundle-RequiredExecutionEnvironment:?JavaSE-1.6??
- Import-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??
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MySimpleWebServiceCXF01
Bundle-SymbolicName: MySimpleWebServiceCXF01
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: mysimplewebservicecxf01.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-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
[java]
view plain
copy
print
?
- package?mysimplewebservicecxf01.user.api;??
- ??
- import?java.util.List;??
- ??
- import?javax.jws.WebService;??
- ??
- import?mysimplewebservicecxf01.user.api.model.User;??
- ??
- @WebService??
- public?interface?IUserManager?{??
- ????int?addUser(String?name);??
- ????List<User>?queryUsers();??
- ????User?queryUser(int?userId);??
- ????boolean?deleteUser(int?userId);??
- }??
package mysimplewebservicecxf01.user.api;
import java.util.List;
import javax.jws.WebService;
import mysimplewebservicecxf01.user.api.model.User;
@WebService
public interface IUserManager {
int addUser(String name);
List<User> queryUsers();
User queryUser(int userId);
boolean deleteUser(int userId);
}
???? Java Bean对象User.java
[java]
view plain
copy
print
?
- 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;??
- }??
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
[java]
view plain
copy
print
?
- 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;??
- ????@Override??
- ????public?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;??
- ????}??
- ??
- ????@Override??
- ????public?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;??
- ????}??
- ??
- ????@Override??
- ????public?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;??
- ????}??
- ??
- ????@Override??
- ????public?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,?name:"+user.getName());??
- ????????}??
- ????????return?true;??
- ????}??
- }??
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;
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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,name:"+user.getName());
}
return true;
}
}
3、实现一个WebService服务发布的工具类,用来发布WebService服务
[java]
view plain
copy
print
?
- 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){??
- ??????????
- ????????JaxWsServerFactoryBean?factory?=?new?JaxWsServerFactoryBean();??
- ??????????
- ????????factory.setServiceClass(clazz);??
- ??????????
- ????????factory.setAddress("http://localhost:9000/"?+clazz.getSimpleName());??
- ????????factory.setServiceBean(implObj);??
- ??
- ??
- ???????factory.getInInterceptors().add(new?SampleInterceptorService());??
- ??????????
- ????????factory.create();??
- ????}??
- }??
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 将服务发布出来
[java]
view plain
copy
print
?
- 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 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;
}
}
[java]
view plain
copy
print
?
- 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;??
- ??????????
- ????????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){??
- ??????????
- ????????JaxWsProxyFactoryBean?factory?=?new?JaxWsProxyFactoryBean();??
- ??????????
- ????????factory.setServiceClass(clazz);??
- ??????????
- ????????factory.setAddress("http://localhost:9000/"+clazz.getSimpleName());????
- ????????factory.getOutInterceptors().add(new?SampleInterceptorClient());??
- ????????return?factory.create();??
- ????}??
- ??
- }??