My Webapplikation Apache CXF und JAVA8 verwendet und unten Fehler in Reaktion zugewandt, wenn der Benutzer xs:datetime
Eingang (00 Sekunden) alsjava.time.LocalDateTime Konvertierungsproblem, wenn Sekunden 00
<urn1:dateTimeVal>2016-04-29T20:00:00</urn1:dateTimeVal>
senden ERROR:
org.apache.cxf.interceptor.Fault: Marshalling Error: cvc-datatype-valid.1.2.1: '2016-04-29T20:00' is not a valid value for 'dateTime'.
ich debug und analysiert, dass, wenn der Benutzer dateTimeVal
als 2016-04-29T20:00:00
dann CXF Validierungen für die Eingabe senden sind vergangen und XML-Wert ist UnMarshaled bis java.time.LocalDateTime
als 2016-05-05T20:00
, und zum Zeitpunkt der Antwort die Antwort, die Marshalling Fehler tritt aufgrund von Verlust von Sekunden Teil (00).
Jede Hilfe/Hinweis wird geschätzt.
P. S: Sie können mit folgenden Schnipsel versuchen:
java.time.LocalDateTime dt= java.time.LocalDateTime.of(2016, Month.MAY, 5, 20, 00, 00);
System.out.println(dt);
Hinweis: Über Codebeispiel nur für das Verständnis ist Datetime-Wert zu drucken. Aber tatsächliche Rückgabetyp erwartet in Web-Anwendung ist java.time.LocalDateTime
OUTPUT ERWARTET: 2016-05-05T20: 00: 00
OUTPUT IST: 2016-05-05T20: 00
EDIT: die Bindung (JAXB) Inhalt für das Feld ist:
@XmlElement(required = true, type = String.class)
@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
@XmlSchemaType(name = "dateTime")
@Generated(value = "com.sun.tools.xjc.Driver", date = "2016-05-03T05:28:57+05:30", comments = "JAXB RI v2.2.11")
@NotNull
protected LocalDateTime dateTimeVal;
UND LocalDateTimeAdapter
Die Datei ist
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class LocalDateTimeAdapter
extends XmlAdapter<String, LocalDateTime>
{
public static LocalDateTime parse(String value)
{
DateTimeFormatter dateTimeAndZoneformatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
DateTimeFormatter dateTimeformatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
TemporalAccessor ta = null;
try
{
ta = dateTimeformatter.parse(value);
}
catch (DateTimeParseException ex)
{
ta = dateTimeAndZoneformatter.parse(value);
}
return LocalDateTime.from(ta);
}
public static String print(LocalDateTime value)
{
return value.toString();
}
public LocalDateTime unmarshal(String value)
{
return parse(value);
}
public String marshal(LocalDateTime value)
{
return print(value);
}
}
Konvertieren Sie von LocalDateTime zu String mit 'toString()' an einem bestimmten Punkt? – assylias
Nein, die gesamte interne Konvertierung erfolgt nur zwischen CXF und Java. –
Haben Sie eine Jaxb-Bindings-Datei, Jaxb-Annotationen in Ihrem Pojo oder irgendeine Art von Marshalling-Adapter, die Sie uns nicht zeigen? –