<ProjectStartDate>2012-02-17T00:00:00.000Z</ProjectStartDate>
Localhost I have:
<ProjectStartDate>2012-02-07T00:00:00.000+01:00</ProjectStartDate>
Is it the locale of the server that decides the format? Is it possible
to programmatically override the behaviour?
Thanks,
Viktor
<xsd:element name="ProjectStartDate" type="xsd:date"/>
but the xml contains time stuff:
<ProjectStartDate>2012-02-17T00:00:00.000Z</ProjectStartDate>
or
<ProjectStartDate>2012-02-07T00:00:00.000+01:00</ProjectStartDate>
That's not correct, is it?
Thanks,
Viktor
How was the date object created?
I wrote a quick test to respond to your first question, but
import javax.xml.datatype.{DatatypeFactory, XMLGregorianCalendar}
DatatypeFactory.newInstance().newXMLGregorianCalendarDate(2012, 02, 17, 0)
seems to output without time component out of the box in my environment.
As per customizing the marshaling protocol, here's how it looks:
object DateTest extends App {
import javax.xml.datatype.{DatatypeFactory, XMLGregorianCalendar}
val date =
se.hedefalk.test.Element1(DatatypeFactory.newInstance().newXMLGregorianCalendarDate(2012,
02, 17, 0))
def testDefault() {
val s = scalaxb.toXML(date, "element1", scalaxb.toScope())
println(s)
}
def testCusomization() {
val xmlprotocol = new se.hedefalk.test.XMLProtocol {
override lazy val __CalendarXMLFormat:
scalaxb.XMLFormat[XMLGregorianCalendar] = new
scalaxb.XMLFormat[XMLGregorianCalendar] {
import scalaxb._
def reads(seq: scala.xml.NodeSeq, stack: List[ElemName]):
Either[String, XMLGregorianCalendar] = try {
Right(XMLCalendar(seq.text)) } catch { case e: Exception
=> Left(e.toString) }
def writes(obj: XMLGregorianCalendar, namespace:
Option[String], elementLabel: Option[String],
scope: scala.xml.NamespaceBinding, typeAttribute:
Boolean): scala.xml.NodeSeq =
Helper.stringToXML(obj.toXMLFormat + "foo", namespace,
elementLabel, scope)
}
}
import xmlprotocol._
val s = scalaxb.toXML(date, "element1", scalaxb.toScope())
println(s)
}
testDefault()
testCusomization()
}
The code is up [here][1].
-eugene
[1]: https://github.com/eed3si9n/scalaxb-sample/tree/hedefalk/hedefalk
> How was the date object created?
I had so many dates I did an implicit:
implicit def date2XmlGregorianCal(date: Date) = {
val cal = new GregorianCalendar()
cal.setTime(date)
datatypeFactory.newXMLGregorianCalendar(cal)
}
and then forgot about it :)
I guess I figured that the xsd-type would decide how it was formatted,
like defined here:
http://www.w3schools.com/schema/schema_dtypes_date.asp…?
If I override the __CalendarXMLFormat, does that override the
behaviour of all date-types? Like the lot defined in XsTypeSymbol:
object XsDateTime extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsTime extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsDate extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsGYearMonth extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsGYear extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsGMonthDay extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsGDay extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
object XsGMonth extends
BuiltInSimpleTypeSymbol("javax.xml.datatype.XMLGregorianCalendar") {}
I have the need for xsd:datetime too. Maybe I'm misunderstanding…?
Thanks,
Viktor
Ah, thanks!> How was the date object created?
I had so many dates I did an implicit:
implicit def date2XmlGregorianCal(date: Date) = {
val cal = new GregorianCalendar()
cal.setTime(date)
datatypeFactory.newXMLGregorianCalendar(cal)
}
I did it like this:
def xmlDate(date: Date) = {
val cal = new GregorianCalendar()
cal.setTime(date)
val month = cal.get(Calendar.MONTH) + 1;
val day = cal.get(Calendar.DAY_OF_MONTH);
val year = cal.get(Calendar.YEAR);
datatypeFactory.newXMLGregorianCalendarDate(year, month, day,
DatatypeConstants.FIELD_UNDEFINED)
}
which gives me just the dates like I wanted. Are there any utils for
this? Feels hacky to write that code…
Thanks,
Viktor
Are there any utils for
this? Feels hacky to write that code…