5

Jaxws Soap Web サービスがあります。私の「myMethod」メソッドには、10 進数型のフィールドがあります。

これが私の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を呼び出して (Decimal ではなく) String 値をパラメーターとして渡すと、例外がスローされず、 myFieldの値がnullになることです。

Soap Request の例を次に示します。

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

間違ったデータ型が渡されたときに ws が例外をスローするようにするにはどうすればよいですか?

4

1 に答える 1

3

XSD スキーマが正常に生成されているように見えますが、欠落しているのは、JAX-WS に要求と応答をスキーマで検証するように指示するSchemaValidationアノテーションです。

サービスに追加@SchemaValidationするだけです:

@WebService(name = "myWs", targetNamespace = "someNamespace")
@SchemaValidation
@Local 
public interface myWsPortType { ... }
于 2012-12-20T12:29:36.750 に答える