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 }