有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JBoss中的java Spring Web服务有两个具有不同位置URI的动态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/子目录one/“同样,在中只能访问myDefinitionTwo wsdl”http://myserver/basedirectory/子目录两个

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

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

我的目标是分离URL上的身份验证,因此我在这里遗漏了什么吗/http://myserver/basedirectory/subdirectorytwo/及/http://myserver/basedirectory/subdirectorytwo/在每项服务上,但我不能这样做,如果它们都可以从两个位置访问

我也通过IIS运行这个

有人能帮我解释一下这件事吗


根据评论,这是我的网站上的内容。xml文件

这就是我的网站。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) 个答案

  1. # 1 楼答案

    ws:dynamic-wsdl只是一种为您的Spring WS服务提供wsdl的方法,给定了您的类型的模式——端点本身并没有真正与您在ws:dynamic-wsdl中描述的内容相关联。这就是为什么无论您放置什么位置URI,它都会由Spring WS MessageDispatcherServlet根据servlet-mapping文件中必须提供的web.xml进行处理的原因

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

    基于更新 您的方法将不起作用,因为基本上这两个MessageDispatcherServlet仍然指向相同的配置。例如,如果一个请求到达/subdirectory y1/*它将被第一个MessageDispatcherServlet截获,它将在某个点检查负载,然后在内部检查负载到端点的映射,以找到正确的端点来向其发送调用。无论您向/subdirectory y1/*或/subdirectory y2/*发送请求,都会发生完全相同的情况

    如果您确实需要这样做,那么创建两个spring ws配置文件(比如ws-config1)怎么样。xml和ws-config2。xml,删除<component-scan/>(如果有的话),并显式地将相关的端点bean显式地添加到每个配置文件中。这可以奏效