【问题标题】:Apache Axis 1: Disable serialization of xsd:float in scientific notationApache Axis 1:以科学计数法禁用 xsd:float 的序列化
【发布时间】:2017-11-16 09:01:31
【问题描述】:

我们有一个 web 服务客户端调用一个服务(rpc 编码,我们仍然使用 Axis 1 的原因),该服务将一些值定义为 xsd:float,但拒绝以科学计数法传递的值。我知道这是完全符合标准的客户端行为 (https://www.w3.org/TR/xmlschema-2/ 3.2.4.1) 并且可能是服务器使用xsd:decimal 的正确方式我想知道是否有办法告诉轴不要使用科学xsd:floatxsd:double 的符号

可能相关:BigDecimal has scientific notation in soap message 询问如何使用 JAX-B 实现此目的,接受的答案建议使用 XMLAdapter。也许axis存在类似的机制。

【问题讨论】:

    标签: web-services soap xsd axis


    【解决方案1】:

    看起来像在 Axis (http://axis.apache.org/axis/java/user-guide.html#XML_-_Java_Data_Mapping_in_Axis) 中,您可以为(例如)float 定义自己的序列化器和反序列化器(您必须更改 xsd: ;您有权访问吗?)。这是通过 typeMapping 完成的:

    <typeMapping qname="ns:local" xmlns:ns="someNamespace"
        languageSpecificType="java:my.java.thingy"
        serializer="my.java.Serializer"
        deserializer="my.java.DeserializerFactory"
        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    

    【讨论】:

    • 这个typeMapping可以应用于原始类型吗?如果可能的话,我会尽量避免更改 xsd,因为有时我们会得到更新。如果需要更改 xsd,我想将浮点数更改为小数就可以了,不是吗?
    • 如果该字段是可空的,那么它会自动装箱到浮点数中。
    • 在我的情况下它是不可空的。所以我想除了改变 xsd 没有可行的选择。
    猜你喜欢
    • 2021-07-04
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多