1 package org.codehaus.xfire.jaxb; 2 3 import org.codehaus.xfire.aegis.AegisBindingProvider; 4 import org.codehaus.xfire.service.Service; 5 import org.codehaus.xfire.service.binding.ObjectServiceFactory; 6 import org.codehaus.xfire.transport.TransportManager; 7 8 import javax.xml.bind.JAXBContext; 9 import javax.xml.namespace.QName; 10 import java.lang.reflect.Method; 11 12 /*** 13 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a> 14 */ 15 public class JaxbServiceFactory 16 extends ObjectServiceFactory 17 { 18 JaxbIntrospector jaxbIntrospector; 19 20 public JaxbServiceFactory(TransportManager transportManager, JAXBContext jaxbContext) 21 { 22 super(transportManager); 23 jaxbIntrospector = new JaxbIntrospector(jaxbContext); 24 AegisBindingProvider provider = new AegisBindingProvider(new JaxbTypeRegistry(jaxbContext)); 25 setBindingProvider(provider); 26 } 27 28 protected QName getInParameterName(Service service, Method method, int paramNumber, boolean doc) 29 { 30 Class[] paramClasses = method.getParameterTypes(); 31 if (JaxbTypeCreator.isJaxbType(paramClasses[paramNumber])) 32 { 33 return jaxbIntrospector.introspect(paramClasses[paramNumber]); 34 } else 35 { 36 return super.getInParameterName(service, method, paramNumber, doc); 37 } 38 } 39 40 protected QName getOutParameterName(Service service, Method method, boolean doc) 41 { 42 Class clazz = method.getReturnType(); 43 if (JaxbTypeCreator.isJaxbType(clazz)) 44 { 45 return jaxbIntrospector.introspect(clazz); 46 } else 47 { 48 return super.getOutParameterName(service, method, doc); 49 } 50 } 51 }