IRS извлекает файл ответа об ошибке
Как я могу программировать на Java, чтобы получить вложение? Я наконец получил эту программу, чтобы отправить mtom и получить обновление статуса. Часть этого мыльного сообщения от IRS, возвращающегося, имеет вложение со списком ошибок в представленном файле. Я искал в сети, пытаясь выяснить, как загрузить вложение из ответа. Я получаю ответное мыло и пытаюсь сделать это с ним:
private void logToSystemOut(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean)
smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
out.println("\nOutbound message:");
} else {
out.println("\nInbound message:");
}
SOAPMessage message = smc.getMessage();
try {ByteArrayOutputStream bout = new ByteArrayOutputStream();
message.writeTo(bout);
String outfpn =p.getPath()+File.separator+"ErrorReport_"+getRecieptID()+icec+".xml";
icec++;
FileOutputStream fileOut = new FileOutputStream(outfpn);
message.writeTo(fileOut);
fileOut.close();
out.println(""); // just to add a newline
} catch (Exception e) {
out.println("Exception in handler: " + e);
}
}
Soap message response:
------=_Part_3_10783799.1471300737900
Content-Type: text/xml; charset=utf-8
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns5:ACABusinessHeader xmlns="urn:us:gov:treasury:irs:common" xmlns:ns2="urn:us:gov:treasury:irs:ext:aca:air:7.0" xmlns:ns3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- utility-1.0.xsd" xmlns:ns4="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="urn:us:gov:treasury:irs:msg:irstransmitterstatusrequest" xmlns:ns6="urn:us:gov:treasury:irs:msg:acasecurityheader" xmlns:ns7="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- secext-1.0.xsd" ns3:Id="id-962DC498C98A4E58A8DF4AA1861A4E81">
<ns2:UniqueTransmissionId>e6b9f6c9-01df-4003-993a- 47b15fc2c236:SYS12:::T</ns2:UniqueTransmissionId>
<Timestamp>2016-08-15T22:37:50Z</Timestamp>
</ns5:ACABusinessHeader>
</soap:Header>
<soap:Body>
<ns5:ACABulkRequestTransmitterStatusDetailResponse xmlns="urn:us:gov:treasury:irs:common" xmlns:ns2="urn:us:gov:treasury:irs:ext:aca:air:7.0" xmlns:ns3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- utility-1.0.xsd" xmlns:ns4="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="urn:us:gov:treasury:irs:msg:irstransmitterstatusrequest" xmlns:ns6="urn:us:gov:treasury:irs:msg:acasecurityheader" xmlns:ns7="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- secext-1.0.xsd">
<ns2:ACABulkRequestTransmitterResponse>
<ns2:TransmissionStatusCd>Rejected</ns2:TransmissionStatusCd>
<ReceiptId>1095B-16-0</ReceiptId>
</ns2:ACABulkRequestTransmitterResponse>
<ns2:ACABulkReqTrnsmtStsRespGrpDtl>
<BulkExchangeFile>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:5aadb03f-8cb4-44bb- 8657-3f63b545904d-374@urn%3Aus%3Agov%3Atreasury%3Airs%3Acommon"/>
</BulkExchangeFile>
</ns2:ACABulkReqTrnsmtStsRespGrpDtl>
</ns5:ACABulkRequestTransmitterStatusDetailResponse>
</soap:Body>
</soap:Envelope>
------=_Part_3_10783799.1471300737900
Content-Type: application/xml
Content-Disposition: attachment;name="respMTOM"
Content-ID: <5aadb03f-8cb4-44bb-8657-3f63b545904d- 374@urn:us:gov:treasury:irs:common>
Content-Transfer-Encoding: binary
------=_Part_3_10783799.1471300737900--
1 ответ
Я знаю, что это довольно поздно для вечеринки, и мое решение в C#
тогда как ваше решение в java
, Однако, возможно, я могу объяснить, как я это делаю, и вы могли бы применить что-то похожее на ваше решение, если вы еще этого не сделали.
Чтение / обработка ответа
- Прочитайте первую строку ответа и назначьте его свойству MimeBoundary. Эта первая строка
UUID
так же хорошо какMimeBoundary
объекта ответа. - Объединить
MimeBoundary
с символами для контрольной подачи / перевода строки (\r\n
), а остальная часть объекта ответа с помощьюReadToEnd()
метод. Прочитайте эту объединенную строку в строковое свойство,ResponseString
, - Создать переменную (
match
) хранить возвратRegex.Match()
метод и использовать шаблон, чтобы найтиACABulkRequestTransmitterStatusDetailResponse
узел в пределахResponseString
, - Звоните
Deserializer<T>
метод, который будет использоватьXmlSerializer
преобразоватьmatch
переменная вACABulkRequestTransmitterStatusDetailResponseType
объект. Присвойте это свойствуStatusDetailResponse
, - Использовать
StatusDetailResponse
свойство, чтобы найти значениеTransmissionStatus
, Если TransmissionStatus равно "AcceptedwithErrors", "PartiallyAccepted" или "Rejected", в ответе будет присутствовать вложение ошибки.
Чтение / обработка вложения
- Найти индекс декларации XML (
DeclarationIndex
) в пределахResponseString
, Если индекс -1, вложение не найдено. Согласно IRS, это может произойти, когда это произойдет, обновитьContactPersonLastName
поле и повторно отправить передачу в видеReplacement
, Если оно больше -1, должно быть вложение. - Найти всю строку вложения, получив
Substring
изResponseString
начиная сDeclarationIndex
и заканчиваяLastIndexOf
MimeBoundry
минусDeclarationIndex
, Назначьте эту строкуAttachmentXML
переменная. - Я создал класс для
SubmissionDetailResponse
который был создан путем взятия образца вывода XML дляError Attachment
и создание класса из него в.NET
,Deserialize
AttachmentXML
в этоSubmissionDetailResponse
учебный класс. - Обработать данные из
SubmissionDetailResponse
в базу данных для просмотра ошибок.