xfire 与 spring 结合实例

59 篇文章 0 订阅
55 篇文章 0 订阅

webservice 开发在服务开发中非常常用,并且有多种实现方式今天我们就看下xfire开发服务实例。这里简单讲述与spring结合的开发实例。

1.首先我们需要在项目上下文定义我们的xfire配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/BANo-servlet.xml,
   /WEB-INF/BANoContext.xml,
   /WEB-INF/BANo-quartz.xml,
   /WEB-INF/xfire-servlet.xml

   </param-value>
  </context-param>
  <servlet>
  <servlet-name>BANo</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
   /WEB-INF/BANo-servlet.xml,
   /WEB-INF/BANoContext.xml,
    /WEB-INF/xfire-servlet.xml
   
   </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
     <servlet-name>BANo</servlet-name>
     <url-pattern>*.do</url-pattern>
   </servlet-mapping> 
    
    
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener> 
 
 <filter>
  <filter-name>SetCharacterEncodingFilter</filter-name>
  <filter-class>com.plan.web.SetCharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
 </filter>
 <filter-mapping>
   <filter-name>SetCharacterEncodingFilter</filter-name>
   <url-pattern>*</url-pattern>
 </filter-mapping>
  
 <filter>
  <filter-name>SessionTimeoutFilter</filter-name>
  <filter-class>com.szpl.BANo.common.filter.SessionTimeoutFilter</filter-class>
  <init-param>
   <param-name>timeoutUrl</param-name>
   <param-value>http://localhost:7001</param-value>
  </init-param>
 </filter> 
 <filter-mapping>
  <filter-name>SessionTimeoutFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <servlet>
  <servlet-name>FileUploadServlet</servlet-name>
  <servlet-class>com.plan.fileupload.UploadServlet</servlet-class>
  <!-- 上传附件的根目录 -->
  <init-param>
   <param-name>uploadRootPath</param-name>
   <param-value>E:/land/uploadfiles/BANo/</param-value>
  </init-param>
  <!-- SWFTool安装路径 -->
  <init-param>
   <param-name>fileView_swfToolPath</param-name>
   <param-value>C:/SWFTools/</param-value>
  </init-param>
  <!-- rfxview.swf路径 -->
  <init-param>
   <param-name>fileView_rfxviewPath</param-name>
   <param-value>C:/SWFTools/swfs/rfxview.swf</param-value>
  </init-param>
  <!-- 预览文件存放目录 -->
  <init-param>
   <param-name>fileView_viewFilePath</param-name>
   <param-value>D:/project/viewFile</param-value>
  </init-param>
  <!-- 文件预览虚拟目录 -->
  <init-param>
   <param-name>fileView_viewPath</param-name>
   <param-value>/BANo</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet> 
 <servlet-mapping>
  <servlet-name>FileUploadServlet</servlet-name>
  <url-pattern>/commons/fileupload/upload.do</url-pattern>
 </servlet-mapping>
 
 <servlet>
  <servlet-name>xfireServlet</servlet-name>
  <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>xfireServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
 

 
 <!--基于Xfile的WebSerivices -->
 <!-- <servlet>
  <servlet-name>XFireServlet</servlet-name>
  <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WebServices/services.xml</param-value>
  </init-param>
  <load-on-startup>0</load-on-startup>
 </servlet> -->
 
  <!-- <servlet-mapping>
  <servlet-name>XFireServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping> -->
 
 <session-config>
  <session-timeout>60</session-timeout>
 </session-config>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>  
</web-app>
2.配置我们相关的xfire配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!--  START SNIPPET: xfire -->
 <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="order" value="3" />
  <property name="urlMap">
   <map>
    <entry key="/WebServiceInterface">
     <ref bean="sso"/>
    </entry>
   </map>
  </property>
 </bean>
 
 <!-- Declare a parent bean with all properties common to both services -->
 <bean id="sso" class="org.codehaus.xfire.spring.remoting.XFireExporter">
  <property name="serviceFactory">
   <ref bean="xfire.serviceFactory"/>
  </property>
  <property name="xfire">
   <ref bean="xfire"/>
  </property>
  <property name="serviceBean">
   <ref bean="WebServiceInterfaceImpl"/>
  </property>
  <property name="serviceClass">
   <value>com.szpl.cai.BANo.services.WebServiceInterface</value>
  </property>
 </bean>
    <!--xfire服务的实现类 
    <bean id="caiServiceImpl" class="com.szpl.cai.services.impl.CaiServiceImpl">
      <property name="planSupportLogDao" ref="planSupportLogDao" />
      </bean>-->
 <!-- END SNIPPET: xfire -->
