Я хочу, чтобы мой xml выглядел так:
<data xsi:type="q1:UniversalLicenseRequest" xmlns:q1="http://integration.elicense.kz/CustomServices/Egov/EgovLicenseSearchService">
<q1:PageIndex>0</q1:PageIndex>
<q1:PageSize>10</q1:PageSize>
<q1:SystemInfo>
<q1:MessageId>a62ba0f1-5b3e-4c35-862d-032e9cdcfb68</q1:MessageId>
<q1:ChainId>162d9c25-8734-4fef-81d4-22dd5621e36e</q1:ChainId>
<q1:MessageDate>2019-01-18T10:00:49.7229311+06:00</q1:MessageDate>
<q1:MessageType>Request</q1:MessageType>
<q1:SignatureType>None</q1:SignatureType>
</q1:SystemInfo>
<q1:IinBin>921203350262</q1:IinBin>
<q1:IssueDate xsi:nil="true"/>
</data>
Вот мой класс UniversalLicenseRequest
:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UniversalLicenseRequest", propOrder = {
"iinBin",
"rnn",
"numberNikadUinrd",
"issueDate",
"activityCodes"
})
public class UniversalLicenseRequest
extends RequestPageBase
{
@XmlElement(name = "IinBin")
protected String iinBin;
@XmlElement(name = "Rnn")
protected String rnn;
@XmlElement(name = "NumberNikadUinrd")
protected String numberNikadUinrd;
@XmlElement(name = "IssueDate", required = true, nillable = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar issueDate;
@XmlElement(name = "ActivityCodes")
protected String activityCodes;
@XmlElement(name = "SystemInfo")
protected SystemInfo systemInfo;
... getters and setters
А вот класс SystemInfo
:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SystemInfo", propOrder = {
"messageId",
"chainId",
"messageDate",
"messageType",
"serviceId",
"responseCode",
"additionalInfo",
"senderId",
"digitalSignature",
"signatureType"
})
public class SystemInfo {
@XmlElement(name = "MessageId")
protected String messageId;
@XmlElement(name = "ChainId")
protected String chainId;
@XmlElement(name = "MessageDate", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar messageDate;
.....
Вот метод, который создает и отправляет запрос (Он написан на Kotlin, но я надеюсь, что вы понимаете это):
private fun makeRequest(_iinBin: String, message_id: String): Document {
val request = kz.esb.elicense.model.UniversalLicenseRequest().apply {
pageIndex = 0
pageSize = 10
systemInfo = SystemInfo().apply {
messageId = message_id
messageDate = CalendarUtils.currentXMLGregorianCalendar()
messageType = MessageType.REQUEST
signatureType = DigitalSignatureType.NONE
}
iinBin = _iinBin
}
val document = DocumentBuilderFactory.newInstance().apply {
isNamespaceAware = true
}.newDocumentBuilder().newDocument()
val jaxbElement = JAXBElement<kz.esb.elicense.model.UniversalLicenseRequest>(QName("http://integration.elicense.kz/CustomServices/Egov/EgovLicenseSearchService", "UniversalLicenseRequest"),
kz.esb.elicense.model.UniversalLicenseRequest::class.java,
request)
val marshaller = JAXBContext.newInstance(kz.esb.elicense.model.UniversalLicenseRequest::class.java).createMarshaller()
marshaller.marshal(jaxbElement, document)
return document
}
Но в итоге мой запрос выглядит так:
<data xmlns:ns2="http://integration.elicense.kz/CustomServices/Egov/EgovLicenseSearchService">
<SystemInfo>
<MessageId>dad59a9c-60ba-4d76-94f2-30918ee5fb4c</MessageId>
<MessageDate>2019-09-26T12:43:21.624+06:00</MessageDate>
<MessageType>Request</MessageType>
<SignatureType>None</SignatureType>
</SystemInfo>
<PageIndex>0</PageIndex>
<PageSize>10</PageSize>
<IinBin>971240002363</IinBin>
<IssueDate
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</data>
РЕДАКТИРОВАТЬ:
makeRequest
метод называется как:
val request = RequestData().apply {
data = makeRequest(_iinBin = bin, message_id = message_id).firstChild
}
И RequestData
класс выглядит следующим образом:
@XmlSeeAlso({
UniversalLicenseRequest.class,
})
public class RequestData
implements Serializable {
protected Object data;
Как видите, data
поле просто Объект.После этого я отправляю сообщение:
val response = webServiceTemplate.marshalSendAndReceive(serviceLocation, request)