我正在使用
运行独立应用程序(没有Web应用程序容器)我已经设置了嵌入了这样的servlet上下文的Jetty:
<bean id="servletContext" class="org.eclipse.jetty.servlet.ServletContextHandler">
<property name="contextPath" value="/" />
<property name="servletHandler">
<bean class="org.eclipse.jetty.servlet.ServletHandler">
<property name="servlets">
<list>
<bean class="org.eclipse.jetty.servlet.ServletHolder" p:name="dispatcherServlet" p:servlet-ref="dispatcherServlet" />
<bean class="org.eclipse.jetty.servlet.ServletHolder" p:name="messageDispatcherServlet" p:servlet-ref="messageDispatcherServlet" />
</list>
</property>
<property name="servletMappings">
<list>
<bean class="org.eclipse.jetty.servlet.ServletMapping" p:pathSpec="/services" p:servletName="dispatcherServlet" />
<bean class="org.eclipse.jetty.servlet.ServletMapping" p:pathSpec="/ws/*" p:servletName="messageDispatcherServlet" />
</list>
</property>
</bean>
</property>
</bean>
<bean id="dispatcherServlet" class="org.springframework.web.servlet.DispatcherServlet">
<constructor-arg>
<bean class="org.springframework.web.context.support.XmlWebApplicationContext">
<property name="configLocation" value="classpath:/dispatcherServlet-context.xml" />
</bean>
</constructor-arg>
</bean>
<bean id="messageDispatcherServlet" class="org.springframework.ws.transport.http.MessageDispatcherServlet">
<constructor-arg>
<bean class="org.springframework.web.context.support.XmlWebApplicationContext">
<property name="configLocation" value="classpath:/messageDispatcherServlet-context.xml" />
</bean>
</constructor-arg>
</bean>
如您所见,定义了2个servlet,第一个是
org.springframework.web.servlet.DispatcherServlet
,第二个是
org.springframework.ws.transport.http.MessageDispatcherServlet
那些有两个单独的spring context config xml文件(XmlWebApplicationContext):
的DispatcherServlet-context.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<beans
[... xmlns etc. here ...]
>
<bean name="/test" class="com.mycompany.TestHttpRequestHandler" />
</beans>
messageDispatcherServlet-context.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<beans
[... xmlns etc. here ...]
>
<bean class="com.mycompany.TestWebServiceEndpoint" />
<bean name="TestWebService" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
<property name="wsdl">
<bean class="org.springframework.core.io.ClassPathResource">
<constructor-arg>
<value>classpath:/TestWebServiceEndpoint.wsdl</value>
</constructor-arg>
</bean>
</property>
</bean>
</beans>
一切正常 - 我可以在以下网址下调用“TestHttpRequestHandler”(DispatcherServlet):
http://localhost:8181/services/test
我可以在以下URL下调用WSDL:
http://localhost:8181/ws/TestWebService.wsdl
但是(!) - 这是我的问题 - 我也可以使用网址
http://localhost:8181/ws/bar/TestWebService.wsdl
或
http://localhost:8181/ws/bat/foo/TestWebService.wsdl
或
http://localhost:8181/ws/bat/foo/whatever/TestWebService.wsdl
每次浏览器显示“TestWebService”的WSDL XML代码。
我的期望是,URL由bean名称映射,就像使用
的示例一样<bean name="/test" class="com.mycompany.TestHttpRequestHandler" />
将其映射到http://localhost:8181/services/test
。
但似乎对于“MessageDispatcherServlet”,这不起作用。它只识别其上下文中的任何WSDL bean并返回它,无论用户调用的URL(只是WSDL文件的名称必须匹配)。
冗长的解释,但简短的问题:
如何在使用MessageDispatcherServlet时指定“TestWebService.wsdl”的确切(且唯一有效)URL?
非常感谢你的帮助!