【问题标题】:null values for java.util.Date input/output in web service methodsWeb 服务方法中 java.util.Date 输入/输出的空值
【发布时间】:2012-06-19 17:12:20
【问题描述】:

我有一个使用 jax-ws 和 netbeans 7 的向导创建的 web 服务(这是我的第一次)。 要使用 java.util.Date 而不是 XmlGregorianCalendar,我已经使用此 xml 修改了客户端的 Web 服务:

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings  node="wsdl:definitions/wsdl:types/xsd:schema"
                 xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
                               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <jaxb:globalBindings>
        <jaxb:serializable/>
           <jaxb:javaType name="java.util.Date" xmlType="xsd:dateTime"/>
        </jaxb:globalBindings>
</jaxws:bindings>

现在使用日期而不是 XmlGregorianCalendar 并生成一个 Adapter1:

public class Adapter1
    extends XmlAdapter<String, Date>
{


    public Date unmarshal(String value) {
        return new Date(value);
    }

    public String marshal(Date value) {
        if (value == null) {
            return null;
        }
        return value.toString();
    }

}

当我在适配器中添加 system.out.println 时,我看到日期已接收/发送到服务器,但如果我使用 ws 的方法,我在日期字段/参数上总是为空。

谢谢。

【问题讨论】:

    标签: web-services jakarta-ee netbeans jaxb jax-ws


    【解决方案1】:

    生成的XmlAdapter 不会执行所需的转换。默认的XmlAdapter 期望以下工作:

    Foo foo1 = new Foo(foo2.toString());
    

    在这种情况下无效:

    Date date1 = new Date(date2.toString());
    

    您需要编写一些转换代码并从外部绑定文件中引用它:

    <jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
        <jxb:bindings schemaLocation="format.xsd">
            <jxb:bindings node="//xs:element[@name='my-date']">
                <jxb:property>
                    <jxb:baseType>
                        <jxb:javaType name="java.util.Date"
                            parseMethod="org.example.DateFormatter.parseInt"
                            printMethod="org.example.DateFormatter.printInt" />
                    </jxb:baseType>
                </jxb:property>
            </jxb:bindings>
        </jxb:bindings>
    </jxb:bindings>
    

    更多信息

    【讨论】:

    • 感谢您的回答。这种东西对于新手来说真的很复杂:p。有没有另一种方法可以简单地使用 java.util.Date 和 jax-ws ?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多