Glassfish 在使用web服务时,如何序列化java.sql.Date尽可能长的时间?

Glassfish 在使用web服务时,如何序列化java.sql.Date尽可能长的时间?,glassfish,jaxb,service,glassfish-3,Glassfish,Jaxb,Service,Glassfish 3,我有一个简单的web服务方法,它返回一个简单的java类作为返回值 @WebMethod() public SimpleClass myMethod(); @XmlRootElement() public class SimpleClass { @XmlElement(name="myDate") @XmlJavaTypeAdapter(value=MyDateAdapter.class) public java.sql.Date myDate = new java.s

我有一个简单的web服务方法,它返回一个简单的java类作为返回值

@WebMethod()
public SimpleClass myMethod();

@XmlRootElement()
public class SimpleClass {
    @XmlElement(name="myDate")
    @XmlJavaTypeAdapter(value=MyDateAdapter.class)
    public java.sql.Date myDate = new java.sql.Date(new java.util.Date().getTime());
}
我希望java.sql.Date在XML中作为长值传输(因为客户端是J2ME,无法处理复杂的事情)。 对于这个项目,我采用了以前在很多地方提到的解决方案,并在Glassfish v2上做了大量工作

首先,我声明以下适配器:

 public class MyDateAdapter extends XmlAdapter<Long, java.sql.Date> {
     public java.sql.Date unmarshal(Long v) throws Exception {
        return new java.sql.Date(v);
     }
     public Long marshal(java.sql.Date v) throws Exception {
         return v.getTime();
     }
 }
问题发生在GlassFish 3上。虽然我正确地定义了适配器,但日期被传输为“xs:dateTime”值,而不是Long。 这是我调用web服务时从GlassFish 3服务器得到的响应:

<?xml version="1.0" encoding="UTF-8"?>
 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
     <S:Body>
         <ns2:myMethodResponse xmlns:ns2="http://nevermind.com">
             <return>
                 <myDate xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:dateTime">2010-12-09T12:44:06.875+02:00</myDate>
             </return>
         </ns2:myMethodResponse>
     </S:Body>
 </S:Envelope>

2010-12-09T12:44:06.875+02:00
我还检查了调试器——适配器中的函数永远不会被调用。 另一方面,adapater并不是无用的,因为如果我试图删除它,就会得到JAXB异常, 告诉我java.sql.Date无法处理,因为它没有arg构造函数

有什么想法吗

2010年12月20日- 我添加了指向项目jar的链接,其中包含glassfish2和glassfish3的源代码和结果:

您在属性级别和包级别都声明了@XmlJavaTypeAdapter。你试过只在一个地方申报吗

要么:

@XmlJavaTypeAdapter(value=MyDateAdapter.class)
public java.sql.Date myDate = new java.sql.Date(new java.util.Date().getTime());
或:


不是两者都有。

我发布了一个关于这个问题的bug,应该在3.1版()上解决它。

你是说同样的代码在GF v2上部署和工作与预期的一样吗?是的,我添加了一个项目jar以及在GFv2和3上运行的详细结果。它在GFv2上按预期工作。您好,谢谢您的回答,我尝试只在一个地方声明它,无论是在包级别还是在属性级别,但仍然–没有运气。它不起作用。我建议为这个问题输入一个bug。这可以在这里完成:
@XmlJavaTypeAdapter(value=MyDateAdapter.class)
public java.sql.Date myDate = new java.sql.Date(new java.util.Date().getTime());
 @XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(value=MyDateAdapter.class,type=java.sql.Date.class)
 })
 package mingler.tracker.ejb.client;