1 package org.codehaus.xfire.java;
2
3 import java.util.StringTokenizer;
4
5 import org.codehaus.xfire.SOAPConstants;
6 import org.codehaus.xfire.XFire;
7 import org.codehaus.xfire.fault.SOAP11FaultHandler;
8 import org.codehaus.xfire.handler.SoapHandler;
9 import org.codehaus.xfire.java.mapping.TypeMappingRegistry;
10 import org.codehaus.xfire.java.wsdl.JavaWSDLBuilder;
11
12 /***
13 * Helper methods for services.
14 *
15 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
16 * @since Nov 6, 2004
17 */
18 public class ServiceHelper
19 {
20 public static void createService( XFire xfire,
21 TypeMappingRegistry registry,
22 Class serviceClass )
23 throws Exception
24 {
25 DefaultJavaService service = new DefaultJavaService();
26
27 String name = serviceClass.getName();
28 int last = name.lastIndexOf(".");
29 if ( last != -1 )
30 {
31 name = name.substring(last+1);
32 }
33
34 service.setName(name);
35 service.setDefaultNamespace(makeNamespaceFromClassName(serviceClass.getName(), "http"));
36 try
37 {
38 service.setServiceClass(serviceClass.getName());
39 } catch (ClassNotFoundException e) {}
40
41 service.setSoapVersion(SOAPConstants.SOAP11_ENVELOPE_NS);
42 service.setStyle(SOAPConstants.STYLE_WRAPPED);
43 service.setUse(SOAPConstants.USE_LITERAL);
44 service.setFaultHandler(new SOAP11FaultHandler());
45 service.setWSDLBuilder(new JavaWSDLBuilder( xfire.getTransportManager() ));
46 service.setAutoTyped(true);
47
48 SoapHandler handler = new SoapHandler(new JavaServiceHandler());
49 service.setServiceHandler( handler );
50
51 service.setTypeMappingRegistry(registry);
52
53 service.initialize();
54
55 xfire.getServiceRegistry().register(service);
56 }
57
58 public static String makeNamespaceFromClassName(String className, String protocol)
59 {
60 String packageName = className.substring(0, className.lastIndexOf("."));
61
62 if ((packageName == null) || packageName/equals(/package-summary.html">g> ((packageName == null) || packageName.equals(""))
63 {
64 return protocol + "://" + "DefaultNamespace";
65 }
66
67 StringTokenizer st = new StringTokenizer(packageName, ".");
68 String[] words = new String[st.countTokens()];
69
70 for (int i = 0; i < words.length; ++i)
71 {
72 words[i] = st.nextToken();
73 }
74
75 StringBuffer sb = new StringBuffer(80);
76
77 for (int i = words.length - 1; i >= 0; --i)
78 {
79 String word = words[i];
80
81
82 if (i != words.length - 1)
83 {
84 sb.append('.');
85 }
86
87 sb.append(word);
88 }
89
90 return protocol + "://" + sb.toString();
91 }
92 }