View Javadoc

1   package org.codehaus.xfire.transport.http;
2   
3   import javax.servlet.http.HttpServletRequest;
4   
5   import org.codehaus.xfire.MessageContext;
6   import org.codehaus.xfire.fault.FaultHandler;
7   import org.codehaus.xfire.fault.FaultHandlerPipeline;
8   import org.codehaus.xfire.fault.XFireFault;
9   import org.codehaus.xfire.service.Service;
10  import org.codehaus.xfire.transport.AbstractTransport;
11  import org.codehaus.xfire.transport.Transport;
12  import org.codehaus.xfire.wsdl11.WSDL11Transport;
13  
14  /***
15   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
16   */
17  public class SoapHttpTransport
18      extends AbstractTransport
19  	implements Transport, WSDL11Transport
20  {
21      public final static String NAME = "Http";
22  
23      public static final String HTTP_TRANSPORT_NS = "http://schemas.xmlsoap.org/soap/http";
24  
25      public SoapHttpTransport()
26      {
27          FaultHandlerPipeline faultPipe = new FaultHandlerPipeline();
28          faultPipe.addHandler(new FaultResponseCodeHandler());
29          setFaultPipeline(faultPipe);
30      }
31      
32      /***
33       * @see org.codehaus.xfire.transport.Transport#getName()
34       */
35      public String getName()
36      {
37          return NAME;
38      }
39  
40      /***
41  	 * Get the URL for a particular service.
42  	 */
43  	public String getServiceURL( Service service )
44  	{
45  		HttpServletRequest req = XFireServletController.getRequest();
46          
47          return getWebappBase(req) + "/services/" + service.getName();
48  	}
49  
50      public String getTransportURI( Service service )
51      {
52          return HTTP_TRANSPORT_NS;
53      }
54      
55      protected String getWebappBase(HttpServletRequest request)
56  	{
57  		StringBuffer baseURL = new StringBuffer(128);
58  		baseURL.append(request.getScheme());
59  		baseURL.append("://");
60  		baseURL.append(request.getServerName());
61  		if (request.getServerPort() != 80)
62  		{
63  			baseURL.append(":");
64  			baseURL.append(request.getServerPort());
65  		}
66  		baseURL.append(request.getContextPath());
67  		return baseURL.toString();
68  	}
69      
70      public class FaultResponseCodeHandler
71           implements FaultHandler
72      {
73          /***
74           * @see org.codehaus.xfire.handler.Handler#invoke(org.codehaus.xfire.MessageContext)
75           * @param context
76           * @throws Exception
77           */
78          public void handleFault(XFireFault fault, MessageContext context)
79          {
80              XFireServletController.getResponse().setStatus(500);
81          }    
82      }
83  }