Spring-WS 无需操作即可生成 WSDL

2022-09-04 06:48:00

Spring-WS生成WSDL时无需在绑定标签中执行任何操作...你知道为什么吗?

有我的 spring-ws-service.xml:

    <import resource="classpath*:application-context.xml" />

    <!-- Register PayloadRootAnnotationMethodEndpointMapping -->
    <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" />

    <!-- Register Endpoint -->
    <bean id="tasktablerServiceEndpoint" class="tasktabler.mpk.service.TasktablerServiceEndpoint" />

    <!-- Configure XML Marshaller -->
    <bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
        <constructor-arg ref="marshaller" />
    </bean>

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>tasktabler.mpk.databinding.OptimizeRequest</value>
            </list>
        </property>
    </bean>

    <!-- Add automatic WSDL generation support -->
    <bean id="tasktabler" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
        <property name="schema" ref="schema" />
        <property name="portTypeName" value="tasktabler" />
        <property name="locationUri" value="http://localhost:8080/tasktabler" />
        <property name="targetNamespace" value="http://tasktabler" />
    </bean>

    <bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
        <property name="xsd" value="/WEB-INF/schema.xsd" />
    </bean>

WSDL还有wsdl绑定部分:

   <wsdl:binding name="tasktablerSoap11" type="tns:tasktabler">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
   </wsdl:binding>

提前致谢,埃塔姆。


答案 1

DefaultWsdl11Definition 尝试通过检查架构中的类型来自动生成 WSDL。如果您的架构不符合其预期的模式,则无法很好地完成它。

文档中

默认 Wsdl11 定义,它从 XSD 模式构建 WSDL。此定义循环访问架构中的所有元素元素,并为所有元素创建一条消息。接下来,它为以定义的请求或响应后缀结尾的所有消息创建 WSDL 操作。默认请求后缀是请求;默认响应后缀是 Response,尽管可以通过分别设置 requestSendfix 和 responseSuffix 属性来更改这些后缀。它还基于操作生成 portType、绑定和服务。

例如,如果我们的 Orders.xsd 架构定义了 GetOrdersRequest 和 GetOrdersResponse 元素,XsdBasedSoap11Wsdl4jDefinitionBuilder 将创建 GetOrdersRequest 和 GetOrdersResponse 消息,以及 GetOrders 操作,该操作放在 Orders 端口类型中。


答案 2

推荐