有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Nillable=false在apache cxf中不起作用

我正在从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) 个答案

  1. # 1 楼答案

    另一种方法是使用SimpleType和min值进行验证,并使用模式验证

    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>