【问题标题】:JAX-WS method's Decimal field is NULL when String value is passed传递字符串值时,JAX-WS 方法的 Decimal 字段为 NULL
【发布时间】:2012-12-20 11:27:12
【问题描述】:

我有 Jaxws Soap 网络服务。我的 "myMethod" 方法有一个小数类型字段。

这是我的网络服务界面:

@WebService(name = "myWs", targetNamespace = "someNamespace")
@Local 
public interface myWsPortType {     
    @WebMethod  
    @RequestWrapper(localName = "myMethod", className = "com.example.MyMethodRequest")  
    public Result myMethod(@WebParam(name = "parameters", mode = Mode.IN) MyMethodParameters parameters); 
}

这是参数类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType()
public class MyMethodParameters implements java.io.Serializable {
    @FieldValidation(maxLength = 12)
    @XmlElement(name = "myField", required = false)
    private java.math.BigDecimal myField;
}

当我在 myField 中传递正确类型的数据时,一切正常。

但是,问题是当我调用 myMethod 并将 String 值(而不是 Decimal)作为参数传递时,不会引发异常并且 myField 的值是 null

这是 Soap 请求示例

<soapenv:Envelope>
   <soapenv:Header/>
   <soapenv:Body>
      <iss:myMethod>
         <parameters>
            <myField>test</myField>
         </parameters>
      </iss:myMethod>
   </soapenv:Body>
</soapenv:Envelope>

当传递不正确的数据类型时,如何让我的 ws 抛出异常?

【问题讨论】:

  • 你的服务的 XSD 是否指示 myFieldxsd:decimal
  • @AviramSegal 这是来自我的 wsdl 的 sn-p

标签: java soap jax-ws decimal bigdecimal


【解决方案1】:

看起来 XSD Schema 生成得很好,您缺少的是 SchemaValidation 注释,用于告诉 JAX-WS 使用该模式验证请求和响应。

只需将@SchemaValidation 添加到您的服务中:

@WebService(name = "myWs", targetNamespace = "someNamespace")
@SchemaValidation
@Local 
public interface myWsPortType { ... }

【讨论】:

  • 我添加了@SchemaValidation,但它仍然没有抛出任何异常。
  • 有 2 个 SchemaValidation 注释(一个在其包中带有内部一个没有)您是否都尝试过?
猜你喜欢
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多