您的位置:首页 > 其它

使用CXF框架发布SOAP格式的webservice

2013-11-26 16:53 453 查看
    使用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面板辅助生成.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: