Сгенерировать xs: date вместо xs: dateTime для WebParam

У меня есть веб-сервис jax-ws с веб-методом:

@WebMethod
void SetCurrentDate(Date date)

В сгенерированном параметре wsdl дата имеет тип xs: dateTime, но мне нужно xs: date. Я пробовал XmlGregorianCalendar, но он соответствует xs: anySimpleType, также я пробовал @XmlSchemaType, но это не разрешено для параметров. Как я могу сгенерировать wsdl с xsd: date вместо xsd: dateTime?


person Петров Андрей    schedule 27.08.2014    source источник


Ответы (2)


Похоже, единственный способ сделать это - использовать аннотацию @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: изменение XMLSchemaType входных данных

person Amir    schedule 03.03.2016

@XmlSchemaType достаточно для этого.
Оба

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

и

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

генерируются в type="xs:date" (с помощью инструмента 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)
 }
person Ilya    schedule 27.08.2014
comment
Спасибо, я читал об этом, но мне нужно сгенерировать xsd: date для аргумента метода, а не для поля класса. Вы знаете, как это сделать? - person Петров Андрей; 26.05.2015