【问题标题】:xsd dateTime loosing timezone information being passed through Websphere ESB via JAX-WSxsd dateTime 丢失通过 JAX-WS 通过 Websphere ESB 传递的时区信息
【发布时间】:2010-11-02 02:56:12
【问题描述】:

我正在使用 JAX-WS (WAS 7) --> Websphere ESB 7 --> JAX-WS (WAS 7),用时间戳填充 xsd:dateTime 字段。

流程如下:

  1. WAS - 实例化响应对象
  2. 在 POJO [DatatypeFactory.newInstance().newXMLGregorianCalendar((GregorianCalendar)Calendar.getInstance())] "2010-11-02T15:35:42.047+13:00" 中填充 XMLGregorianCalendar 字段
  3. 通过 ESB 传回响应
  4. 检查网关“2010-11-02T02:35:42.047Z”中的响应

如您所见,新西兰时区信息被忽略。返回的XMLGregorianCalendarImpl.timezone=0,实例化时为XMLGregorianCalendarImpl.timezone=780

POJO 是使用“JAX-WS RI IBM 2.1.1 in JDK 6”生成的

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MessageControl", namespace = "http://xmlschema.customer.co.nz/generic/Response123", propOrder = {
    "messageTrackTrace",
    "messageDate",  
})
public class PojoClass {

    @XmlElement(name = "MessageTrackTrace")
    protected String messageTrackTrace;
    @XmlElement(name = "MessageDate", required = true)
    protected XMLGregorianCalendar messageDate;

这是 ESB 中的错误吗?也许有我可以更改的配置? 干杯

【问题讨论】:

  • 它没有忽略它,它正在转换为 UTC。

标签: java web-services xsd jax-ws esb


【解决方案1】:

感谢瑞恩的想法, 我通过从一个日期填充一个新的 XMLGregorianCalendar 来解决它。

DatatypeFactory df = DatatypeFactory.newInstance();
GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance();

Date messageDate = pojoClass.getMessageDate().toGregorianCalendar().getTime();
cal.setTime(messageDate);
XMLGregorianCalendar xCal = df.newXMLGregorianCalendar(cal);
pojoClass.setMessageDate(xCal);

这保持了我想要的格式,即“太平洋/奥克兰”时区。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2014-02-28
    • 1970-01-01
    相关资源
    最近更新 更多