Создайте xs: date вместо xs: dateTime для WebParam

1

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

@WebMethod
void SetCurrentDate(Date date)

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

Теги:
web-services
jaxb
jax-ws

2 ответа

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 Первая служба кодов: изменение XMLSchemaType входов

0

Для этого достаточно @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)
 }
  • 1
    Спасибо, я читал об этом, но мне нужно сгенерировать xsd: date для аргумента метода, а не для поля класса. Вы знаете способ сделать это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню