(三)WebService之CXF釋出Web服務
阿新 • • 發佈:2018-12-30
1.引言
Apache CXF 是一個開源的 Services 框架,利用CXF可以釋出SOAP型別的服務,也可以釋出rest型別的服務。CXF還可以和Spring無縫整合。
2.CXF釋出服務
- 首先引用cxf的jar包
- 利用CXF釋出沒有介面的SOAP服務
package com.skd.service;
import javax.jws.WebService;
@WebService
public class Hello {
public String sayHello(String name){
System.out.println("sayHi called..." );
return " hello " + name;
}
}
package com.skd.soap;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.skd.service.Hello;
public class JaxWsBean {
/**
* 使用JaxWsServerFactoryBean釋出CXF的WebService服務
*/
public static void main(String[] args) {
//使用JaxWsServerFactoryBean釋出服務,需要在類上加入@WebService註解,
//如果不加,當前類中的方法都不能被髮布為web方法
JaxWsServerFactoryBean bean = new JaxWsServerFactoryBean();
//釋出服務的地址
bean.setAddress("http://localhost:8080/hello");
//因為沒有介面,所以
bean.setServiceClass(Hello.class);
//釋出服務的實現類
bean.setServiceBean(new Hello());
//釋出服務
bean.create();
}
}
介面:
package com.skd.service;
@WebService
public interface IHi {
public String sayHi(String name);
}
實現類:
package com.skd.service;
public class HiImpl implements IHi {
@Override
public String sayHi(String name) {
return name+"Hi";
}
}
釋出服務:
package com.skd.soap.impl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.skd.service.Hello;
import com.skd.service.HiImpl;
import com.skd.service.IHi;
public class JaxWsBean {
/**
* 使用JaxWsServerFactoryBean釋出CXF的WebService服務
*/
public static void main(String[] args) {
//使用JaxWsServerFactoryBean釋出服務,需要在類上加入@WebService註解,
//如果不加,當前類中的方法都不能被髮布為web方法
JaxWsServerFactoryBean bean = new JaxWsServerFactoryBean();
//釋出服務的地址
bean.setAddress("http://localhost:8080/hello");
//介面型別
bean.setServiceClass(IHi.class);
//介面的實現類
bean.setServiceBean(new HiImpl());
//釋出服務
bean.create();
}
}
建立Person類(必須實現Serializable介面)
package com.skd.rest.service;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
介面:
package com.skd.rest.service;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Produces( { MediaType.APPLICATION_JSON })
public interface IPerson {
@GET//當前方法可以通過GET方式訪問
@Path("hello/{name}")//當前方法的訪問路徑
public Person getPerson(@PathParam("name") String name);//將id獲得賦予方法
}
實現類:
package com.skd.rest.service;
public class PersonImpl implements IPerson {
@Override
public Person getPerson(String name) {
Person p=new Person();
p.setName(name);
p.setAge(11);
return p;
}
}
釋出服務(注意必須新增序列化類此處用的是JacksonJsonProvider
):
package com.skd.rest.server;
import java.util.ArrayList;
import java.util.List;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import com.skd.rest.service.PersonImpl;
public class JaxWsBean {
/**
* 使用JaxWsServerFactoryBean釋出CXF的WebService服務
*/
public static void main(String[] args) {
//注意釋出rest服務的類為JAXRSServerFactoryBean
JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean();
//釋出服務的地址
bean.setAddress("http://localhost:8080");
bean.setResourceClasses(PersonImpl.class);
List<Object> list=new ArrayList<Object>();
//必須新增,用於序列化person類為json物件
list.add(new JacksonJsonProvider());
bean.setProviders(list);
//釋出服務
bean.create();
System.out.println("web服務");
}
}