如何在Spring-WS中将自定义SOAP-Header元素添加到生成的WSDL中

时间:2009-08-24 06:34:25

标签: java web-services soap wsdl spring-ws

我们正在从WebLogic Web服务迁移到Spring-WS(1.5.X)。 目前我们面临一个问题:

我们需要将一个上下文对象(在WLS上,它作为SOAP-Header元素传递)传递给仍在Spring-WS驱动的服务上运行在WLS上的其他服务。 header元素仍然在客户端制定,新创建的WS(Spring-WS)应该将它传递给其他服务。

我可以想象如何传递自定义元素:覆盖doWithMessage(WebServiceMessage消息)方法......

有没有办法在DefaultWsdl11Definition的帮助下生成wsdl以包含该自定义头元素? 参见示例:

<wsdl:operation name="GetSomeInformation">
    <soap:operation
        soapAction="http://www.dummyservice.com/InformationService/GetSomeInformation" />
    <wsdl:input>
        <soap:body use="literal" />
        <soap:header message="ctx:ServiceContextMessage" part="serviceContext" use="literal" />
    </wsdl:input>
    <wsdl:output>
        <soap:body use="literal" />
    </wsdl:output>
    <wsdl:fault name="Error">
        <soap:fault name="Error" use="literal" />
    </wsdl:fault>
</wsdl:operation>

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

我们的项目遇到了类似的问题。检查扩展SuffixBasedPortTypesProvider,SuffixBasedMessagesProvider和Soap11Provider。我们使用InliningXsdSchemaTypesProvider来导入我们用于构建WSDL的模式。如果您通过调试器运行WSDL生成,您将了解其工作原理。 Spring代码易于遵循和扩展。