/* Copyright 2009 Ramnivas Laddad Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package org.springframework.samples.jpetstore.service; import org.springframework.remoting.jaxrpc.ServletEndpointSupport; import org.springframework.samples.jpetstore.domain.Order; import org.springframework.samples.jpetstore.domain.logic.OrderService; /** * JAX-RPC OrderService endpoint that simply delegates to the OrderService * implementation in the root web application context. Implements the plain * OrderService interface as service interface, just like the target bean does. * * <p>This proxy class is necessary because JAX-RPC/Axis requires a dedicated * endpoint class to instantiate. If an existing service needs to be exported, * a wrapper that extends ServletEndpointSupport for simple application context * access is the simplest JAX-RPC compliant way. * * <p>This is the class registered with the server-side JAX-RPC implementation. * In the case of Axis, this happens in "server-config.wsdd" respectively via * deployment calls. The Web Service tool manages the lifecycle of instances * of this class: A Spring application context can just be accessed here. * * <p>Note that this class does <i>not</i> implement an RMI port interface, * despite the JAX-RPC spec requiring this for service endpoints. Axis and * other JAX-RPC implementations are known to accept non-RMI endpoint classes * too, so there's no need to maintain an RMI port interface in addition to * the existing non-RMI service interface (OrderService). * * <p>If your JAX-RPC implementation imposes a strict requirement on a service * endpoint class to implement an RMI port interface, then let your endpoint * class implement both the non-RMI service interface and the RMI port interface. * This will work as long as the methods in both interfaces just differ in the * declared RemoteException. Of course, this unfortunately involves double * maintenance: one interface for your business logic, one for JAX-RPC. * Therefore, it is usually preferable to avoid this if not absolutely necessary. * * @author Juergen Hoeller * @since 26.12.2003 */ public class JaxRpcOrderService extends ServletEndpointSupport implements OrderService { private OrderService orderService; protected void onInit() { this.orderService = (OrderService) getWebApplicationContext().getBean("petStore"); } public Order getOrder(int orderId) { return this.orderService.getOrder(orderId); } }