【问题标题】:Is there a way to expose a static XSD in Spring WS 2?有没有办法在 Spring WS 2 中公开静态 XSD?
【发布时间】:2025-12-30 13:10:04
【问题描述】:

如果,例如orders.wsdl导入Orders.xsd,如何使用static-wsdl进行配置

<sws:static-wsdl id="orders" location="/WEB-INF/wsdl/orders.wsdl"/>

这样可以在浏览器中查看 Orders.xsd,例如 http://host/context/Orders.xsd

动态 wsdl 支持。

<sws:dynamic-wsdl id="orders"
    portTypeName="Orders"
    locationUri="http://localhost:8080/ordersService/">
  <sws:xsd location="/WEB-INF/xsd/Orders.xsd"/>
</sws:dynamic-wsdl>

但是 static-wsdl 没有 sws:xsd 属性。

【问题讨论】:

    标签: java spring xsd wsdl spring-ws


    【解决方案1】:

    没有 namspace 支持,但你可以这样做 -

    <bean id="Orders" class="org.springframework.xml.xsd.SimpleXsdSchema">
        <property name="xsd" value="classpath:/Orders.xsd" />
    </bean>
    

    这将解析 wsdl 文件中引用的 xsd -

    <wsdl:types>
        <xsd:schema elementFormDefault="qualified">
            <xsd:import namespace="..." schemaLocation="Orders.xsd"></xsd:import>
        </xsd:schema>
    </wsdl:types>
    

    【讨论】:

    • 这是我在 spring-ws 1.5 中所做的。看起来我们被这种有点混乱的方法所困。 Spring 建议使用静态 wsdl,但他们不能为导入的 xsd 添加 'sws:xsd location'。打败我。
    【解决方案2】:

    或者你可以用那个来打勾

     <wsdl:types>
    
    
       <xs:schema targetNamespace="...."
              elementFormDefault="qualified">
    
                    <xs:include schemaLocation="xsd/Order.xsd"/>
    
       </xs:schema>
    

    【讨论】:

    • 您应该提供一些有关此代码如何解决问题的详细信息。我通过“低质量帖子”列表找到了这个答案,所以它有被删除的危险。