</beans>
 下面讲解下配置文件,其实简单来说就是为了告诉spring handler 我声明的类是一个服务,那么怎么实现的呢?
1)首先定义使用spring handler ,使用SimpleUrlHandlerMapping拦截器映射类拦截我们的handler
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
2)然后定义urlmap 这里是定义我们拦截之后处理的类,看似一个简单的配置其实执行了一个复杂的过程。
3)定义我们的实现类信息。
<bean id="sso" class="org.codehaus.xfire.spring.remoting.XFireExporter">
  <property name="serviceFactory">
   <ref bean="xfire.serviceFactory"/>
  </property>
  <property name="xfire">
   <ref bean="xfire"/>
  </property>
  <property name="serviceBean">
   <ref bean="WebServiceInterfaceImpl"/>
  </property>
  <property name="serviceClass">
   <value>com.szpl.cai.BANo.services.WebServiceInterface</value>
  </property>
 </bean>
    <!--xfire服务的实现类 
    <bean id="caiServiceImpl" class="com.szpl.cai.services.impl.CaiServiceImpl">
      <property name="planSupportLogDao" ref="planSupportLogDao" />
      </bean>-->
这里拦截到我们请求之后,交由XFireExporter进行处理,不难发现此类继承了servicebean 及实现了contralloer接口。源码如下
/*    */ package org.codehaus.xfire.spring.remoting;
/*    */
/*    */ import javax.servlet.ServletContext;
/*    */ import javax.servlet.http.HttpServletRequest;
/*    */ import javax.servlet.http.HttpServletResponse;
/*    */ import org.codehaus.xfire.service.Service;
/*    */ import org.codehaus.xfire.service.ServiceInfo;
/*    */ import org.codehaus.xfire.spring.ServiceBean;
/*    */ import org.springframework.aop.framework.ProxyFactory;
/*    */ import org.springframework.web.context.ServletContextAware;
/*    */ import org.springframework.web.servlet.ModelAndView;
/*    */ import org.springframework.web.servlet.mvc.Controller;
/*    */
/*    */ public class XFireExporter extends ServiceBean
/*    */   implements Controller, ServletContextAware
/*    */ {
/*    */   private XFireServletControllerAdapter delegate;
/*    */   private ServletContext context;
/*    */
/*    */   public void afterPropertiesSet()
/*    */     throws Exception
/*    */   {
/* 30 */     super.afterPropertiesSet();
/*    */
/* 32 */     this.delegate = new XFireServletControllerAdapter(getXfire(), this.context, getXFireService().getName());
/*    */   }
/*    */
/*    */   public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
/*    */     throws Exception
/*    */   {
/* 48 */     return this.delegate.handleRequest(request, response);
/*    */   }
/*    */
/*    */   protected Object getProxyForService()
/*    */   {
/* 56 */     ProxyFactory proxyFactory = new ProxyFactory();
/* 57 */     proxyFactory.addInterface(getXFireService().getServiceInfo().getServiceClass());
/*    */
/* 59 */     proxyFactory.setTarget(getServiceBean());
/* 60 */     return proxyFactory.getProxy();
/*    */   }
/*    */
/*    */   public void setServiceInterface(Class intf)
/*    */   {
/* 69 */     setServiceClass(intf);
/*    */   }
/*    */
/*    */   public void setServletContext(ServletContext context)
/*    */   {
/* 74 */     this.context = context;
/*    */   }
/*    */ }


