Home | Download | PDF | API | FAQ | Search | Feedback | History

> ## 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 propogated to the clients by using 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 `SupplierPrices.properties` file. Here are the `getPriceList` and `loadPrices` methods:

>     public PriceListBean getPriceList() {

>       PriceListBean priceList = loadPrices();
>       return priceList;
>     }

>     private PriceListBean loadPrices() {

>       String propsName = "com.sun.cb.ws.server.SupplierPrices";
>       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;
>     }