1 package org.codehaus.xfire.xmlbeans;
2
3 import java.lang.reflect.Method;
4
5 import javax.xml.namespace.QName;
6
7 import org.apache.xmlbeans.XmlBeans;
8 import org.apache.xmlbeans.XmlObject;
9 import org.codehaus.xfire.aegis.AegisBindingProvider;
10 import org.codehaus.xfire.service.Service;
11 import org.codehaus.xfire.service.binding.ObjectServiceFactory;
12 import org.codehaus.xfire.soap.SoapConstants;
13 import org.codehaus.xfire.transport.TransportManager;
14
15 /***
16 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
17 */
18 public class XmlBeansServiceFactory
19 extends ObjectServiceFactory
20 {
21 public XmlBeansServiceFactory()
22 {
23 setStyle(SoapConstants.STYLE_DOCUMENT);
24 setWsdlBuilderFactory(new XmlBeansWSDLBuilderFactory());
25 }
26
27 public XmlBeansServiceFactory(TransportManager transportManager)
28 {
29 super(transportManager);
30
31 AegisBindingProvider provider = new AegisBindingProvider(new XmlBeansTypeRegistry());
32 setBindingProvider(provider);
33
34 setStyle(SoapConstants.STYLE_DOCUMENT);
35 setWsdlBuilderFactory(new XmlBeansWSDLBuilderFactory());
36 }
37
38 protected QName getInParameterName(Service service, Method method, int paramNumber, boolean doc)
39 {
40 Class[] paramClasses = method.getParameterTypes();
41 if (XmlObject.class.isAssignableFrom(paramClasses[paramNumber]))
42 {
43 return XmlBeans.typeForClass(paramClasses[paramNumber]).getDocumentElementName();
44 }
45 else
46 {
47 return super.getInParameterName(service, method, paramNumber, doc);
48 }
49 }
50
51 protected QName getOutParameterName(Service service, Method method, boolean doc)
52 {
53 if (XmlObject.class.isAssignableFrom(method.getReturnType()))
54 {
55 return XmlBeans.typeForClass(method.getReturnType()).getDocumentElementName();
56 }
57 else
58 {
59 return super.getOutParameterName(service, method, doc);
60 }
61 }
62 }