前面是基于java Application发布webservice的服务,现在我们以前看一个用Tomcat发布服务的过程。
这个WebService主要是对书的管理的小功能实现。
1、首先我们建立一个Dynamic WEB项目,看下这个项目的结构:
2、首先看下实体类:Book.java
package com.lyl.vo; public class Book { private int bookId; private String bookName; private int bookPrice; public Book() { super(); } public Book(int bookId, String bookName, int bookPrice) { super(); this.bookId = bookId; this.bookName = bookName; this.bookPrice = bookPrice; } public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookPrice() { return bookPrice; } public void setBookPrice(int bookPrice) { this.bookPrice = bookPrice; } }
3、持久层 BookDao.java
package com.lyl.dao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import com.lyl.vo.Book; public class BookDao { private Map<String,Book> bookMap=new HashMap<String,Book>(); private static BookDao bookDao; public static BookDao newStance(){ if( bookDao==null){ bookDao=new BookDao(); } return bookDao; } private BookDao(){ bookMap.put("三国演义", new Book(1,"三国演义",20)); } public void add(Book b) throws BookException{ if(bookMap.containsKey(b.getBookName())){ throw new BookException("此书已存在"); } bookMap.put(b.getBookName(), b); } public List<Book> list(){ ArrayList<Book> bookList=new ArrayList<Book>(); Set<String> bookNames=bookMap.keySet(); for(String bookName:bookNames){ bookList.add(bookMap.get(bookName)); } return bookList; } public Book findBookByName(String bookName) throws BookException{ Book book=bookMap.get(bookName); if(book==null){ throw new BookException("此书不存在"); } return book; } }
3、异常处理类:BookException.java(注意通过注解@WebFault表示是用来封装服务端程序处理过程中出现异常,以便通过消息传递到客户端,而不会在服务端报异常)
package com.lyl.dao; import javax.xml.ws.WebFault; @WebFault(faultBean="com.lyl.BookException",messageName="BookException" ,name="fault") public class BookException extends Exception { public BookException() { super(); // TODO Auto-generated constructor stub } public BookException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } public BookException(String message) { super(message); // TODO Auto-generated constructor stub } public BookException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } }
3、具体的业务操作接口,也就WebService的服务接口
IBookBiz.java
package com.lyl.service; import java.util.List; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import com.lyl.dao.BookException; import com.lyl.vo.Book; @WebService public interface IBookBiz { @WebResult public void add(@WebParam(name="book")Book b) throws BookException; @WebResult(name="bookList") public List<Book> list(); @WebResult(name="book") public Book findBookByName(@WebParam(name="bookName")String bookName) throws BookException; }
实现类: BookBizImpl .java
package com.lyl.service; import java.util.List; import javax.jws.WebService; import com.lyl.dao.BookDao; import com.lyl.dao.BookException; import com.lyl.vo.Book; @WebService(endpointInterface="com.lyl.service.IBookBiz",targetNamespace="http://service.lyl.com") public class BookBizImpl implements IBookBiz { private BookDao bookDao=BookDao.newStance(); @Override public void add(Book b) throws BookException { bookDao.add(b); } public List<Book> list() { return bookDao.list(); } public Book findBookByName(String bookName) throws BookException { return bookDao.findBookByName(bookName); } }
需要的类我们都准备好了,现在是如何利用Tomcate在启动的时候将WebService发布出去,这里我们就需要引入第三方法的jar包,我们可以到http://jax-ws.java.net/2.2.5/ 官方网上下载所有基于java API for XML 开发webservice需要的jar包,拷贝其中lib目录下的jar包到项目中的lib目录下。
因为要在Tomcat启动时候就加载,因此在web.xml文件中配置如下内容:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <listener> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> </listener> <!-- 其中是servlet-name和sun-jaxws中endpoint中的name一致 --> <servlet> <servlet-name>bookService</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>bookService</servlet-name> <url-pattern>/book</url-pattern> </servlet-mapping> </web-app>
然后再WEB-INF目了下添加一个sun-jaxws.xml文件
<?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <!-- 每个endpoint表示一个发布的webservice服务,name要和web.xml中servlet的name一致,url-pattern和servlet的url-pattern一致--> <endpoint name="bookService" implementation="com.lyl.service.BookBizImpl" url-pattern="/book"/> </endpoints>
在endpoint中的url-pattern指定了我们可以通过"http://localhost:port/projectName/url_pattern"发布的地址。
因此在启动Tomcate后输入http://localhost:8080/test_soa_web1/book?wsdl将可以看到如下WSDL文件信息:
<?xml version="1.0" encoding="UTF-8" ?> - <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b05 . --> - <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b05 . --> - <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lyl.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.lyl.com" name="BookBizImplService"> <import namespace="http://service.lyl.com/" location="http://localhost:8080/test_soa_web1/book?wsdl=1" /> - <binding xmlns:ns1="http://service.lyl.com/" name="BookBizImplPortBinding" type="ns1:IBookBiz"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <operation name="add"> <soap:operation soapAction="" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> - <fault name="BookException"> <soap:fault name="BookException" use="literal" /> </fault> </operation> - <operation name="list"> <soap:operation soapAction="" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="findBookByName"> <soap:operation soapAction="" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> - <fault name="BookException"> <soap:fault name="BookException" use="literal" /> </fault> </operation> </binding> - <service name="BookBizImplService"> - <port name="BookBizImplPort" binding="tns:BookBizImplPortBinding"> <soap:address location="http://localhost:8080/test_soa_web1/book" /> </port> </service> </definitions>
同样我们通过wsimport 命令生成客户端代码:
新建客户端项目:添加客户端代码和测试类,引入Junit4库。
import java.util.List; import org.junit.Before; import org.junit.Test; import com.lyl.service.Book; import com.lyl.service.BookBizImplService; import com.lyl.service.BookException_Exception; import com.lyl.service.IBookBiz; public class TestBookService { IBookBiz bz; @Before public void init(){ BookBizImplService bbs=new BookBizImplService(); bz=bbs.getBookBizImplPort(); } @Test public void testAdd(){ Book book=new Book(); book.setBookId(2); book.setBookName("水浒传"); book.setBookPrice(100); try { bz.add(book); } catch (BookException_Exception e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } @Test public void testList(){ List<Book> bookList=bz.list(); for(Book book:bookList){ System.out.println(book.getBookName()); } } @Test public void testFindByName(){ String bookName="销售"; try { Book book=bz.findBookByName(bookName); System.out.println(bookName+"的价格是:"+book.getBookPrice()); } catch (BookException_Exception e) { // TODO Auto-generated catch block System.err.println(e.getMessage()); } } }
好了,这就是整个的流程,下面有源码,不过jar要自己到上面提供的官网下载,有什么问题或意见欢迎提出。
相关推荐
在本案例中,"Jax-ws RI.zip"是一个包含这些组件的压缩包,特别设计用于在Apache Tomcat服务器上部署Web服务。 首先,我们需要理解Web服务的基本概念。Web服务是一种通过互联网进行通信的应用程序接口,它使用XML...
文件名"jwstutorial20"可能是教程系列的一部分,可能包含一系列逐步的指导或案例研究,帮助读者理解并应用JAX-WS。数字20可能表示这是系列中的第20个教程,意味着可能有一个系统的教学过程。 **知识点详述:** JAX...
JAX-WS提供了一种基于WSDL(Web Service Description Language)的模型,允许开发者声明服务的接口、消息结构以及服务地址等信息。通过这种方式,服务消费者可以轻松地发现、理解和调用Web服务。 接着,我们讨论...
这个项目旨在展示如何在实际开发中创建、部署和调用基于 JAX-WS 的 Web 服务,并结合 Spring 提供的依赖注入和管理能力。 【描述】中的 "jax-ws 与 spring 整合的简单例子" 提到的核心技术是 JAX-WS 和 Spring。JAX...
本项目是基于Java API for XML Web Services (JAX-WS) 的参考实现——JAXWS-RI(Java API for XML Web Services Reference Implementation)构建的。JAX-WS是Java平台标准版(Java SE)的一部分,为开发SOAP(Simple...
3. **部署服务**:将服务打包成WAR或EAR文件,部署到支持JAX-WS的Servlet容器(如Tomcat、Glassfish等)。 4. **创建客户端**:使用WSDL生成客户端代理类,或使用动态客户端API。 5. **调用服务**:通过客户端接口...
"WebServiceDemoGH1.zip"是一个基于Java的WebService演示项目,它利用JAX-WS创建了一个可以通过SOAP协议访问的服务,并可以在IDEA中开发和调试。Tomcat作为服务器运行这个服务,允许跨平台的通信。理解这些知识点,...
标题 "resteasy-jaxrs-2.2 学习整理的例子" 暗示了我们即将探讨的是关于RESTful服务开发的一个案例,其中涉及到的主要技术是RESTEasy和JAX-RS 2.2。RESTEasy是Java EE平台上的一个开源框架,它实现了Java API for ...
1. **JAX-WS相关库**:如`javax.xml.ws-api.jar`,这是JAX-WS规范的API,用于编写服务端和客户端代码。 2. **Apache CXF**:一个流行的JAX-WS实现,可能包括`cxf-rt-frontend-jaxws.jar`和`cxf-rt-transports-...
在本案例中,“Using Java WebServices”随书源码提供了一组示例代码,帮助开发者深入理解如何使用Java来发布和消费Web服务。以下是关于Java Web服务的一些核心知识点和相关技术的详细解释: 1. **SOAP(Simple ...
本实例“WebServiceSoap实例(tomcat发布)”将教你如何在Apache Tomcat服务器上部署和使用一个基于SOAP的Web服务。Apache Tomcat是一个流行的开源Java Servlet容器,它能够运行Java Web应用程序,包括JSP和Servlet...
7. **Apache CXF**: Apache CXF是一个开源的Web服务框架,它支持JAX-WS和JAX-RS标准,并提供了丰富的功能,如SOAP消息处理、WS-Security等。在这个例子中,CXF可能被用来创建、发布和测试Web服务。 8. **部署与测试...
在本项目中,Spring Boot 与 Web 服务的整合主要涉及到 JAX-WS(Java API for XML Web Services)或者 JAX-RS(Java API for RESTful Web Services)。 JAX-WS 是 Java 平台上的 SOAP(简单对象访问协议)Web 服务...
在实际项目中,可能需要将WebService集成到现有系统中,例如结合Spring框架,或者使用Tomcat、Jetty等应用服务器部署。此外,还可以考虑使用Apache CXF或Glassfish等其他Web服务框架,它们提供了更丰富的功能和更好...
Apache CXF 是一个开源项目,提供了一套强大的框架用于构建和开发基于Java的Web服务。它支持多种协议,包括SOAP和REST,并且能够很好地与其他标准兼容,如WS-Addressing、WS-Security、WS-Policy等。通过Apache CXF...
将项目打包为WAR文件,部署到支持Servlet的Web服务器,如Tomcat。 4. **编写SOAP客户端** 创建Servlet,负责构造SOAP请求,发送到服务端,并处理返回的SOAP响应。 5. **测试与调试** 使用SOAP UI等工具测试服务...
在Java开发中,`javax.xml.ws.Service` 是一个核心组件,属于Java API for XML Web Services (JAX-WS)的一部分,用于创建客户端和服务端的Web服务代理。报错通常表明缺少必要的依赖包,这可能会影响到程序的正常运行...
这个案例可能是一个博客文章,但由于提供的描述为空,我们将基于一般Web服务CXF开发流程进行讲解。Apache CXF允许开发者以JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)...
4. **JAX-WS API**:这个API包括一系列接口和类,如`WebService`, `Service`, `Port`等,它们帮助开发者创建、发布和使用Web服务。例如,开发者可以使用`@WebService`注解来标记服务接口,并使用`@WebMethod`来定义...