gpt4 book ai didi

java - 使用 JAX-WS 绑定(bind)自定义重命名具有相同名称的 WSDL 元素

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:12 28 4
gpt4 key购买 nike

我需要为外部提供的 WSDL 文件创建一个 JAX-WS 客户端。 WSDL文件是使用 JAX-WS 使用 Apache CXF 通过代码优先方法生成的。我遇到的问题与具有相同名称的内部枚举类有关(在在本例中名称为 EventCause)。

在通过 wsimport 工具生成期间,出现以下警告(遗憾的是德语):

src-resolve: Name 'ns1:eventCause' kann nicht als 'type definition'-Komponente aufgelöst werden.
Zeile [n] von file:/D:/MyService.wsdl#types?schema1
src-resolve: Name 'ns2:eventCause' kann nicht als 'type definition'-Komponente aufgelöst werden.
Zeile [n] von file:/D:/MyService.wsdl#types?schema1

我尝试创建一个绑定(bind)配置文件来重命名 eventCauseWSDL 中定义的元素,但我无法使其工作。

下面提供了 WSDL 文件 MyService.wsdl 的相关部分:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="MyService"
targetNamespace="https://service.example.org/my/info"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="https://service.example.org/my/info"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xs:schema xmlns:ns1="org.example.core.MyNotification"
xmlns:ns2="org.example.core.MyRequest"
xmlns:tns="https://service.example.org/my/info"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified"
elementFormDefault="unqualified"
targetNamespace="https://service.example.org/my/info">
<xs:import namespace="org.example.core.MyNotification"/>
<xs:import namespace="org.example.core.MyRequest"/>

<!-- Shortened... -->

<xs:complexType name="myNotification">
<xs:complexContent>
<xs:extension base="tns:fooEvent">
<xs:sequence>
<xs:element name="eventCause" type="ns1:eventCause"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<!-- Shortened... -->

<xs:complexType name="myRequest">
<xs:complexContent>
<xs:extension base="tns:fooEvent">
<xs:sequence>
<xs:element name="eventCause" type="ns2:eventCause"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<!-- Shortened... -->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="org.example.core.MyRequest" version="1.0">

<xs:simpleType name="eventCause">
<xs:restriction base="xs:string">
<xs:enumeration value="FOO"/>
<xs:enumeration value="BAR"/>
</xs:restriction>
</xs:simpleType>

</xs:schema>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="org.example.core.MyNotification" version="1.0">

<xs:simpleType name="eventCause">
<xs:restriction base="xs:string">
<xs:enumeration value="FOO"/>
<xs:enumeration value="BAR"/>
<xs:enumeration value="BAZ"/>
</xs:restriction>
</xs:simpleType>

<!-- Shortened... -->

</wsdl:definitions>

所以我的问题是:

  1. 我必须在 JAX-WS 绑定(bind)文件中指定什么才能重命名 WSDL 中指定的两个 eventCause 元素?
  2. 如果有警告,上述情况是否可行?
  3. 是否需要首先修复警告?如果是这样,如何解决该警告?

最佳答案

我已经找到解决办法了。 JAX-WS 绑定(bind)文件必须与 wsimport 一起使用(例如 bindings.xjb):

<?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:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb
http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:version="2.1">
<jaxb:bindings node="//xs:element[@name='eventCause']/xs:simpleType">
<jaxb:typesafeEnumClass name="EventCause" />
</jaxb:bindings>
</jaxws:bindings>

该问题与 No enums generated by jax-ws ri 2.2.1 for amazon ecs wsdl file 有关.

关于java - 使用 JAX-WS 绑定(bind)自定义重命名具有相同名称的 WSDL 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287640/

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