JAX-WS, часовой пояс даты неверно истолковывается - PullRequest
0 голосов
/ 09 декабря 2011

Клиент моего веб-сервиса отправляет атрибут даты в следующем формате (ISO):

2011-09-12T13:46:00+01:00

за запрос, отправленный в 13:46 по местному времени (CEST). Мой веб-сервис (JAX-WS на Glassfish), написанный как:

@WebMethod    
public String getSource(Long id, Date asOfDate) {
    this.log.debug(asOfDate);
    // ...
}

интерпретируется как Mon Sep 12 14:46:00 CEST 2011 (это результат вышеприведенной команды журнала). Почему не интерпретируется как Mon Sep 12 13:46:00 CEST 2011?

Ответы [ 4 ]

1 голос
/ 09 декабря 2011

Как сказал U Mad - тип даты в Java не имеет часового пояса. Если бы вы начали с XML-схемы для вашего веб-сервиса, а затем использовали wsimport для генерации реализации Java, вы заметили бы, что для этого он будет использовать XMLCalendar (который можно настроить для обычного Календаря через JAXB, если вы предпочитаете)

1 голос
/ 09 декабря 2011

Я не знаю, почему он не анализирует время правильно, но я бы попробовал изменить параметр Date на Calendar.

0 голосов
/ 01 августа 2012

Но это правильный ответ ..?

2011-09-12T13:46:00+01:00

2011-09-12 в 12:46:00 UTC.

Запрашиваемая в CEST (Центральноевропейское летнее время, UTC + 2 часа):

2011-09-12 at 14:46:00

Что имеет смысл.

0 голосов
/ 23 мая 2012

Вот пример. XML-файл JAXB выглядит следующим образом:

<xs:schema elementFormDefault="qualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" targetNamespace="calendar-schemalet">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:globalBindings>
                <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDate" printMethod="javax.xml.bind.DatatypeConverter.printDate" />
            </jaxb:globalBindings>
        </xs:appinfo>
    </xs:annotation>
</xs:schema>

использовать команду wsimport -p <пакет для созданных артефактов> -b. <путь к файлу jaxb.xml> /jaxb.xml -d

...