View Javadoc

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  		ifg> ((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  			// seperate with dot
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  }