Spring MVC Web Services Dispatcher

Ich versuche zu bauen, die web-Service integriert in DispatcherServlet statt MessageDispatcherServlet, nach Spring ws es ist möglich,. Ich bin nur binden zu tutorials und code implementieren, der nach tutorials.

Tomcat startet ganz normal. Jedoch, ich haben Seite 404, wenn ich versuche, Zugriff auf web service über http://[host]/[Projekt]/holidayService/Was ich m tun falsch?

Hier ist meine Umsetzung:

<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>

Den relevanten Teil von doolloop-servlet.xml ist die folgende:

<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>

Nun den Endpunkt sieht folgendermaßen aus:

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;
    }
}

daneben habe ich die service-Implementierung, aber ich denke nicht, dass es relevant ist und ich habe das Gefühl, es hat etwas zu tun mit Dispatcher-servlet, aber ich habe keine Ahnung, was das problem ist.

Habe ich noch die Folgen

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

Dies ist, was meine log4j Datei zeigt:

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
InformationsquelleAutor danny.lesnik | 2010-11-15
Schreibe einen Kommentar