1 package org.codehaus.xfire.service.object; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Hashtable; 6 import java.util.List; 7 import java.util.Map; 8 9 import javax.wsdl.WSDLException; 10 11 import org.codehaus.xfire.service.MessageService; 12 import org.codehaus.xfire.type.TypeMapping; 13 import org.codehaus.xfire.wsdl.WSDLWriter; 14 import org.codehaus.xfire.wsdl11.builder.WSDLBuilder; 15 16 /*** 17 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse </a> 18 */ 19 public class DefaultObjectService 20 extends MessageService 21 implements ObjectService 22 { 23 private TypeMapping typeMapping; 24 25 private List allowedMethods; 26 27 private Class serviceClass; 28 29 private Hashtable operations; 30 31 private WSDLBuilder wsdlBuilder; 32 33 private boolean autoTyped = false; 34 35 private int scope = ObjectService.SCOPE_APPLICATION; 36 37 private String encodingStyleURI; 38 39 public DefaultObjectService() 40 { 41 super(); 42 this.allowedMethods = new ArrayList(); 43 this.operations = new Hashtable(); 44 } 45 46 /*** 47 * @param className 48 */ 49 public void setServiceClass(final String className) 50 throws ClassNotFoundException 51 { 52 setServiceClass(loadClass(className)); 53 } 54 55 /*** 56 * @param serviceClass 57 */ 58 public void setServiceClass(final Class serviceClass) 59 { 60 this.serviceClass = serviceClass; 61 } 62 63 public void addOperation(final Operation op) 64 { 65 operations.put(op.getName(), op); 66 } 67 68 /*** 69 * Determines whether or not to expose the specified method. 70 * 71 * @param methodName 72 */ 73 private boolean isAllowed(final String methodName) 74 { 75 return (allowedMethods.isEmpty() || allowedMethods.contains(methodName)); 76 } 77 78 public Operation getOperation(final String localName) 79 { 80 return (Operation) operations.get(localName); 81 } 82 83 public Collection getOperations() 84 { 85 return operations.values(); 86 } 87 88 protected Map getOperationsMap() 89 { 90 return operations; 91 } 92 93 public List getAllowedMethods() 94 { 95 return allowedMethods; 96 } 97 98 /*** 99 * @param allowedMethods 100 * The allowedMethods to set. 101 */ 102 public void setAllowedMethods(final List allowedMethods) 103 { 104 this.allowedMethods = allowedMethods; 105 } 106 107 public TypeMapping getTypeMapping() 108 { 109 return typeMapping; 110 } 111 112 /*** 113 * @param typeMapping 114 * The typeMapping to set. 115 */ 116 public void setTypeMapping(final TypeMapping typeMapping) 117 { 118 this.typeMapping = typeMapping; 119 } 120 121 /*** 122 * @return 123 */ 124 public Class getServiceClass() 125 { 126 return serviceClass; 127 } 128 129 /*** 130 * Load a class from the class loader. 131 * 132 * @param className 133 * The name of the class. 134 * 135 * @return The class. 136 */ 137 protected Class loadClass(final String className) 138 throws ClassNotFoundException 139 { 140 try 141 { 142 return getClass().getClassLoader().loadClass(className); 143 } 144 catch (ClassNotFoundException cnfe) 145 { 146 try 147 { 148 return Class.forName(className); 149 } 150 catch (ClassNotFoundException cnf2) 151 { 152 return Thread.currentThread().getContextClassLoader().loadClass(className); 153 } 154 } 155 } 156 157 public WSDLWriter getWSDLWriter() 158 throws WSDLException 159 { 160 final WSDLWriter writer = super.getWSDLWriter(); 161 162 if (writer == null) 163 { 164 final WSDLBuilder b = getWSDLBuilder(); 165 166 if (b != null) 167 return getWSDLBuilder().createWSDLWriter(this); 168 } 169 170 return writer; 171 } 172 173 public boolean isAutoTyped() 174 { 175 return autoTyped; 176 } 177 178 public void setAutoTyped(final boolean autoTyped) 179 { 180 this.autoTyped = autoTyped; 181 } 182 183 public int getScope() 184 { 185 return scope; 186 } 187 188 public void setScope(final int scope) 189 { 190 this.scope = scope; 191 } 192 193 public WSDLBuilder getWSDLBuilder() 194 { 195 return wsdlBuilder; 196 } 197 198 public void setWSDLBuilder(final WSDLBuilder wsdlBuilder) 199 { 200 this.wsdlBuilder = wsdlBuilder; 201 } 202 203 public String getEncodingStyleURI() 204 { 205 return encodingStyleURI; 206 } 207 208 public void setEncodingStyleURI(final String encodingStyleURI) 209 { 210 this.encodingStyleURI = encodingStyleURI; 211 } 212 }