web-dev-qa-db-ja.com

XmlGregorianCalendarをDateに置き換えるにはどうすればよいですか?

Jax-wsを介してejbサービスレイヤーを公開する必要があります。

Jax-wsとwsimportを使用してWebサービスを生成しましたが、奇妙なことに立ち止まりました。日付はXmlGregorianCalendarにマップされています。代わりに従来のJava日付を使用できますか?続行する正しい方法を教えていただけますか?

ありがとう。編集:これは私が使用したバインディングファイルです:ありがとう、私はあなたのxmlを少し変更し、それをNetBeansでクライアントのWebサービスに添付しました。これは私が使用したバインディングです:

<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" wsdlLocation="../wsdl/localhost_8080/web_test/Testor.wsdl" >


 <jaxb:globalBindings>
          <jaxb:javaType   name="Java.util.Date"
        xmlType="xsd:dateTime"
        parseMethod="lol.XsdDateTimeConverter.unmarshal"
        printMethod="lol.XsdDateTimeConverter.marshalDateTime"        
          /><jaxb:javaType 
        name="Java.util.Date"
        xmlType="xsd:date"
        parseMethod="lol.XsdDateTimeConverter.unmarshal"
        printMethod="lol.XsdDateTimeConverter.marshalDate"
        />
      </jaxb:globalBindings>


</jaxws:bindings>
22
hunter99

テストされていませんが、動作するはずです。最初にそのようなクラスを作成します:

import javax.xml.bind.DatatypeConverter;

public class XsdDateTimeConverter {

    public static Date unmarshal(String dateTime) {
        return DatatypeConverter.parseDate(dateTime).getTime();
    }

    public static String marshalDate(Date date) {
        final GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        return DatatypeConverter.printDate(calendar);
    }

    public static String marshalDateTime(Date dateTime) {
        final GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(dateTime);
        return DatatypeConverter.printDateTime(calendar);
    }

}

次に、これをカスタムxjbファイルに追加します。

<javaType
        name="Java.util.Date"
        xmlType="xs:dateTime"
        parseMethod="XsdDateTimeConverter.unmarshal"
        printMethod="XsdDateTimeConverter.marshalDateTime"
        />
<javaType
        name="Java.util.Date"
        xmlType="xs:date"
        parseMethod="XsdDateTimeConverter.unmarshal"
        printMethod="XsdDateTimeConverter.marshalDate"
        />
</globalBindings>

テストされていませんが、動作するはずです。ここでの私の答えに基づく: JAX-WSとJoda-Time?

19

Tomaszに感謝します。上記の解決策は機能します。
しかし、wsimportは、Adapter1.JavaやAdapter2.Javaなどのアダプターのセットをパッケージorg.w3._2001.xmlschemaとともに追加します。これは、私自身のパッケージ構造とは実際には一致しません。

別のjaxbバインディングを使用してこのパッケージ名を変更する方法を見つけました。実際、これをたくさん検索して、簡単には見つけられなかったので、同じものを探している人のためにここに追加します。

'-b binding.xml'を使用して、wsimportに次のバインディングを追加します。 wsimportは複数のバインディングファイルを処理できることに注意してください。

binding.xml以下のコンテンツ:

<schema xmlns="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.w3.org/2001/XMLSchema"
  xmlns:jaxb="http://Java.Sun.com/xml/ns/jaxb"
  jaxb:version="2.0">
  <annotation><appinfo>
    <jaxb:schemaBindings>
      <jaxb:package name="com.abc.xyz.utils"/>
    </jaxb:schemaBindings>
  </appinfo></annotation>
</schema>
1
urOutsourced