Document Information


Part I Introduction

1.  Overview

2.  Using the Tutorial Examples

Part II The Web Tier

3.  Getting Started with Web Applications

4.  Java Servlet Technology

5.  JavaServer Pages Technology

6.  JavaServer Pages Documents

7.  JavaServer Pages Standard Tag Library

8.  Custom Tags in JSP Pages

9.  Scripting in JSP Pages

10.  JavaServer Faces Technology

11.  Using JavaServer Faces Technology in JSP Pages

12.  Developing with JavaServer Faces Technology

13.  Creating Custom UI Components

14.  Configuring JavaServer Faces Applications

15.  Internationalizing and Localizing Web Applications

Part III Web Services

16.  Building Web Services with JAX-WS

17.  Binding between XML Schema and Java Classes

18.  Streaming API for XML

19.  SOAP with Attachments API for Java

Part IV Enterprise Beans

20.  Enterprise Beans

21.  Getting Started with Enterprise Beans

22.  Session Bean Examples

23.  A Message-Driven Bean Example

Part V Persistence

24.  Introduction to the Java Persistence API

25.  Persistence in the Web Tier

26.  Persistence in the EJB Tier

27.  The Java Persistence Query Language

Part VI Services

28.  Introduction to Security in the Java EE Platform

29.  Securing Java EE Applications

30.  Securing Web Applications

31.  The Java Message Service API

32.  Java EE Examples Using the JMS API

33.  Transactions

34.  Resource Connections

35.  Connector Architecture

Part VII Case Studies

36.  The Coffee Break Application

Overview of the Coffee Break Application

Common Code

SAAJ Coffee Supplier Service

SAAJ Client

Sending the Request

Ordering Coffee

SAAJ Service

Returning the Price List

Returning the Order Confirmation

Coffee Break Server

JSP Pages

The orderForm Page

The checkoutForm Page

The checkoutAck Page

JavaBeans Components

The RetailPriceList JavaBeans Component

The ShoppingCart JavaBeans Component

The OrderConfirmations JavaBeans Component

The CheckoutFormBean JavaBeans Component

The CoffeeBreakBean JavaBeans Component

The RetailPriceListServlet Servlet

Resource Configuration

Building, Packaging, Deploying, and Running the Coffee Break Application

Setting the Port

Building, Packaging, and Deploying the JAX-WS Coffee Supplier Service

Building, Packaging, and Deploying the SAAJ Coffee Supplier Service

Building, Packaging, and Deploying the Coffee Break Server

Running the Coffee Break Client

Removing the Coffee Break Application

37.  The Duke's Bank Application

Part VIII Appendixes

A.  Java Encoding Schemes

B.  About the Authors



JAX-WS Coffee Supplier Service

The Coffee Break servers are clients of the JAX-WS coffee supplier service. The service code consists of the service implementation class, and several JavaBeans components that are used for method parameters and return types. The JavaBeans components are:

  • AddressBean: shipping information for customer

  • ConfirmationBean: order ID and ship date

  • CustomerBean: customer contact information

  • LineItemBean: order item

  • OrderBean: order ID, customer, address, list of line items, total price

  • PriceItemBean: price list entry (coffee name and wholesale price)

  • PriceListBean: price list

These JavaBeans components are propagated to the clients by means of the wsimport tool.

Service Implementation

The Supplier class implements the placeOrder and getPriceList methods. So that you can focus on the code related to JAX-WS, these methods are short and simplistic. In a real world application, these methods would access databases and would interact with other services, such as shipping, accounting, and inventory.

The placeOrder method accepts as input a coffee order and returns a confirmation for the order. To keep things simple, the placeOrder method confirms every order and sets the ship date in the confirmation to the next day. The source code for the placeOrder method follows:

public ConfirmationBean placeOrder(OrderBean order) {

    Date tomorrow = DateHelper.addDays(new Date(), 1);
    ConfirmationBean confirmation =
        new ConfirmationBean(order.getId(), DateHelper.dateToCalendar(tomorrow));
    return confirmation;

The getPriceList method returns a PriceListBean object, which lists the name and price of each type of coffee that can be ordered from this service. The getPriceList method creates the PriceListBean object by invoking a private method named loadPrices. In a production application, the loadPrices method would fetch the prices from a database. However, our loadPrices method takes a shortcut by getting the prices from the file. Here are the getPriceList and loadPrices methods:

public PriceListBean getPriceList() {

    PriceListBean priceList = loadPrices();
    return priceList;

private PriceListBean loadPrices() {

    String propsName = "";
    Date today = new Date();
    Date endDate = DateHelper.addDays(today, 30);

    PriceItemBean[] priceItems = PriceLoader.loadItems(propsName);
    PriceListBean priceList =
        new PriceListBean(DateHelper.dateToCalendar(today),
            DateHelper.dateToCalendar(endDate), priceItems);

    return priceList;