1 package org.codehaus.xfire.service; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import org.codehaus.xfire.exchange.MessageSerializer; 7 import org.codehaus.xfire.handler.AbstractHandlerSupport; 8 import org.codehaus.xfire.service.binding.ObjectBinding; 9 import org.codehaus.xfire.soap.SoapVersion; 10 import org.codehaus.xfire.wsdl.WSDLWriter; 11 12 /*** 13 * Represents a service endpoint. A service endpoints sole job is to process xml messages. The 14 * servicehandler is is the central processing point - responsible for invoking 15 * request/response/fault handlers as well reading in the xml message to the service. 16 * <p> 17 * The binding is then responsible for taking the SOAP Body and binding it to something - JavaBeans, 18 * XMLBeans, W3C DOM tree, etc. 19 * <p> 20 * The <code>ServiceInfo</code> represents an optional contract for the service. This can be used 21 * to generate WSDL and/or provide information on serialization. 22 * 23 * @author <a href="mailto:poutsma@mac.com">Arjen Poutsma</a> 24 * @see ServiceInfo 25 * @see org.codehaus.xfire.service.binding.SOAPBinding 26 */ 27 public class Service 28 extends AbstractHandlerSupport 29 implements Visitable 30 { 31 public final static String ROLE = Service.class.getName(); 32 33 private ServiceInfo service; 34 private MessageSerializer serializer; 35 private MessageSerializer faultSerializer; 36 private ObjectBinding binding; 37 private Map properties = new HashMap(); 38 private WSDLWriter wsdlWriter; 39 private SoapVersion soapVersion; 40 41 /*** 42 * Initializes a new, default instance of the <code>ServiceEndpoint</code> for a specified 43 * <code>ServiceInfo</code>. 44 * 45 * @param service the service. 46 */ 47 public Service(ServiceInfo service) 48 { 49 this.service = service; 50 } 51 52 53 /*** 54 * Accepts the given visitor. Iterates over all the contained service. 55 * 56 * @param visitor the visitor. 57 */ 58 public void accept(Visitor visitor) 59 { 60 visitor.startEndpoint(this); 61 service.accept(visitor); 62 visitor.endEndpoint(this); 63 } 64 65 /*** 66 * @see org.codehaus.xfire.service.Service#getProperty(java.lang.String) 67 */ 68 public Object getProperty(String name) 69 { 70 return properties.get(name); 71 } 72 73 /*** 74 * @see org.codehaus.xfire.service.Service#setProperty(java.lang.String, java.lang.Object) 75 */ 76 public void setProperty(String name, Object value) 77 { 78 properties.put(name, value); 79 } 80 81 /*** 82 * Returns the binding for this endpoint. 83 * 84 * @return the binding. 85 */ 86 public ObjectBinding getBinding() 87 { 88 return binding; 89 } 90 91 /*** 92 * Sets the binding for this endpoint. 93 * 94 * @param binding the binding. 95 */ 96 public void setBinding(ObjectBinding binding) 97 { 98 this.binding = binding; 99 } 100 101 public MessageSerializer getFaultSerializer() 102 { 103 return faultSerializer; 104 } 105 106 public void setFaultSerializer(MessageSerializer faultSerializer) 107 { 108 this.faultSerializer = faultSerializer; 109 } 110 111 /*** 112 * Returns the name of this endpoint. This method simply returns the local part of the qualified name of the 113 * <code>ServiceInfo</code>. 114 * 115 * @return the service name. 116 * @see ServiceInfo#getName() 117 * @see javax.xml.namespace.QName#getLocalPart() 118 */ 119 public String getName() 120 { 121 return service.getName().getLocalPart(); 122 } 123 124 /*** 125 * Returns the service descriptor for this endpoint. 126 * 127 * @return the service descriptor. 128 */ 129 public ServiceInfo getServiceInfo() 130 { 131 return service; 132 } 133 134 /*** 135 * Returns the <code>WSDLWriter</code> for this endpoint. If a writer has not been {@link #setWSDLWriter(WSDLWriter) 136 * explicitly set}, a default implementation is used. 137 * 138 * @return the wsdl writer. 139 */ 140 public WSDLWriter getWSDLWriter() 141 { 142 return wsdlWriter; 143 } 144 145 /*** 146 * Sets the <code>WSDLWriter</code> for this endpoint. 147 * 148 * @param wsdlWriter 149 */ 150 public void setWSDLWriter(WSDLWriter wsdlWriter) 151 { 152 this.wsdlWriter = wsdlWriter; 153 } 154 155 public SoapVersion getSoapVersion() 156 { 157 return soapVersion; 158 } 159 160 public void setSoapVersion(SoapVersion soapVersion) 161 { 162 this.soapVersion = soapVersion; 163 } 164 } 165