3

私はJAXWS 2.1.7を使用しており、いくつかのクラスを使用してJAXWSの「apt」を実行してWSDLを生成しています。日付には、私は使用します

@XmlSchemaType(name="time")  
private Date wakeupTime;

これはxs:timeでスキーマを生成しますが、これがすべてXMLで出力されると、値は次のようになります

<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>

時間の部分だけ来てほしい!カスタムコンバーターを使用して、 xs:time + java.util.Date をそのような方法で出力および解析する必要があると言いたいと思いますが、バインディングファイルを apt ルーチンに渡すことができるかどうかわかりません。私は(歴史的およびその他の理由で)使用できませんXMLGregorianCalendar-それはjava.util.Date. jaxb で apt ツールのカスタム バインディングを指定するにはどうすればよいですか

4

1 に答える 1

8

よし、見つけた!http://weblogs.java.net/blog/2005/04/22/xmladapter-jaxb-ri-eaのリンクを読み
、javax.xml.bind.annotation.adapters.XmlAdapter を使用してください。すなわち

public class TimeFromDateAdapter extends XmlAdapter<XMLGregorianCalendar, Date>
{
  public Date unmarshal(XMLGregorianCalendar value)
  {
    Calendar cal = value.toGregorianCalendar();
    Date d = cal.getTime();
    return d;
  }

  public XMLGregorianCalendar marshal(Date value)
  {
    Calendar cal = Calendar.getInstance();
    cal.setTime(value);
    try
    {
    XMLGregorianCalendar xmlcal =   DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);
    return xmlcal;
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return null;
    }
  }
}

次に:
@XmlSchemaType(name="time")
@XmlJavaTypeAdapter(mypackage.TimeFromDateAdapter.class)
private Date wakeupTime;

そして離れて行きます。

于 2010-06-01T11:13:43.863 に答える