2
我试图构建集成在DispatcherServlet中的Web Service,根据Spring的ws,它可能包含MessageDispatcherServlet。我只是按照教程跟随教程和实现代码。Spring MVC Web服务调度程序
Tomcat正常启动。不过,我有404页,当我尝试使用HTTP访问Web服务:// [主持人]/[项目]/holidayService /我“米做错了
这是我实现:
<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>
doolloop-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>
现在的EndPoint看起来是这样的:
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;
}
}
旁边我有服务实现,但我不认为它是相关的,我有一种感觉,它与Dispatcher servlet有关,但我不知道问题是什么。
我增加了后续
<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 [[email protected]] 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
看起来你是对的,但我不知道如何将它与MessageDispatcherServlet一起映射 – 2010-11-15 12:30:43
我知道我可以使用messageDispather,但我有整个应用程序使用分派器,我希望我的WS绑定到休眠会话bean和我在那里的所有逻辑。 – 2010-11-15 12:43:22
我的意思是'MessageDispatcher',而不是'MessageDispatcherServlet'。 – axtavt 2010-11-15 12:52:44