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, Однако, возможно, я могу объяснить, как я это делаю, и вы могли бы применить что-то похожее на ваше решение, если вы еще этого не сделали.

Чтение / обработка ответа

  1. Прочитайте первую строку ответа и назначьте его свойству MimeBoundary. Эта первая строка UUID так же хорошо как MimeBoundary объекта ответа.
  2. Объединить MimeBoundary с символами для контрольной подачи / перевода строки (\r\n), а остальная часть объекта ответа с помощью ReadToEnd() метод. Прочитайте эту объединенную строку в строковое свойство, ResponseString,
  3. Создать переменную (match) хранить возврат Regex.Match() метод и использовать шаблон, чтобы найти ACABulkRequestTransmitterStatusDetailResponse узел в пределах ResponseString,
  4. Звоните Deserializer<T> метод, который будет использовать XmlSerializer преобразовать match переменная в ACABulkRequestTransmitterStatusDetailResponseType объект. Присвойте это свойству StatusDetailResponse,
  5. Использовать StatusDetailResponse свойство, чтобы найти значение TransmissionStatus, Если TransmissionStatus равно "AcceptedwithErrors", "PartiallyAccepted" или "Rejected", в ответе будет присутствовать вложение ошибки.

Чтение / обработка вложения

  1. Найти индекс декларации XML (DeclarationIndex) в пределах ResponseString, Если индекс -1, вложение не найдено. Согласно IRS, это может произойти, когда это произойдет, обновить ContactPersonLastName поле и повторно отправить передачу в виде Replacement, Если оно больше -1, должно быть вложение.
  2. Найти всю строку вложения, получив Substring из ResponseString начиная с DeclarationIndex и заканчивая LastIndexOf MimeBoundry минус DeclarationIndex, Назначьте эту строку AttachmentXML переменная.
  3. Я создал класс для SubmissionDetailResponse который был создан путем взятия образца вывода XML для Error Attachment и создание класса из него в .NET, Deserialize AttachmentXML в это SubmissionDetailResponse учебный класс.
  4. Обработать данные из SubmissionDetailResponse в базу данных для просмотра ошибок.
Другие вопросы по тегам