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 }