标签: spml

如何将具有相同名称空间和本地名称请求的两个单独Web服务路由到不同的端点?

我试图在一个弹簧部署中创建两个单独的Web服务,两者都使用相同的xsd模式生成wsdl,但是将它们路由到两个单独的端点,这样我就可以在不同的上下文中以不同的方式处理请求.

例如:

Webservice 1:访问子集,较低权限和安全性约束

Webservice 2:更高的权限

<sws:dynamic-wsdl id="spml-readonly" 
    portTypeName="SpmlReadOnlyService" 
    locationUri="SpmlReadOnly">
    <sws:xsd location="/WEB-INF/xsd/spml/pstc_spmlv2_core.xsd"/>
</sws:dynamic-wsdl>

<sws:dynamic-wsdl id="spml-crud" 
    portTypeName="SpmlCrudService" 
    locationUri="SpmlCrud">
    <sws:xsd location="/WEB-INF/xsd/spml/pstc_spmlv2_core.xsd"/>
    <sws:xsd location="/WEB-INF/xsd/spml/pstc_spmlv2_search.xsd"/>
    <sws:xsd location="/WEB-INF/xsd/spml/pstc_spmlv2_batch.xsd"/>
</sws:dynamic-wsdl>
Run Code Online (Sandbox Code Playgroud)

现在因为两个wsdl都基于相同的xsds,所以请求的'namespace'和'localPart'都是相同的,无论我正在点击哪个Web服务(/ SpmlReadOnly或/ SpmlCrud).

因此,由于localPart和命名空间仍然完全相同等,因此排除了已弃用的PayloadRootQNameEndpointMapping,并且我的当前配置只是将请求路由到同一端点方法处理程序,我无法区分调用哪个Web服务:

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "lookupRequest")
    @ResponsePayload
    public Source handleLookupRequest(SoapMessage message) throws Exception {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我能做什么甚至可能?如果xsd是共享的并且在模式的根目录中具有相同的名称空间,并且相同的localPart方法请求,那么是否有办法区分它们并映射到两个不同的端点?有关这方面的任何信息都很有用!我希望我不必设置两个单独的.wars,并在服务器上使用自己的代码库单独部署它们!

谢谢,达米安

spring web-services spring-ws spml

7
推荐指数
1
解决办法
4527
查看次数

如何在 python zeep 中使用额外的 xsd?

我需要实现一个SPML接口,它最终通过 HTTP(s) 执行 SOAP 请求。我有一个 wsdl 可以归结为:

<wsdl:types>
  <schema targetNamespace="http://soapadapter.something" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="receiveRequest" type="xsd:anyType"/>
  </schema>
</wsdl:types>
[...]
<wsdl:operation name="receiveRequest">
 <wsdl:input message="impl:receiveRequestRequest" name="receiveRequestRequest"/>
</wsdl:operation>
Run Code Online (Sandbox Code Playgroud)

如您所见,唯一定义的请求元素是“xsd:anyType”类型。我有一个单独的 xsd,在 wsdl 中根本没有链接,它描述了应该如何形成请求。

我想使用 zeep 来实现使用接口的 SOAP 请求。我怎样才能让 zeep 知道那个(本地)xsd 文件?

我找到了这个zeep.xsd.schema.SchemaDocument类,但没有在任何地方使用它的例子。有人可以给我一个如何创建使用 wsdl 和单独的 xsd 文件的客户端的使用示例吗?

python xsd spml zeep

5
推荐指数
1
解决办法
1237
查看次数

标签 统计

spml ×2

python ×1

spring ×1

spring-ws ×1

web-services ×1

xsd ×1

zeep ×1