【问题标题】:wsimport and WSDL with duplicate variables具有重复变量的 wsimport 和 WSDL
【发布时间】:2013-02-08 22:58:00
【问题描述】:

我正在尝试对我无法修改的 WSDL 文件运行 wsimport。 WSDL 的一部分如下所示:

<xsd:complexType name="Bapiitemex">
    <xsd:sequence>
        <xsd:element name="ItmNumber" type="n0:numeric6"/>
        <xsd:element name="PoItmNo" type="n0:char6"/>
        <xsd:element name="Material" type="n0:char18"/>
        <xsd:element name="MatEntrd" type="n0:char18"/>
        <xsd:element name="ShortText" type="n0:char40"/>
        <xsd:element name="NetValue" type="n0:numeric15"/>
        <xsd:element name="Currency" type="n0:cuky5"/>
        <xsd:element name="Subtotal1" type="n0:numeric15"/>
        <xsd:element name="Subtotal2" type="n0:numeric15"/>
        <xsd:element name="Subtotal3" type="n0:numeric15"/>
        <xsd:element name="Subtotal4" type="n0:numeric15"/>
        <xsd:element name="Subtotal5" type="n0:numeric15"/>
        <xsd:element name="Subtotal6" type="n0:numeric15"/>
        <xsd:element name="SUBTOTAL1" type="n0:decimal23.4"/>
        <xsd:element name="SUBTOTAL2" type="n0:decimal23.4"/>
        <xsd:element name="SUBTOTAL3" type="n0:decimal23.4"/>
        <xsd:element name="SUBTOTAL4" type="n0:decimal23.4"/>
        <xsd:element name="SUBTOTAL5" type="n0:decimal23.4"/>
        <xsd:element name="SUBTOTAL6" type="n0:decimal23.4"/>
    </xsd:sequence>
</xsd:complexType>

wsimport 不满意,因为它包含了多个仅大小写不同的元素('Subtotal1' 与 'SUBTOTAL1' 等)。具体错误是

java.lang.IllegalArgumentException:尝试创建相同的字段两次:subtotal1

在研究此问题的解决方案时,我尝试使用“-B-XautoNameResolution”选项运行 wsimport,但没有效果。似乎唯一可能的解决方案是使用外部绑定文件来明确告诉 wsimport 如何命名变量。但是,我也很难做到这一点。这是我试图仅用于其中一个重复变量的绑定文件:

<jxb:bindings version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<jxb:bindings node="//xsd:complexType[@name='Bapiitemex']//xsd:element[@name='Subtotal1']">
    <jxb:property name="testSubtotal1"/>
</jxb:bindings>

尽我所能,wsimport 似乎不明白我要它做什么。我对“节点”属性使用的 XPath 语法不满意,返回错误:

“//xsd:complexType[@name='Bapiitemex']//xsd:element[@name='Subtotal1']”的 XPath 评估导致空目标节点

关于如何说服 wsimport 为我生成 Java 类的建议?

【问题讨论】:

    标签: java wsdl wsimport duplicates


    【解决方案1】:

    经过更多的摸索,我终于想出了如何编写一个绑定文件来使事情正常进行。我的解决方案主要基于我在this post 中找到的信息。

    请注意,我有 6 种元素名称,它们仅在大小写上有所不同。下面发布的解决方案仅解决其中一个冲突。其余部分可以通过添加更多内部 元素来解决。

    <jaxws:bindings
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        wsdlLocation="PricingDirectCall.wsdl">
    
        <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='urn:sap-com:document:sap:soap:functions:mc-style']/xsd:complexType[@name='Bapiitemex']/xsd:sequence/xsd:element[@name='Subtotal1']">
            <jaxb:property name="testSubtotal1"/>
        </jaxws:bindings>
    

    我必须克服的最大障碍是摆弄“节点”属性以使 XPath 正确(冲突实际上发生在 WSDL 内的内部 XSD 中)。在我解决了这个问题之后,我只需要确保我指定了正确的 元素。指定 会更改生成变量的数据类型,创建具有指定名称的内部类,这不是我想要的。指定 会更改生成变量的名称,从而解决重复名称冲突。

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多