使用Jax WS从WSDL生成的Java代码没有正确映射数组/列表?

时间:2015-04-20 03:35:15

标签: arrays xml list wsdl jax-ws

我设法使用Jax WS从WSDL生成java代码。但是,代码没有按预期工作。

我使用SoapUI测试WSDL,它能够正确返回结果。

比较xml(java代码和SoupUI),我发现java代码的xml标记不正确。

**********使用SoupUI ***************

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sun="XXX/" xmlns:sun1="XXX.Contracts/">
   <soapenv:Header/>
   <soapenv:Body>
      <sun:SearchXXX>
         <!--Optional:-->
         <sun:Identifier>?</sun:Identifier>
         <!--Optional:-->
         <sun:XXXSearchField>?</sun:XXXSearchField>
         <!--Optional:-->
         <sun:query>?</sun:query>
         <!--Optional:-->
         <sun:searchType>?</sun:searchType>
         <!--Optional:-->
         <sun:responseParameters>
            <!--Optional:-->
            <sun1:RelatedXXX>
               <!--Zero or more repetitions:-->
               <sun1:RelatedXXX>?</sun1:RelatedXXX>
            </sun1:RelatedXXX>
         </sun:responseParameters>
      </sun:SearchXXX>
   </soapenv:Body>
</soapenv:Envelope>

**********使用SoupUI ***************

来自Java代码的

********** ***************

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <SearchXXX xmlns="...">
            <Identifier>???</Identifier>
            <XXXSearchField>???</XXXSearchField>
            <query>???</query>
            <searchType>???</searchType>
            <responseParameters>
                <ns2:ArrayOfRelatedXXX>
                    <ns2:RelatedXXX>???</ns2:RelatedXXX>
                    <ns2:RelatedXXX>???</ns2:RelatedXXX>
                </ns2:ArrayOfRelatedXXX>
            </responseParameters>
        </SearchXXX>
    </S:Body>
</S:Envelope>
来自Java代码的

********** ***************

从上面可以看出,在responseParameters标签下,java代码正在创建&#34; ArrayOfRelatedXXX&#34;标签(不是RelatedXXX)。这导致呼叫失败。

有没有办法为这种情况正确生成java代码?我附上了wsdl部分如下。它似乎使用complexType name&#34; ArrayOfRelatedXXX&#34;而不是元素名称。

********** WSDL ************

<xs:complexType name="ResponseParameters">
    <xs:sequence>
        <xs:element minOccurs="0" name="RelatedXXX" nillable="true" type="tns:ArrayOfRelatedXXX"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="ResponseParameters" nillable="true" type="tns:ResponseParameters"/>
<xs:element name="RelatedXXX" nillable="true" type="tns:ArrayOfRelatedXXX"/>
<xs:complexType name="ArrayOfRelatedXXX">
    <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="RelatedXXX" type="tns:RelatedXXX"/>
    </xs:sequence>
</xs:complexType>

********** WSDL ************

请帮忙。

感谢。

0 个答案:

没有答案