У меня есть веб-сервис jax-ws с веб-методом:
@WebMethod
void SetCurrentDate(Date date)
В сгенерированном параметре даты wsdl есть тип xs: dateTime, но мне нужна xs: date. Я попробовал XmlGregorianCalendar, но он сопоставляется с xs: anySimpleType, также я попробовал @XmlSchemaType, но он не допускал параметров. Как я могу сгенерировать wsdl с xsd: date вместо xsd: dateTime?
Похоже, что только это можно сделать, используя аннотацию @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 Первая служба кодов: изменение XMLSchemaType входов
Для этого достаточно @XmlSchemaType.
И то и другое
@XmlSchemaType(name = "date")
protected Date publishDate;
а также
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar publishDate;
генерируются для type="xs:date"
(с schemagen
инструмента schemagen
)
См. Примеры здесь
Пример 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)
}