Java JAX-WS方法&x27;传递字符串值时,s十进制字段为空

Java JAX-WS方法&x27;传递字符串值时,s十进制字段为空,java,soap,jax-ws,decimal,bigdecimal,Java,Soap,Jax Ws,Decimal,Bigdecimal,我有Jaxws Soap web服务。My“myMethod”方法有一个十进制类型的字段 以下是我的web服务界面: @WebService(name = "myWs", targetNamespace = "someNamespace") @Local public interface myWsPortType { @WebMethod @RequestWrapper(localName = "myMethod", className = "com.exampl

我有Jaxws Soap web服务。My“myMethod”方法有一个十进制类型的字段

以下是我的web服务界面:

@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并将字符串值(而不是十进制)作为参数传递时,不会引发异常,myField的值为null

下面是Soap请求示例

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

测试

当传递了不正确的数据类型时,如何使我的ws-throw异常?

看起来XSD模式生成得很好,您缺少的是通知JAX-ws使用模式验证请求和响应的注释

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

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

您服务的XSD是否指示
myField
XSD:decimal
?@AviramSegal这里是我添加的wsdl的一个片段
@SchemaValidation
,但它仍然不会引发任何异常。有两个SchemaValidation注释(其中一个在包中包含内部注释,另一个不包含内部注释),您是否尝试了这两个注释?