CXF入门

CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。

它提供了JAX-WS的全面支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用,同时它能与spring进行完美结合。


简单实例

创建接口:

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(ProjectAdapter.class)
public interface Project {
public String getProjectName();
public void setProjectName(String projectName);
public String getProjectId();
public void setProjectId(String projectId);
public String getProjectDescribe();
public void setProjectDescribe(String projectDesc);
}

实现接口:

import javax.xml.bind.annotation.XmlType;
@XmlType(name="Project")
public class ProjectImpl implements Project {
private String projectId;
private String projectName;
private String projectDescribe;

public ProjectImpl() {}

public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectDescribe() {
return projectDescribe;
}
public void setProjectDescribe(String projectDescribe) {
this.projectDescribe = projectDescribe;
}
}

业务处理:

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

//该处用到注解
@WebService
public interface ProjectManager {
public String greeting();
public String greetingWithParameter(@WebParam(name="greet")String greet);
public String getProjectName();
public String getProjectNameById(String projectID);
public void updataProjectName(@WebParam(name="projectName")String projectName);
public void setDefaultProject(Project project);
public void registerProject(Project project);
public void removeProject(String id);
public Project getDefaultProject();
public void getAllProject();
}

实现:

import java.util.HashMap;
import java.util.Map;
import javax.jws.WebService;
@WebService(
serviceName="ProjectManager",
portName="ProjectManagerPort",
targetNamespace="http://webservices/cxf.demo/",
endpointInterface="demo.cxf.webservices.ProjectManager"
)
public class ProjectManagerImpl implements ProjectManager {

private Project project;
private Map<String, Project> projectMap;

public ProjectManagerImpl() {
System.out.println("--------构造方法---------");
initProject();
}
private void initProject() {
System.out.println("开始初始化");
project = new ProjectImpl();
project.setProjectId("default projectId");
project.setProjectName("default projectName");
project.setProjectDescribe("default projectDesc");
projectMap = new HashMap<String, Project>();
Project project2 = new ProjectImpl();
project2.setProjectId("projectId2");
project2.setProjectName("projectName2");
project2.setProjectDescribe("projectDesc2");

projectMap.put(project.getProjectId(), project);
projectMap.put(project2.getProjectId(), project2);
}
public String greeting() {
System.out.println("---------greeting--------");
return "Hello,this is ProjectManager.";
}
public String greetingWithParameter(String greet) {
System.out.println("--------greetingWithParameter---------");
return "Hello,"+greet+"this is ProjectManager.";
}
public String getProjectName() {
System.out.println("---------getProjectName--------");
return project.getProjectName();
}
public String getProjectNameById(String projectID) {
System.out.println("---------getProjectNameById--------");
if (!projectMap.containsKey(projectID)) {
return null;
}
return projectMap.get(projectID).getProjectName();
}
public void updataProjectName(String projectName) {
System.out.println("---------updataProjectName--------");
project.setProjectName(projectName);
}
public void setDefaultProject(Project project) {
System.out.println("---------setDefaultProject--------");
if (project == null) {
return;
}
this.project = project;
}
public Project getDefaultProject(){
System.out.println("---------getDefaultProject--------");
return project;
}
public void registerProject(Project project) {
System.out.println("---------registerProject--------");
if (projectMap.containsKey(project.getProjectId())) {
return;
}
projectMap.put(project.getProjectId(), project);
}
public void removeProject(String id) {
System.out.println("---------removeProject--------");
if (!projectMap.containsKey(id)) {
return;
}
projectMap.remove(id);
}
public void getAllProject() {
System.out.println("--------getAllProject---------");
for (Map.Entry<String, Project> crrentProject : projectMap.entrySet()) {
System.out.println(" "+crrentProject.getKey()+":"+crrentProject.getValue().getProjectName());
}
}
public Project getProjectById(String projectId){
System.out.println("----------getProjectById----------");
if (!projectMap.containsKey(projectId)) {
return null;
}
return projectMap.get(projectId);
}
}

服务端:

public class Server {


public Server() {
System.out.println("Starting Server");
ProjectManager projectManager = new ProjectManagerImpl();
String endPointAddress = "http://localhost:9000/ProjectManager";
Endpoint.publish(endPointAddress, projectManager);
}

public static void main(String[] args) throws Exception {
new Server();
System.out.println("Server ready...");
Thread.sleep(30*6*1000);
System.out.println("Server exiting....");
System.exit(0);
}
}

客户端:

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import demo.cxf.webservices.Project;
import demo.cxf.webservices.ProjectImpl;
import demo.cxf.webservices.ProjectManager;
public class Client {
private static final QName SERVICE_NAME = new QName("http://webservices.cxf.demo/", "ProjectManager");
private static final QName PORT_NAME = new QName("http://webservices.cxf.demo/", "ProjectManagerPort");
private static final String WSDL_LOCATION = "http://localhost:9000/ProjectManager?wsdl";
public Client() {
}
public static void main(String[] args) throws Exception {
System.out.println("Starting Client....");
URL wsdlUrl = new URL(WSDL_LOCATION);
Service service = Service.create(wsdlUrl,SERVICE_NAME);
ProjectManager projectManager = service.getPort(PORT_NAME,ProjectManager.class);
System.out.println(projectManager.getProjectName());
Project project = new ProjectImpl();
project.setProjectName("new projectName");
projectManager.setDefaultProject(project);
Project newProject = projectManager.getDefaultProject();
System.out.println("NewProjectId is "+newProject.getProjectId()+".NewProjectName is "+newProject.getProjectName());
projectManager.registerProject(project);
System.out.println(projectManager.getProjectNameById("Default ProjectId"));
System.out.println(projectManager.getProjectNameById("new ProjectId"));
System.exit(0);
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值