代码之家  ›  专栏  ›  技术社区  ›  danny.lesnik

Spring MVC Web服务调度程序

  •  2
  • danny.lesnik  · 技术社区  · 15 年前

    根据SpringWS的说法,我正在尝试构建集成在DispatcherServlet中的Web服务,这是可能的。我只是想学习教程并根据教程实现代码。

    Tomcat启动正常。但是,当我试图使用http://host]/[project]/holidayservice/访问Web服务时,我的页面是404页/我做错了什么?

    以下是我的实现:

    <servlet>
        <servlet-name>doolloop</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>doolloop</servlet-name>
        <url-pattern>*.dlp</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>doolloop</servlet-name>
        <url-pattern>/index.dlp</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>doolloop</servlet-name>
        <url-pattern>/scene/*</url-pattern>
      </servlet-mapping>
    

    dooloop-servlet.xml的相关部分如下:

    <tx:annotation-driven />
    <mvc:annotation-driven />
    <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
        <bean class="org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter">
    <property name="messageFactory" ref="messageFactory"/>
    </bean>
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="defaultHandler" ref="messageDispatcher"/>
        </bean>
    
        <bean id="messageDispatcher" class="org.springframework.ws.server.MessageDispatcher"/>
    
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>  
    <bean id="holidayEndpoint" class="com.doolloop.services.HolidayEndpoint">
      <constructor-arg ref="hrService" /> 
      </bean>
      <bean id="hrService" class="com.doolloop.services.StubHumanResourceService" /> 
      <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
      <property name="mappings">
      <props>
      <prop key="{http://mycompany.com/hr/schemas}HolidayRequest">holidayEndpoint</prop> 
      </props>
      </property>
      <property name="interceptors">
      <bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" /> 
      </property>
      </bean>
      <bean id="holiday" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
      <property name="schema" ref="schema" /> 
      <property name="portTypeName" value="HumanResource" /> 
      <!--  we use a relative uri that will be transformed by spring-ws dep
      --> 
      <property name="locationUri" value="holidayService/" /> 
      <property name="targetNamespace" value="http://mycompany.com/hr/definitions" /> 
      </bean>
      <bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
      <property name="xsd" value="/WEB-INF/hr.xsd" /> 
      </bean>
    

    现在端点如下所示:

    public class HolidayEndpoint extends AbstractJDomPayloadEndpoint {
    
        private XPath startDateExpression;
        private XPath endDateExpression;
        private XPath nameExpression;
        private HumanResourceService humanResourceService;
    
        public HolidayEndpoint(HumanResourceService humanResourceService) throws JDOMException {
            this.humanResourceService = humanResourceService;
            Namespace namespace = Namespace.getNamespace("hr", "http://mycompany.com/hr/schemas");
            startDateExpression = XPath.newInstance("//hr:StartDate");
            startDateExpression.addNamespace(namespace);
            endDateExpression = XPath.newInstance("//hr:EndDate");
            endDateExpression.addNamespace(namespace);
            nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)");
            nameExpression.addNamespace(namespace);
        }
    
        protected Element invokeInternal(Element holidayRequest) throws Exception {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date startDate = dateFormat.parse(startDateExpression.valueOf(holidayRequest));
            Date endDate = dateFormat.parse(endDateExpression.valueOf(holidayRequest));
            String name = nameExpression.valueOf(holidayRequest);
    
            humanResourceService.bookHoliday(startDate, endDate, name);
            return null;
        }
    }
    

    除此之外,我还有服务实现,但我认为它不相关,我觉得它与DispatcherServlet有关,但我不知道问题是什么。

    我添加了以下内容

     <servlet-mapping>
        <servlet-name>doolloop</servlet-name>
        <url-pattern>/holidayService/*</url-pattern>
      </servlet-mapping>
    

    这是我的log4j文件显示的内容:

    2010-11-15 15:27:07,969 DEBUG [org.springframework.web.servlet.DispatcherServlet] - DispatcherServlet with name 'doolloop' processing GET request for [/dlp/holidayService/]
    2010-11-15 15:27:07,969 DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] - Mapping [/] to HandlerExecutionChain with handler [org.springframework.ws.server.MessageDispatcher@68487fb7] and 2 interceptors
    2010-11-15 15:27:07,970 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Last-Modified value for [/dlp/holidayService/] is: -1
    2010-11-15 15:27:07,970 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Null ModelAndView returned to DispatcherServlet with name 'doolloop': assuming HandlerAdapter completed request handling
    2010-11-15 15:27:07,970 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Successfully completed request
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   axtavt    15 年前

    DispatcherServlet /holidayService

    <servlet-mapping> 
        <servlet-name>doolloop</servlet-name> 
        <url-pattern>/holydayService/*</url-pattern> 
    </servlet-mapping> 
    

    MessageDispatcher 5.3.2. Wiring up Spring-WS in a DispatcherServlet