为WebParam生成xs:date而不是xs:dateTime

时间:2014-08-27 02:41:52

标签: java xml web-services jaxb jax-ws

我有一个使用网络方法的jax-ws网络服务:

@WebMethod
void SetCurrentDate(Date date)

在生成的wsdl参数中,日期的类型为xs:dateTime,但我需要xs:date。 我尝试了XmlGregorianCalendar,但它映射到xs:anySimpleType,我也尝试了@XmlSchemaType,但它不允许参数。 如何使用xsd:date而不是xsd:dateTime?

生成wsdl

2 个答案:

答案 0 :(得分:0)

@XmlSchemaType足以做到这一点 两者

@XmlSchemaType(name = "date")
protected Date publishDate;  

@XmlSchemaType(name = "date")
protected XMLGregorianCalendar publishDate;  

生成为type="xs:date"(使用schemagen工具)

参见示例here

示例1:自定义字段上XMLGregorianCalendar的映射。

 //Example: Code fragment
 public class USPrice {
     @XmlElement
     @XmlSchemaType(name="date")
     public XMLGregorianCalendar date;
 }

 <!-- Example: Local XML Schema element -->
 <xs:complexType name="USPrice"/>
   <xs:sequence>
     <xs:element name="date" type="xs:date"/>
   </sequence>
 </xs:complexType>

示例2:自定义XMLGregorianCalendar在包级别的映射

 package foo;
 @javax.xml.bind.annotation.XmlSchemaType(
      name="date", type=javax.xml.datatype.XMLGregorianCalendar.class)
 }

答案 1 :(得分:0)

看起来唯一的方法是使用注释@RequestWrapper(对于jax-ws-impl和apache cxf):

@WebMethod
@RequestWrapper(className = "....SetCurrentDateRequest")
void SetCurrentDate(Date date)

请求包装器:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "setCurrentDateRequest", propOrder = {
    "date"
})
public class SetCurrentDateRequest {

    @XmlSchemaType(name="date")
    protected Date date;

    public Date getDate() {
        return date;
    }

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

CXF/JAXB Code-first service: modify XMLSchemaType of inputs