JBoss中的Spring Web服务 - 两个动态wsdl具有不同的locationUri,但两者都可以在两个位置访问

时间:2012-12-13 13:02:04

标签: java web-services spring jboss wsdl

我有一个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 / 子目录 /'中访问,同样,只有myDefinitionTwo wsdl可以访问' HTTP:// MYSERVER / basedirectory /的 subdirectorytwo /

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

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

我有什么想念的,因为我的目标是将URL上的身份验证分开,即/ http:// myserver / basedirectory / subdirectorytwo /和/ http:// myserver / basedirectory / subdirectorytwo / on服务,但我不能这样做,如果他们都可以从两个地方访问。

我也通过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>

那么这不正确指定吗?

1 个答案:

答案 0 :(得分: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显式指向每个配置文件。这可以工作。