Glassfish 在使用web服务时,如何序列化java.sql.Date尽可能长的时间?
我有一个简单的web服务方法,它返回一个简单的java类作为返回值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
@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;