/*    */ package org.codehaus.xfire.spring.remoting;
/*    */
/*    */ import javax.servlet.ServletContext;
/*    */ import javax.servlet.http.HttpServletRequest;
/*    */ import javax.servlet.http.HttpServletResponse;
/*    */ import javax.xml.namespace.QName;
/*    */ import org.codehaus.xfire.XFire;
/*    */ import org.codehaus.xfire.service.Service;
/*    */ import org.codehaus.xfire.service.ServiceRegistry;
/*    */ import org.codehaus.xfire.transport.http.XFireServletController;
/*    */ import org.springframework.web.servlet.ModelAndView;
/*    */ import org.springframework.web.servlet.mvc.Controller;
/*    */
/*    */ public class XFireServletControllerAdapter extends XFireServletController
/*    */   implements Controller
/*    */ {
/*    */   private QName serviceName;
/*    */
/*    */   public XFireServletControllerAdapter(XFire xfire, QName serviceName)
/*    */   {
/* 34 */     this(xfire, null, serviceName);
/*    */   }
/*    */
/*    */   public XFireServletControllerAdapter(XFire xfire, ServletContext context, QName name)
/*    */   {
/* 46 */     super(xfire, context);
/*    */
/* 48 */     this.serviceName = name;
/*    */   }
/*    */
/*    */   protected String getService(HttpServletRequest request)
/*    */   {
/* 53 */     return this.serviceName.getLocalPart();
/*    */   }
/*    */
/*    */   public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
/*    */     throws Exception
/*    */   {
/* 67 */     doService(request, response);
/* 68 */     return null;
/*    */   }
/*    */
/*    */   protected Service getService(String name)
/*    */   {
/* 73 */     return getServiceRegistry().getService(this.serviceName);
/*    */   }
/*    */
/*    */   public void setServiceName(QName serviceName)
/*    */   {
/* 78 */     this.serviceName = serviceName;
/*    */   }
/*    */ }


