2017-02-28 128 views
0

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

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; 

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

回答

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> 
    
+0

同样地,我会做50种元素50种不同的正则表达式检查。在这种情况下,如果我使用上述方法,我将不得不创建50个限制库。有什么办法可以为每个元素声明正则表达式模式 – user6543599