gpt4 book ai didi

java - CXF:附加 xsd 方案以制作 WSDL

转载 作者:行者123 更新时间:2023-12-04 05:54:12 25 4
gpt4 key购买 nike

我正在以某种契约优先的条款开发 Web 服务 - 首先,我创建 xsd 方案,其次,在它们上生成带有 JAXB 的类,然后,我想将这些方案附加到 WSDL。这是我的 applicationContext,xml:

<jaxws:endpoint id="webService" 
implementor="#wsImplementer"
address="/service">

<jaxws:schemaLocations>
<jaxws:schemaLocation>classpath:/xsd/RequestWrapper.xsd</jaxws:schemaLocation>
</jaxws:schemaLocations>

</jaxws:endpoint>

问题是:RequestWrapper.xsd 包含 <xs:include schemaLocation="ComplexTypes.xsd"/>
ComplexTypes.xsd 包含 <xs:include schemaLocation="SimpleTypes.xsd"/> .因此,当 CXF 生成 WSDL 时,它包含 RequestWrapper.xsd 方案,其中包含 http://service/path?xsd=ComplexTypes.xsd没关系,但是如果您转到此链接,您会看到 ComplexTypes.xsd 和 <xs:include schemaLocation="SimpleTypes.xsd"/> .当然,这不是有效的 WSDL,因为它无法加载 SimpleTypes.xsd。

我设法找到了解决方法:

1)创建一个新的方案,其中包括:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://custom/data"
xmlns="http://custom/data">

<xs:include schemaLocation="SimpleTypes.xsd"/>
<xs:include schemaLocation="ComplexTypes.xsd"/>
<xs:include schemaLocation="RequestWrapper.xsd"/>

2)从其他方案中删除所有包含。

3)

<jaxws:schemaLocations>
<jaxws:schemaLocation>classpath:/xsd/comprise.xsd</jaxws:schemaLocation>
</jaxws:schemaLocations>

这对我有用,但是,如您所见,所有方案都无效(没有包含)。在公开 Web 服务之前一直评论包括在内,这看起来真的很乏味。有人可以帮我吗?如何度过这一切?

所以,我需要某种方案位置解析器......

最佳答案

我想知道你为什么在 applicationContext.xml 中指定 xsd 模式?可能我不完全理解您的问题,但是当我使用 JAXB 开发 Web 服务时,只包含

<wsdl:definitions name="myWebService" ...>
<wsdl:types>
<xsd:schema>
<xsd:include namespace="your namespace comes here" schemaLocation="RequestWrapper.xsd"/>
</xsd:schema>
</wsdl:types>
...other part of wsdl

因此请求包装器包含其他 xsd 文件,您可以根据需要在 RequestWrapper.xsd 中制作“包含”。

附言在 xsd 文件中像这样导入

<import namespace="here your namespace" schemaLocation="common.xsd"/>

关于java - CXF:附加 xsd 方案以制作 WSDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com