/*     */ package org.codehaus.xfire.transport.http;
/*     */
/*     */ import java.io.IOException;
/*     */ import java.io.PrintWriter;
/*     */ import java.io.UnsupportedEncodingException;
/*     */ import javax.activation.DataHandler;
/*     */ import javax.servlet.ServletContext;
/*     */ import javax.servlet.ServletException;
/*     */ import javax.servlet.ServletOutputStream;
/*     */ import javax.servlet.http.HttpServletRequest;
/*     */ import javax.servlet.http.HttpServletResponse;
/*     */ import javax.xml.stream.XMLStreamException;
/*     */ import javax.xml.stream.XMLStreamReader;
/*     */ import org.apache.commons.logging.Log;
/*     */ import org.apache.commons.logging.LogFactory;
/*     */ import org.codehaus.xfire.MessageContext;
/*     */ import org.codehaus.xfire.XFire;
/*     */ import org.codehaus.xfire.XFireFactory;
/*     */ import org.codehaus.xfire.XFireRuntimeException;
/*     */ import org.codehaus.xfire.attachments.Attachment;
/*     */ import org.codehaus.xfire.attachments.Attachments;
/*     */ import org.codehaus.xfire.attachments.StreamedAttachments;
/*     */ import org.codehaus.xfire.exchange.InMessage;
/*     */ import org.codehaus.xfire.handler.AbstractHandler;
/*     */ import org.codehaus.xfire.service.Service;
/*     */ import org.codehaus.xfire.service.ServiceRegistry;
/*     */ import org.codehaus.xfire.transport.Channel;
/*     */ import org.codehaus.xfire.transport.Transport;
/*     */ import org.codehaus.xfire.transport.TransportManager;
/*     */ import org.codehaus.xfire.util.STAXUtils;
/*     */
/*     */ public class XFireServletController
/*     */ {
/*     */   public static final String HTTP_SERVLET_REQUEST = "XFireServletController.httpServletRequest";
/*     */   public static final String HTTP_SERVLET_RESPONSE = "XFireServletController.httpServletResponse";
/*     */   public static final String HTTP_SERVLET_CONTEXT = "XFireServletController.httpServletContext";
/*  45 */   private static ThreadLocal requests = new ThreadLocal();
/*  46 */   private static ThreadLocal responses = new ThreadLocal();
/*  47 */   private static final Log logger = LogFactory.getLog(XFireServletController.class);
/*     */   protected XFire xfire;
/*     */   protected SoapHttpTransport transport;
/*     */   protected ServletContext servletContext;
/*     */
/*     */   public XFireServletController(XFire xfire)
/*     */   {
/*  56 */     this(xfire, null);
/*     */   }
/*     */
/*     */   public XFireServletController(XFire xfire, ServletContext servletContext)
/*     */   {
/*  61 */     this.xfire = xfire;
/*  62 */     this.servletContext = servletContext;
/*     */
/*  65 */     this.transport = new XFireServletTransport();
/*     */
/*  67 */     this.transport.addFaultHandler(new FaultResponseCodeHandler());
/*     */
/*  69 */     Transport oldSoap = getTransportManager().getTransport("http://schemas.xmlsoap.org/soap/http");
/*     */
/*  71 */     if (oldSoap != null) getTransportManager().unregister(oldSoap);
/*     */
/*  73 */     getTransportManager().register(this.transport);
/*     */   }
/*     */
/*     */   public static HttpServletRequest getRequest()
/*     */   {
/*  78 */     return (HttpServletRequest)requests.get();
/*     */   }
/*     */
/*     */   public static HttpServletResponse getResponse()
/*     */   {
/*  83 */     return (HttpServletResponse)responses.get();
/*     */   }
/*     */
/*     */   protected TransportManager getTransportManager()
/*     */   {
/*  88 */     return getXFire().getTransportManager();
/*     */   }
/*     */
/*     */   public void doService(HttpServletRequest request, HttpServletResponse response)
/*     */     throws ServletException, IOException
/*     */   {
/*  99 */     String serviceName = getService(request);
/* 100 */     if (serviceName == null) serviceName = "";
/*     */
/* 102 */     ServiceRegistry reg = getServiceRegistry();
/*     */
/* 104 */     response.setHeader("Content-Type", "UTF-8");
/*     */     try
/*     */     {
/* 108 */       requests.set(request);
/* 109 */       responses.set(response);
/*     */
/* 111 */       boolean hasService = reg.hasService(serviceName);
/* 112 */       if ((serviceName.length() == 0) || (!hasService))
/*     */       {
/* 114 */         if (!hasService)
/*     */         {
/* 116 */           response.setStatus(404);
/* 119 */         }
/*     */ generateServices(request, response);
/*     */         return;
/*     */       }
/* 123 */       if (isWSDLRequest(request))
/*     */       {
/* 125 */         generateWSDL(response, serviceName);
/*     */       }
/*     */       else
/*     */       {
/* 129 */         invoke(request, response, serviceName);
/*     */       }
/*     */     }
/*     */     catch (Exception e)
/*     */     {
/* 134 */       logger.error("Couldn't invoke servlet request.", e);
/*     */
/* 136 */       if ((e instanceof ServletException))
/*     */       {
/* 138 */         throw ((ServletException)e);
/*     */       }
/*     */
/* 142 */       throw new ServletException(e);
/*     */     }
/*     */     finally
/*     */     {
/* 147 */       requests.set(null);
/* 148 */       responses.set(null);
/*     */     }
/*     */   }
/*     */
/*     */   protected boolean isWSDLRequest(HttpServletRequest request)
/*     */   {
/* 154 */     return (request.getQueryString() != null) && (request.getQueryString().trim().equalsIgnoreCase("wsdl"));
/*     */   }
/*     */
/*     */   protected void generateService(HttpServletResponse response, String serviceName)
/*     */     throws ServletException, IOException
/*     */   {
/* 161 */     response.setContentType("text/html");
/* 162 */     Service endpoint = getServiceRegistry().getService(serviceName);
/* 163 */     HtmlServiceWriter writer = new HtmlServiceWriter();
/*     */     try
/*     */     {
/* 166 */       writer.write(response.getOutputStream(), endpoint);
/*     */     }
/*     */     catch (XMLStreamException e)
/*     */     {
/* 170 */       throw new ServletException("Error writing HTML services list", e);
/*     */     }
/*     */   }
/*     */
/*     */   protected void generateServices(HttpServletRequest request, HttpServletResponse response)
/*     */     throws ServletException, IOException
/*     */   {
/* 181 */     response.setContentType("text/html");
/*     */
/* 183 */     HtmlServiceWriter writer = new HtmlServiceWriter(request);
/*     */     try
/*     */     {
/* 187 */       Object value = XFireFactory.newInstance().getXFire().getProperty("services.list.disabled");
/* 188 */       if ((value != null) && ("true".equals(value.toString().toLowerCase())))
/* 189 */         response.getOutputStream().write("Services list disabled".getBytes());
/*     */       else {
/* 191 */         writer.write(response.getOutputStream(), getServiceRegistry().getServices());
/*     */       }
/*     */     }
/*     */     catch (XMLStreamException e)
/*     */     {
/* 196 */       throw new ServletException("Error writing HTML services list", e);
/*     */     }
/*     */   }
/*     */
/*     */   protected MessageContext createMessageContext(HttpServletRequest request, HttpServletResponse response, String service)
/*     */   {
/* 205 */     XFireHttpSession session = new XFireHttpSession(request);
/* 206 */     MessageContext context = new MessageContext();
/* 207 */     context.setXFire(getXFire());
/* 208 */     context.setSession(session);
/* 209 */     context.setService(getService(service));
/* 210 */     context.setProperty("XFireServletController.httpServletRequest", request);
/* 211 */     context.setProperty("XFireServletController.httpServletResponse", response);
/*     */
/* 213 */     if (this.servletContext != null) {
/* 214 */       context.setProperty("XFireServletController.httpServletContext", this.servletContext);
/*     */     }
/* 216 */     return context;
/*     */   }
/*     */
/*     */   protected Channel createChannel(MessageContext context) throws ServletException
/*     */   {
/* 221 */     HttpServletRequest request = (HttpServletRequest)context.getProperty("XFireServletController.httpServletRequest");
/*     */     try
/*     */     {
/* 224 */       return this.transport.createChannel(request.getRequestURI());
/*     */     }
/*     */     catch (Exception e)
/*     */     {
/* 228 */       logger.debug("Couldn't open channel.", e);
/* 229 */     }throw new ServletException("Couldn't open channel.", e);
/*     */   }
/*     */
/*     */   protected void invoke(HttpServletRequest request, HttpServletResponse response, String service)
/*     */     throws ServletException, IOException, UnsupportedEncodingException
/*     */   {
/* 246 */     response.setStatus(200);
/* 247 */     response.setBufferSize(8192);
/*     */
/* 249 */     MessageContext context = createMessageContext(request, response, service);
/* 250 */     Channel channel = createChannel(context);
/*     */
/* 252 */     String soapAction = getSoapAction(request);
/* 253 */     String contentType = request.getContentType();
/* 254 */     if (null == contentType)
/*     */     {
/* 256 */       response.setContentType("text/html; charset=UTF-8");
/*     */
/* 259 */       response.getWriter().write("<html><body>Invalid SOAP request.</body></html>");
/* 260 */       response.getWriter().close();
/*     */     }
/* 262 */     else if (contentType.toLowerCase().indexOf("multipart/related") != -1)
/*     */     {
/* 266 */       String ct = request.getContentType().replaceAll("--=_part_", "--=_Part_");
/*     */
/* 269 */       Attachments atts = new StreamedAttachments(context, request.getInputStream(), ct);
/*     */
/* 271 */       String encoding = getEncoding(atts.getSoapContentType());
/*     */
/* 273 */       XMLStreamReader reader = STAXUtils.createXMLStreamReader(atts.getSoapMessage().getDataHandler().getInputStream(), encoding, context);
/*     */
/* 277 */       InMessage message = new InMessage(reader, request.getRequestURI());
/* 278 */       message.setProperty("SOAPAction", soapAction);
/* 279 */       message.setAttachments(atts);
/*     */
/* 281 */       channel.receive(context, message);
/*     */       try
/*     */       {
/* 285 */         reader.close();
/*     */       }
/*     */       catch (XMLStreamException e)
/*     */       {
/* 289 */         throw new XFireRuntimeException("Could not close XMLStreamReader.");
/*     */       }
/*     */
/*     */     }
/*     */     else
/*     */     {
/* 295 */       String charEncoding = request.getCharacterEncoding();
/* 296 */       charEncoding = dequote(charEncoding);
/* 297 */       XMLStreamReader reader = STAXUtils.createXMLStreamReader(request.getInputStream(), charEncoding, context);
/*     */
/* 302 */       InMessage message = new InMessage(reader, request.getRequestURI());
/* 303 */       message.setProperty("SOAPAction", soapAction);
/* 304 */       channel.receive(context, message);
/*     */       try
/*     */       {
/* 308 */         reader.close();
/*     */       }
/*     */       catch (XMLStreamException e)
/*     */       {
/* 312 */         throw new XFireRuntimeException("Could not close XMLStreamReader.");
/*     */       }
/*     */     }
/*     */   }
/*     */
/*     */   protected String dequote(String charEncoding)
/*     */   {
/* 319 */     if ((charEncoding != null) && (charEncoding.length() > 0) && (
/* 320 */       ((charEncoding.charAt(0) == '"') && (charEncoding.charAt(charEncoding.length() - 1) == '"')) || ((charEncoding.charAt(0) == '\'') && (charEncoding.charAt(charEncoding.length() - 1) == '\''))))
/*     */     {
/* 322 */       charEncoding = charEncoding.substring(1, charEncoding.length() - 1);
/*     */     }
/*     */
/* 325 */     return charEncoding;
/*     */   }
/*     */
/*     */   protected String getSoapAction(HttpServletRequest request)
/*     */   {
/* 330 */     String action = request.getHeader("SOAPAction");
/*     */
/* 332 */     if ((action != null) && (action.startsWith("\"")) && (action.endsWith("\"")) && (action.length() >= 2))
/*     */     {
/* 334 */       action = action.substring(1, action.length() - 1);
/*     */     }
/*     */
/* 337 */     return action;
/*     */   }
/*     */
/*     */   protected String getEncoding(String enc) throws ServletException
/*     */   {
/* 342 */     if (enc == null) {
/* 343 */       return "UTF-8";
/*     */     }
/* 345 */     int typeI = enc.indexOf("type=");
/* 346 */     if (typeI == -1) return null;
/*     */
/* 348 */     int charI = enc.indexOf("charset=", typeI);
/* 349 */     if (charI == -1) return null;
/*     */
/* 351 */     int end = enc.indexOf("\"", charI);
/* 352 */     if (end == -1) end = enc.indexOf(";", charI);
/* 353 */     if (end == -1) throw new ServletException("Invalid content type: " + enc);
/*     */
/* 355 */     return enc.substring(charI + 8, end);
/*     */   }
/*     */
/*     */   protected void generateWSDL(HttpServletResponse response, String service)
/*     */     throws ServletException, IOException
/*     */   {
/* 368 */     Service userService = getXFire().getServiceRegistry().getService(service);
/* 369 */     Object value = userService.getProperty("wsdl.generation.disabled");
/* 370 */     boolean isWSDLDisabled = "true".equalsIgnoreCase(value != null ? value.toString() : null);
/* 371 */     if (isWSDLDisabled) {
/* 372 */       logger.warn("WSDL generation disabled for service :" + service);
/* 373 */       response.sendError(404, "No wsdl is avaiable for this service");
/* 374 */       return;
/*     */     }
/*     */
/* 377 */     response.setStatus(200);
/* 378 */     response.setContentType("text/xml");
/*     */
/* 380 */     getXFire().generateWSDL(service, response.getOutputStream());
/*     */   }
/*     */
/*     */   protected String getService(HttpServletRequest request)
/*     */   {
/* 388 */     String pathInfo = request.getPathInfo();
/*     */
/* 390 */     if (pathInfo == null)
/* 391 */       return null;
/*     */     String serviceName;
/*     */     String serviceName;
/* 395 */     if (pathInfo.startsWith("/"))
/*     */     {
/* 397 */       serviceName = pathInfo.substring(1);
/*     */     }
/*     */     else
/*     */     {
/* 401 */       serviceName = pathInfo;
/*     */     }
/*     */
/* 404 */     return serviceName;
/*     */   }
/*     */
/*     */   protected Service getService(String name)
/*     */   {
/* 409 */     return getXFire().getServiceRegistry().getService(name);
/*     */   }
/*     */
/*     */   public XFire getXFire()
/*     */   {
/* 414 */     return this.xfire;
/*     */   }
/*     */
/*     */   public ServiceRegistry getServiceRegistry()
/*     */   {
/* 419 */     return this.xfire.getServiceRegistry();
/*     */   }
/*     */
/*     */   public static class FaultResponseCodeHandler extends AbstractHandler
/*     */   {
/*     */     public FaultResponseCodeHandler()
/*     */     {
/* 428 */       setPhase("transport");
/*     */     }
/*     */
/*     */     public void invoke(MessageContext context)
/*     */     {
/* 437 */       HttpServletResponse response = XFireServletController.getResponse();
/* 438 */       if (response != null)
/* 439 */         response.setStatus(500);
/*     */     }
/*     */   }
/*     */ }
由源码我们可以知道大概的执行流程,首先通过上下文加载xfire配置文件,在我们调用服务时被spring拦截连所拦截,然后通过配置的entry来获取所需的控制器类xfireexporter类,通过此类结构可知继承了serrvicebean,实现了controller,servletcontextaware接口,通过代理获取实体类及实现类,并执行doservice方法,进行服务的调用及解析,成功后通过反射进行结果处理执行实现业务类。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值