我有一个使用网络方法的jax-ws网络服务:
@WebMethod
void SetCurrentDate(Date date)
在生成的wsdl参数中,日期的类型为xs:dateTime,但我需要xs:date。 我尝试了XmlGregorianCalendar,但它映射到xs:anySimpleType,我也尝试了@XmlSchemaType,但它不允许参数。 如何使用xsd:date而不是xsd:dateTime?
生成wsdl答案 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;
}
}