Nillable = false在apache中无效cxf

时间:2017-02-28 16:35:08

标签: java soap cxf webservices-client

我正在从java生成wsdl。我在java字段中给出了nillable = false,但该字段接受来自Web服务请求的空值。我的豆是

  import java.util.Date;
import java.util.Formatter;
import java.util.Locale;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.springframework.format.annotation.DateTimeFormat;

@XmlRootElement(name = "LocationData")
@XmlAccessorType(XmlAccessType.FIELD)
public class LocationData {

    private String id;
    @DateTimeFormat(pattern="yyyy-mm-dd")
    private Date date;
    @NotNull
    @XmlElement(required=true,nillable=false)
    private String timezone;
    @XmlElement(required=true,nillable=false)
    private String location;

    public void setTimezone(String timezone) {
        this.timezone = timezone;
    }

    public String getTimezone() {
        return timezone;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getLocation() {
        return location;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Date getDate() {
        return date;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        Formatter formatter = new Formatter(sb, Locale.US);
        formatter.format("ID:%s\nLocation:%s\nDate:%s\nTime zone:%s\n", getId(), getLocation(), getDate(), getTimezone());

        return sb.toString();
    }
}

我的界面

@WebMethod
    public LocationData createLocation( LocationData locationData) throws DuplicateLocationException;

请告诉我,可能是什么问题?我错过了什么吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能另一种方法是验证是使用带有最小值的SimpleType并使用模式验证。

  1. 启用架构验证。

    @WebMethod
    @SchemaValidation(type=SchemaValidationType.BOTH, schemas="mywsdl.wsdl")
    public LocationData createLocation( LocationData locationData) throws DuplicateLocationException;
    
  2. 修改您的wsdl文件以限制timezone

    <xs:element name="timezone">
      <xs:simpleType>
         <xs:restriction base="xs:string">
            <xs:minLength value="1" />
         </xs:restriction>
      </xs:simpleType>
    </xs:element>