代码之家  ›  专栏  ›  技术社区  ›  CocoNess

在Soap Web服务中传递BigInteger参数

  •  0
  • CocoNess  · 技术社区  · 9 年前

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

    @WebMethod(operationName = "myService")
    public myResult myService(
                @WebParam(name = "param1") BigInteger param1)
                throws ServiceException {
    
        }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   alainlompo    9 年前

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

    下表提供了java类型及其序列化xml版本之间的常见映射

    java types xml serialization

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

    如果您有这些问题,您可能需要xsd模式来派生wsdl类型,您可以在wsdl文件中使用以下类型的引用: wsdl:定义 标签)

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

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