Wsdl 可选参数在生成的 java 存根代码中成为必需的

Posted

技术标签:

【中文标题】Wsdl 可选参数在生成的 java 存根代码中成为必需的【英文标题】:Wsdl optional params become mandatory in generated java stub code 【发布时间】:2014-11-11 13:37:39 【问题描述】:

我是网络服务的新手。 我已经从提供的 wsdl 生成了存根。 我观察到的是存根生成的代码,要求我提供强制性的可选参数。 例如这是wsdl文件中的方法之一。

        <complexType name="OPP_BOOK_FACT">
           <sequence>
              <element form="unqualified" name="Descriptions" type="tns:Descriptions" minOccurs="0"/>
              <element form="unqualified" name="CustomerID" type="tns:CustomerConfirmationID" minOccurs="0"/>
              <element form="unqualified" name="UID" type="tns:UPRID" minOccurs="0"/>
              <element form="unqualified" name="Ext" type="tns:ExtAuth" minOccurs="0"/>
              <element form="unqualified" name="Partner" type="tns:Partner"/>
              <element form="unqualified" name="Subscriber" type="tns:Subscriber"/>
              <element form="unqualified" name="FactBook" type="tns:FactBook"/>
              <element form="unqualified" name="FactAuth" type="tns:FactAuth"/>
              <element form="unqualified" name="Price" type="tns:Price"/>
              <element form="unqualified" name="SubseReqData" type="tns:SubseReqData" minOccurs="0"/>
              <element form="unqualified" name="FactBundleTemplate" type="tns:FactBundleTemplate" minOccurs="0"/>
              <element form="unqualified" name="ContentInfo" type="tns:ContentInfo" minOccurs="0"/>
              <element form="unqualified" name="Discount" type="tns:Discount" minOccurs="0"/>
                <element form="unqualified" name="FactShoppingBasket" type="tns:FactShoppingBasket" minOccurs="0"/>
           </sequence>
        </complexType>

如果您注意到例如“CustomerID”、“UID”和“Ext”是可选参数,例如 minOccurs="0"。 但是生成的stub api如下。

com.xstg.www.soap.schemas.services.v80.Xaction80Stateful_wsdl.Xaction80StatefulPortType.OPP_BOOK_F ACT(Description[] arg0, Long arg1, String arg2, ExtAuthElement[] arg3, 合作伙伴 arg4, 订阅者 arg5, FactBook arg6、FactAuth arg7、Price arg8、SubseReqData arg9、FactBundleTemplate arg10、ContentInfo arg11、折扣 arg12、FactShoppingBasket arg13) 抛出 RemoteException

很明显,要从客户端调用此方法,我还必须明确提供所有可选参数变量。 我已经使用&lt;axis-wsdl2java&gt; ant 调用来生成存根。

我可以知道这是什么原因吗?据我说,客户存根不应该期望我也提供所有可选参数。 如果您需要任何其他信息,请告诉我。

更新: 我们使用的是轴 1.4。上述存根是使用axis-1.4 生成的。 我对axis2进行了同样的尝试。在axis2中生成的存根不同。但是我需要使用axis-1.4,因为旧的客户端代码已经使用这个版本开发了

【问题讨论】:

【参考方案1】:

您是否介意尝试添加 nillable="true"。

喜欢:

<element form="unqualified" name="Ext" type="tns:ExtAuth" nillable="true" minOccurs="0"/>

【讨论】:

我试过了,但没有运气。看起来 nillable="true" 是说参数可以取空值或不取值。以下链接中有一个很好的解释关于这个dimuthu.org/blog/2008/08/18/…

以上是关于Wsdl 可选参数在生成的 java 存根代码中成为必需的的主要内容,如果未能解决你的问题,请参考以下文章

axis2 wsdl生成java文件 参数类型与wsdl定义的不一样

从 WSDL 生成请求/响应 XML

C# 的 WSDL 生成器

怎么用cxf的wsdl2java解析wcf生成的wsdl

来自 WSDL 的 Spring-ws 客户端

java通过wsdl调用webService查看返回参数