在 Soap Web 服务中传递 BigInteger 参数

Passing a BigInteger parameter in a Soap Webservice

我正在 JEE 的 Wildfly 10 上开发应用程序。它使用 SOAP 网络服务。我正在考虑传入一个 BigInteger 类型的参数。它工作正常,但我不确定这是否可取。 BigInteger 在 WSDL 中是如何表示的?

@WebMethod(operationName = "myService")
public myResult myService(
            @WebParam(name = "param1") BigInteger param1)
            throws ServiceException {

    }

异常可能是因为wrking 服务使用xsd:integer 类型来表示您的BigInteger,而其他服务使用xsd:int 类型。一个可以正确表示 BigIntegers 但另一个不能

下面的table给出了java类型与其序列化xml版本

之间的通用映射

图片参考:(IBM Knowledge base 因此,正如您所看到的,BigInteger 应该被序列化为 xsd:integer。还有另一种整数类型:xsd:int。它用于表示带符号的 32 位整数,因此不适合 BigInteger 的范围。另一方面,xsd:integer 是一个无界整数值的表示,因此它将很好地覆盖 BigInteger。

如果您遇到这些问题,您可能需要一个 xsd 架构来派生您的 wsdl 类型,您可以在您的 wsdl 文件中使用以下类型的引用: 例如在 your-wsdl-file.wsdl 你可以添加(在 wsdl:definitions 标签之后)

<wsdl:types>
    <xsd:schema>
         <xsd:import namespace="http://your/namespace/here" schemaLocation="your-schemafile.xsd"/>
       </xsd:schema>
</wsdl:types>

在您的 xsd 中,您可以使用 xsd:integer 类型强制正确表示您的 BigInteger 类型。