1

jax-ws と netbeans 7 のウィザードで作成した Web サービスがあります (これは初めてです)。XmlGregorianCalendar の代わりに java.util.Date を使用するために、クライアントの Web サービスを次の xml で変更しました。

<?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 の代わりに Date が使用されるようになり、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 のメソッドを使用すると、 Date フィールド/パラメーターで常に null になります。

ありがとう 。

4

1 に答える 1

0

生成される は、目的の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>

詳細については

于 2012-06-19T17:34:38.130 に答える