0

我有一个 Spring Web 服务项目。我已将服务分成两个不同的 wsdl。

<ws:dynamic-wsdl id="myDefinitionOne"
    portTypeName="Test" locationUri="http://server/basedirectory/subdirectoryone">
    <ws:xsd location="/WEB-INF/schemas/my-schema-one.xsd" />
</ws:dynamic-wsdl>

<ws:dynamic-wsdl id="myDefinitionTwo"
    portTypeName="Test" locationUri="http://server/basedirectory/subdirectorytwo">
    <ws:xsd location="/WEB-INF/schemas/my-schema-two.xsd" />
</ws:dynamic-wsdl>

这是在 JBoss AS 7.1.1 上运行的。我不明白的是,我原以为只有 myDefinitionOne wsdl 可以在“http://myserver/basedirectory/ subdirectoryone /”中访问,同样,只有 myDefinitionTwo wsdl 可以在“http://myserver/basedirectory”中访问/子目录二/'

但事实上,两个 wsdl 都可以从任一 URL 访问。

我正在运行 SoapUI,我可以从eiter URL 为两组服务运行端点测试。

我在这里错过了什么,因为我的目标是在每个服务上分离出 URL 上的身份验证,即 /http://myserver/basedirectory/subdirectorytwo/ 和 /http://myserver/basedirectory/subdirectorytwo/,但是我不能这样做,如果它们都可以从两个位置访问。

我也通过 IIS 运行它。

任何人都可以帮助我对此的理解。


根据评论,这就是我的 web.xml 文件中的内容

这就是我的 web.xml 中的内容

<servlet>
    <servlet-name>webservices</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ws-config.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>webservices</servlet-name>
    <url-pattern>/subdirectoryone/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>webservices-auth</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ws-config.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>webservices-auth</servlet-name>
    <url-pattern>/subdirectorytwo/*</url-pattern>
</servlet-mapping>

那么这是否没有正确指定它?

4

1 回答 1

0

ws:dynamic-wsdl只是一种为 Spring-WS 服务提供 wsdl 的方式,给定您的类型的模式 - 端点本身与您在ws:dynamic-wsdl. 这就是为什么无论您放置什么 locationUri,Spring-WS 都会MessageDispatcherServlet根据servlet-mapping您必须在web.xml文件中提供的内容来处理它。

Spring-WS 根据有效负载或soapaction 查找端点方法。

基于更新 您的方法将不起作用,因为本质上两者MessageDispatcherServlet仍然指向相同的配置。因此,例如,如果一个请求到达 /subdirectory1/*,它将被第一个 MessageDispatcherServlet 拦截,它会在某个时候检查有效负载,然后在内部检查从有效负载到端点的映射,以找到要分派的正确端点来电。无论您向 /subdirectory1/* 还是 /subdirectory2/* 发送请求,都会发生完全相同的事情。

如果你绝对需要这样做,如何创建两个 spring-ws 配置文件 - 比如说 ws-config1.xml 和 ws-config2.xml,<component-scan/>如果你有它,请删除它,并显式地将相关的端点 bean 添加到每个配置中文件。这可以工作。

于 2012-12-13T13:22:56.577 回答