axis2 xsd: выпуск формата даты - PullRequest
1 голос
/ 23 марта 2011

У меня WSDL следующим образом:

< xsd:simpleType name="USER_ACT_STRDT_TypeDef">
  < xsd:annotation>
 < xsd:documentation>USER_ACT_STRDT is a date.< /xsd:documentation>
  < /xsd:annotation>
  < xsd:restriction base="xsd:date">
    < xsd:pattern value="(\d{4}-\d{2}-\d{2})"/>
  < /xsd:restriction>
< /xsd:simpleType>

Когда я генерирую STUB (используя Axis2 1.5.3), сгенерированная заглушка (ADB Data Binding) имеет следующий исходный код:

public void setUSER_ACT_STRDT_TypeDef(Date param) {

if (ConverterUtil.convertToString(param).matches("\d{4}-\d{2}-\d{2}")) {

this.localUSER_ACT_STRDT_TypeDef=param; } else { throw new java.lang.RuntimeException();
} }

Этот метод всегда создает исключение RuntimeException, поскольку метод ConverterUtil.convertToString () возвращает строку в формате, отличном от «yyyy-mm-dd».Возвращает дату, добавляя +5,30 как 2011-03-21 + 05: 30.

Я пытался передать дату в разных форматах, но результат одинаков для всех.

Может кто-нибудь подсказать, какчтобы решить эту проблему.

1 Ответ

0 голосов
/ 29 марта 2011

Этот код:

if (ConverterUtil.convertToString(param).matches("\\d{4}-\\d{2}-\\d{2}"))

будет работать только с одним из доступных представлений даты. В спецификации WSDL вы обнаружите, что 2011-03-21+05:30 также является правильным представлением даты, оно просто включает часовой пояс как +5 часов и смещение на 30 минут по UTC.

По умолчанию Axis2 генерирует даты с часовым поясом, но должна работать с другими форматами даты.

Чтобы проверить, начинается ли строка с YYYY-MM-DD даты, вы можете использовать такой код:

if (! sd.matches("\\d{4}-\\d{2}-\\d{2}.*"))
    throw new ParseException("Something is terribly wrong with date: " + sd, 0);
else
    {
    sd = sd.substring(0, 10);
    System.out.println("ok: '" + sd + "'");
    }

PS Вы избегаете \d как \\d?

PPS Почему вы бросаете RuntimeException? Есть много «лучших» исключений, таких как ParseException (используется методами анализа дат JDK) или IllegalArgumentException (используется библиотекой времени joda)

...