我有一个带有嵌入式Schema的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
生成枚举?
答案 0 :(得分:1)
据我所知,没有全球或一般的解决方案或设置。您需要一个绑定的自定义文件。 有一个单独的模式,类似于这个文件的工作对我来说:
<?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开关使其使用绑定自定义(wsimport -b filename ...)。
如果您在wsdl中嵌入了架构,请尝试此绑定自定义:
<?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命名空间中。