使用apache基金开发的CXF框架发布webservice非常简单方便,而且支持SOAP和REST格式的服务。
第一步:到apache官方网站上下载最新的版的CXF的框架,到目前最新的版本为2.7.7,下载地址为http://cxf.apache.org/download.html.
解压后lib目录的jar包如下图所示:
第二步:新建web项目将所有jar包复制到WEB-INF/lib目录下。然后配置web.xml文件如下:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/*-content.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
其中部分涉及到log4j的内容请参考本文的上一篇<
spring和log4j在web环境中的配置 spring3.2.5 log4j1.2.17 >的文章.
第三步:新建实体类Book,代码如下:
package edu.whu.cs.entity;
public class Book {
private String id;
private String name;
public Book(){}
public Book(String id,String name){
this.id=id;
this.name=name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后是服务接口的设计BookService,
package edu.whu.cs.service;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import edu.whu.cs.entity.Book;
@WebService(name = "BookService", targetNamespace = "http://service.cs.whu.edu/")
public interface BookService {
@WebMethod(operationName = "getBook", action = "urn:GetBook")
public Book getBook(@WebParam(name = "id") String id);
@WebMethod(operationName = "findBook", action = "urn:FindBook")
public List<Book> findBook();
@WebMethod(operationName = "insert", action = "urn:Insert")
public boolean insert(@WebParam(name = "book") Book book);
@WebMethod(operationName = "remove", action = "urn:Remove")
public boolean remove(@WebParam(name = "id")String id);
}
最后是接口的实现类:
package edu.whu.cs.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import edu.whu.cs.entity.Book;
import edu.whu.cs.service.BookService;
@WebService(targetNamespace = "http://impl.service.cs.whu.edu/", portName = "BookServiceImplPort", serviceName = "BookServiceImplService")
public class BookServiceImpl implements BookService{
List<Book> books=new ArrayList<Book>();
public BookServiceImpl(){
books.add(new Book("1","java"));
books.add(new Book("2","C"));
books.add(new Book("3","C++"));
books.add(new Book("4","C#"));
}
@Override
public Book getBook(String id) {
return books.get(Integer.parseInt(id)-1);
}
@Override
public List<Book> findBook() {
return books;
}
@Override
public boolean insert(Book book) {
books.add(book);
return true;
}
@Override
public boolean remove(String id) {
books.remove(Integer.parseInt(id)-1);
return true;
}
}
将项目发布到服务器中,在浏览器中输入http://127.0.0.1:8080/你的项目名称/services/即可看到相关服务.可以用SoapUI对发布的服务进行测试.
TIP: @WebService 、@WebMethod、@WebParam等注解的生成可以用Annotation Properties面板辅助生成.