gpt4 book ai didi

java - JAX-WS 在不同的 URL 中有 XSD 模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:23 25 4
gpt4 key购买 nike

我使用 JAX-WS 创建了一个小型 Web 服务。 WSDL 文件具有这样的 TYPES 元素。

<types>
<xsd:schema>
<xsd:import namespace="http://ws.poc.mawia/" schemaLocation="http://localhost:777/ws/hello?xsd=1"/>
</xsd:schema>
</types>

Web 服务的 URL 是 http://localhost:777/ws/hello?wsdl,XSD 是 http://localhost:777/ws/hello?xsd=1 。不同位置的 XSD Schema 文件具有这样的数据类型定义。

...
...
<xs:complexType name="student">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="rollNo" type="xs:int"/>
</xs:sequence>
</xs:complexType>
...
...

我见过的大多数 WSDL 文件通常在 WSDL 文件本身内具有完整的 XSD 定义,但 JAX-WS 将其放置在不同的位置。

这是应该的吗?如何配置 JAX-WS 以将所有 XSD 定义放在一个 WSDL 文件中?

最佳答案

Is this how it should be?

将 XSD 与 WSDL 分开是 JAX-WS 中的默认行为,您不必为此担心太多。最新的 WS 框架(包括 WCF)通常能够处理该问题。根据 XSD 的大小,导入它可能会使 WSDL 对人类来说更易读。对于小型 Web 服务,拥有嵌入式模式肯定会更容易,但导入它也不是什么大问题。

How can I configure JAX-WS to place all XSD definitions in one WSDL file?

我不知道有什么直接的方法可以让运行时将模式嵌入到 WSDL 中,但是有一种解决方法可以实现这一点:

  1. 发布您的端点并保存 WSDL 和 XSD
  2. 手动将 XSD 的内容复制到 WSDL 的 types 部分并替换那里的模式导入
  3. 将合并的 WSDL 文件保存在您的应用程序可以将其作为资源访问的地方
  4. 让您的网络服务加载合并的 WSDL。这将停止动态生成,但是,每次对界面进行更改时,您都必须手动更新 WSDL

您可以通过自定义@WebService 注解来实现4.。这可能看起来有点像这样:

@WebService( wsdlLocation = "MyWebService.wsdl")
public class MyWebService { .... }

关于java - JAX-WS 在不同的 URL 中有 XSD 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030574/

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