/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") * $Id: SoapXFireDeployer.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.engine.elements; import com.uwyn.rife.engine.ElementDeployer; import com.uwyn.rife.engine.exceptions.EngineException; import com.uwyn.rife.engine.exceptions.PropertyRequiredException; import com.uwyn.rife.tools.ClassUtils; import javax.servlet.http.HttpServletRequest; import org.codehaus.xfire.XFire; import org.codehaus.xfire.XFireFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.ServiceFactory; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import org.codehaus.xfire.service.invoker.ObjectInvoker; import org.codehaus.xfire.service.invoker.ScopePolicyEditor; import org.codehaus.xfire.transport.http.XFireServletController; public class SoapXFireDeployer extends ElementDeployer { private Service mService = null; private XFireController mController = null; public SoapXFireDeployer() { } public void deploy() throws EngineException { if (!getElementInfo().containsProperty("home-class")) { throw new PropertyRequiredException(getElementInfo().getDeclarationName(), "home-class"); } if (!getElementInfo().containsProperty("home-api")) { throw new PropertyRequiredException(getElementInfo().getDeclarationName(), "home-api"); } String home_class_classname = getElementInfo().getPropertyString("home-class"); String home_api_classname = getElementInfo().getPropertyString("home-api"); try { Class home_class = loadClass(home_class_classname); Class home_api = loadClass(home_api_classname); String service_name = getElementInfo().getPropertyString("service-name", ClassUtils.simpleClassName(home_class)); String scope = getElementInfo().getPropertyString("scope", ""); XFire xfire = XFireFactory.newInstance().getXFire(); ServiceFactory factory = new ObjectServiceFactory(xfire.getTransportManager(), null); mService = factory.create(home_api, service_name, null, null); mService.setInvoker(new SoapXFireObjectInvoker(ScopePolicyEditor.toScopePolicy(scope))); mService.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, home_class); xfire.getServiceRegistry().register(mService); mController = new XFireController(xfire); } catch (ClassNotFoundException e) { throw new EngineException(e); } } XFireController getController() { return mController; } private Class loadClass(String className) throws ClassNotFoundException { ClassLoader loader = Thread.currentThread().getContextClassLoader(); if (loader != null) { return Class.forName(className, false, loader); } else { return Class.forName(className); } } class XFireController extends XFireServletController { public XFireController(XFire xfire) { super(xfire); } protected String getService(HttpServletRequest request) { return mService.getName().getLocalPart(); } } }