当前位置: 首页 > 知识库问答 >
问题:

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

纪俊良
2023-03-14

我有一个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 7 . 1 . 1上运行的。我不明白的是,我本以为只有myDefinitionOne wsdl可以在“http://my server/base directory/subdirectory one/”中访问,同样,只有myDefinitionTwo wsdl可以在“http://my server/base directory/subdirectory two/”中访问

但是正如它所进行的那样,两个wsdl都可以从任何一个URL访问。

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

这里有没有遗漏什么,因为我的目标是分离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个答案

郝原
2023-03-14

< code>ws:dynamic-wsdl只是在给定类型模式的情况下为Spring-WS服务提供wsdl的一种方式——endpoint本身并不真正与您在< code>ws:dynamic-wsdl中描述的内容相关联。这就是为什么无论您放置什么locationUri,它都会由Spring-WS < code > MessageDispatcherServlet 根据您必须在< code>web.xml文件中提供的< code>servlet-mapping进行处理。

Spring-WS根据有效负载或soapaction查找endpoint方法

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

如果您绝对需要这样做,那么创建两个spring-ws配置文件怎么样-比如ws-config1.xml和ws-config2.xml,删除

 类似资料:
  • 我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点

  • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

  • 问题内容: 我使用的不是可重入的库(用C编写)(即库中没有函数可重入)。假设我已经通过System.load加载了库以获取句柄“ v”。由于重入问题(尝试过但无意义的结果),我无法在两个线程中使用v。我可以使用锁,但这会破坏我本可以获得的任何并行性。 我想做的是启动两个线程,然后在每个线程中加载库以获取两个不同的句柄(因此,加载的库有两个副本)。 这在Java中可行吗?问候Saptarshi 问题

  • 问题内容: 我想将2个div的大小设置为特定宽度(即500px)。一个高于另一个水平对齐。 顶部框应隐藏其滚动条,底部框应显示滚动条,并且当​​用户滚动时,我希望顶部框的偏移量更改为底部框的值。因此,当底部DIV水平滚动时,似乎顶部DIV也同时滚动。 我很高兴在Jquery中做到这一点,如果它使过程更容易。 问题答案: $(‘#bottom’).on(‘scroll’, function () {

  • 我得到了一个表从SELECT查询1如下从SQL服务器: 我从SQL Server的SELECT query 2中获得了一个表,如下所示: 我想将这些SELECT查询加入到一个SELECT查询中,如下所示: 我试着这样: 但它不起作用,这不是我想要加入的实际表。 基本上,我想连接两个具有相同列名但它们之间没有公共值的SELECT查询。我想使用连接表中的SELECT查询。 提前谢谢你。

  • 我用最低的资源(A0基本、共享核心和768 MB RAM)购买了按量付费的Azure订阅,并自动为我创建了四项服务:存储帐户、虚拟机、云服务和目录。 在虚拟机上,我使用HttpListener类设置了自己的HTTP服务器软件,该软件是用C语言编写的。我在TCP上添加了一个连接专用端口和公共端口80的HTTPendpoint。完成后,我就可以访问我的云服务地址(Something.CloudApp.