1 package org.codehaus.xfire.picocontainer; 2 3 import java.net.URL; 4 import java.util.Map; 5 6 import org.codehaus.xfire.picocontainer.util.PicoObjectInvoker; 7 import org.codehaus.xfire.service.Service; 8 import org.codehaus.xfire.service.ServiceFactory; 9 import org.codehaus.xfire.service.binding.BindingProvider; 10 import org.codehaus.xfire.service.binding.ObjectBinding; 11 import org.codehaus.xfire.service.binding.ObjectServiceFactory; 12 import org.codehaus.xfire.soap.SoapVersion; 13 import org.codehaus.xfire.transport.TransportManager; 14 import org.picocontainer.PicoContainer; 15 import org.picocontainer.defaults.ObjectReference; 16 import org.picocontainer.defaults.SimpleReference; 17 18 /*** 19 * PicoContainer specialization of Java objects-specific implementation of the 20 * {@link ServiceFactory} interface which uses a given picocontainer to pick 21 * service objects instance when it's about to invoke them. 22 * 23 * @author <a href="mailto:juze@intelli.biz">Jose Peleteiro</a> 24 */ 25 public class PicoObjectServiceFactory 26 extends ObjectServiceFactory 27 { 28 private ObjectReference picoReference; 29 30 public PicoObjectServiceFactory(PicoContainer pico) 31 { 32 super(); 33 picoReference = new SimpleReference(); 34 picoReference.set(pico); 35 } 36 37 public PicoObjectServiceFactory(ObjectReference picoReference) 38 { 39 super(); 40 this.picoReference = picoReference; 41 } 42 43 public PicoObjectServiceFactory(PicoContainer pico, TransportManager transportManager, 44 BindingProvider provider) 45 { 46 super(transportManager, provider); 47 picoReference = new SimpleReference(); 48 picoReference.set(pico); 49 } 50 51 public PicoObjectServiceFactory(ObjectReference picoReference, 52 TransportManager transportManager, BindingProvider provider) 53 { 54 super(transportManager, provider); 55 this.picoReference = picoReference; 56 } 57 58 public Service create(Class clazz, String name, String namespace, Map properties) 59 { 60 return prepare(super.create(clazz, name, namespace, properties)); 61 } 62 63 public Service create(Class clazz, 64 String name, 65 String namespace, 66 SoapVersion version, 67 String style, 68 String use, 69 Map properties) 70 { 71 return prepare(super.create(clazz, name, namespace, version, style, use, properties)); 72 } 73 74 public Service create(Class clazz, URL wsdlUrl) 75 throws Exception 76 { 77 return prepare(super.create(clazz, wsdlUrl)); 78 } 79 80 public Service create(Class clazz) 81 { 82 return prepare(super.create(clazz)); 83 } 84 85 /*** 86 * Prepare an ObjectService to use pico. 87 */ 88 protected Service prepare(Service endpoint) 89 { 90 ((ObjectBinding) endpoint.getBinding()).setInvoker(new PicoObjectInvoker(picoReference, 91 endpoint.getServiceInfo().getServiceClass())); 92 return endpoint; 93 } 94 }