传递String值时,JAX-WS方法的Decimal字段为NULL

时间:2012-12-20 11:27:12

标签: java soap jax-ws decimal bigdecimal

我有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 的值为

这是Soap Request示例

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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