gpt4 book ai didi

java - 用于枚举的 wsimport JAXB 类

转载 作者:行者123 更新时间:2023-11-30 11:20:10 26 4
gpt4 key购买 nike

我有一个 WSDL,其中包含一些 simpleType 枚举限制:

<element name="employeeId">
<simpleType>
<restriction base="string">
<maxLength value="2"/>
<enumeration value="EL"/>
</restriction>
</simpleType>
</element>

(是的,我知道这个例子只有一个枚举值。)在一些早期的特定于供应商的工具中,它们生成 Java 枚举,但在我当前的 wsimport (JAX-WS RI 2.2.4-b01) 中它们不是。

我做了很多搜索,找到了很多关于自定义映射的讨论。我可能不愿意手动映射各个类和值,所以我试图找到一些有效的语法来全局执行此操作。

然而,我的大部分阅读似乎表明默认应该是创建这些枚举: https://jaxb.java.net/tutorial/section_2_2_9-Defining-an-Enumeration.html#Defining%20an%20Enumeration

如果您不需要它们,则必须明确禁用它们。例如https://jaxb.java.net/nonav/2.2.5-5/docs/ch03.html#compiling-xml-schema-avoid-strong-databinding

这应该是正确的吗?如果是这样,有什么想法为什么没有发生吗?

附加问题,枚举生成是否也应该与 xsd:token 一起发生,还是仅与 xsd:string 一起发生?

最佳答案

据我所知,没有针对此的全局或通用解决方案或设置。您需要一个绑定(bind)自定义文件。有一个单独的模式,类似于这个的文件对我有用:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
jaxb:version="1.0">
<jaxb:bindings schemaLocation="your_schema_name.xsd" node="/xs:schema">

<jaxb:bindings node="//xs:element[@name='employeeId']/xs:simpleType">
<jaxb:typesafeEnumClass name="employeeId" />
</jaxb:bindings>

</jaxb:bindings>
</jaxb:bindings>

运行 wsimport 时,使用 -b 开关使其使用您的绑定(bind)自定义(wsimport -b 文件名 ...)。

如果您在 wsdl 中嵌入了模式,请尝试这种绑定(bind)定制:

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
jaxb:version="2.0"
wsdlLocation="your_wsdl_name.wsdl">

<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:element[@name='employeeId']/xs:simpleType">
<jaxb:typesafeEnumClass name="someElement" />
</jaxws:bindings>

</jaxws:bindings>

我也尝试将其作为外部文件 (wsimport -b filename.xjb ...)。注意:我必须使用 jaxws:bindings 而不是 jaxb:bindings 才能使 XPath 解析正常工作。不过,jaxb:typesafeEnumClass 仍在 jaxb 命名空间中。

关于java - 用于枚举的 wsimport JAXB 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876861/

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