Spring-WS SOAP服务设计 - 一对多操作

时间:2013-03-27 22:59:28

标签: design-patterns soap wsdl spring-ws

我正在使用Spring-WS发布SOAP Web服务,并且想知道设计WSDL的方法。

如果我的服务必须考虑四个操作(如启动,更新,挂起和重新启动服务),我应该有一个带有一个操作的WSDL(例如,EntertainmentService)并将操作作为请求属性,或者我应该定义一个具有多个操作的WSDL。

 <request>
     <type><!-- start | update | suspend | restart --></type>
     <name></name>
     <address></address>
     <services>
         <tv></tv>
         <internet></internet>
         <phone></phone>
     </services>

如果建议使用一个具有多个操作的WSDL,我如何在Spring-WS中指定操作列表。目前,我的spring servlet上下文有一个DefaultWsdl11Definition,WSDL是在运行时生成的。

<bean id="EntertainmentService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition" lazy-init="true">
    <property name="schema">
        <bean class="org.springframework.xml.xsd.SimpleXsdSchema">
            <property name="xsd" value="/WEB-INF/schemas/entertainmentService.xsd"/>    
        </bean>
    </property>
    <property name="portTypeName" value="EntertainmentService"/>
    <property name="locationUri" value="/endpoints"/>
</bean>

如果所有四个操作都使用相同的WSDL,那么客户端(使用Web服务)进行一个操作(使用不同的操作)比调用多个操作要容易得多。第二种方法是否有任何优势(每种请求类型都有不同的操作)。

1 个答案:

答案 0 :(得分:0)

您的问题更多的是概念设计,而不是网络服务。一般来说,我认为最好保持每个操作都是原子的。在您的情况下,这意味着您将拥有与要执行的操作一样多的操作。

从长远来看,假设您想通过添加一天的数量来修改“暂停”操作(暂停xx天或暂停xx天)

  1. 您只需要修改与动作暂停相关的部分
  2. 您只需要测试暂停操作
  3. 当我使用spring web-service时,我使用了静态wsdl。如果你改变你的xsd,spring会知道有几个动作/操作。