Spring-WS生成WSDL而不进行操作

时间:2009-07-20 20:33:18

标签: java web-services wsdl spring-ws

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 个答案:

答案 0 :(得分:27)

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

来自the documentation

  

DefaultWsdl11Definition哪个   从XSD架构构建WSDL。这个   定义迭代所有元素   模式中找到的元素,和   为所有元素创建消息。   接下来,它为。创建WSDL操作   所有以定义的结尾的消息   请求或响应后缀。该   默认请求后缀是Request;该   默认响应后缀是Response,   虽然这些可以通过设置来改变   requestSuffix和responseSuffix   属性,分别。它也是   构建一个portType,绑定和   基于运营的服务。

     

例如,如果我们的Orders.xsd架构   定义GetOrdersRequest和   GetOrdersResponse元素,   XsdBasedSoap11Wsdl4jDefinitionBuilder   将创建一个GetOrdersRequest和   GetOrdersResponse消息,和   GetOrders操作,放在一个   订单端口类型。