У меня есть файл WSDL, содержащий -
<xs:complexType name="PNV">
<xs:sequence>
<xs:element name="dataType" type="xsd:int" />
<xs:element name="multiValued" type="xsd:boolean" />
<xs:element name="booleanValue" type="xsd:boolean" />
<xs:element name="dateValue" nillable="true" type="xsd:dateTime" />
..........
, и он преобразуется в Java файл следующим образом -
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PNV", propOrder = {
"dataType",
"multiValued",
"booleanValue",
"dateValue",
})
public class PNV
implements Serializable
{
private final static long serialVersionUID = 1L;
protected int dataType;
protected boolean multiValued;
protected boolean booleanValue;
@XmlElement(required = true, type = String.class, nillable = true)
@XmlJavaTypeAdapter(Adapter1 .class)
@XmlSchemaType(name = "dateTime")
protected Date dateValue;
}
файл привязки -
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://changeservice.xxservices.service.xx']">
<jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:javaType name="java.util.Date" xmlType="xs:dateTime"
parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime"/>
<jxb:serializable uid="1"/>
</jxb:globalBindings>
</jaxws:bindings>
в моем тестовом примере SOAPUI, который я прошел -
<dateValue nil="true"/>
, но это дало мне следующую ошибку -
Caused by: java.lang.IllegalArgumentException:
at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parseAndSetYear(XMLGregorianCalendarImpl.java:2891) ~[na:1.8.0_201]
at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parse(XMLGregorianCalendarImpl.java:2777) ~[na:1.8.0_201]
at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl.<init>(XMLGregorianCalendarImpl.java:436) ~[na:1.8.0_201]
at com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl.newXMLGregorianCalendar(DatatypeFactoryImpl.java:536) ~[na:1.8.0_201]
at javax.xml.bind.DatatypeConverterImpl._parseDateTime(DatatypeConverterImpl.java:422) ~[na:1.8.0_201]
at javax.xml.bind.DatatypeConverterImpl.parseDateTime(DatatypeConverterImpl.java:417) ~[na:1.8.0_201]
at javax.xml.bind.DatatypeConverter.parseDateTime(DatatypeConverter.java:327) ~[na:1.8.0_201]
at org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime(DataTypeAdapter.java:65) ~[cxf-xjc-runtime-3.3.1.jar:na]
at org.w3._2001.xmlschema.Adapter1.unmarshal(Adapter1.java:13) ~[classes/:na]
at org.w3._2001.xmlschema.Adapter1.unmarshal(Adapter1.java:1) ~[classes/:na]
at com.sun.xml.bind.v2.runtime.reflect.AdaptedAccessor.set(AdaptedAccessor.java:55) ~[jaxb-runtime-2.3.3.jar:2.3.3]
... 107 common frames omitted
Я проверил атрибут даты в классе Adapter1, и вместо этого он становится пустым null, поэтому он выдает ошибку. Мой вопрос: почему он не принимает значение NULL, хотя я передаю nil = true в моем тестовом примере SOAPUI. почему он пуст? Я также попытался полностью удалить это поле dateValue из моего входного запроса, и он по-прежнему дает мне ту же ошибку для поля даты.
Я также пытался использовать XMLGregorianCalendar как тип dateValue, но когда я передал nil = true в SOAPUI это дает мне такое же сообщение об ошибке .. Пожалуйста, помогите.