2016-08-15 12 views
0

Как я могу запрограммировать java для получения вложения? Я, наконец, получил эту программу для отправки mtom и получения обновления статуса. Часть этого мыльного сообщения от возвращаемого IRS имеет вложение со списком ошибок в представленном файле. Я искал сеть, пытаясь выяснить, как загрузить вложение из ответа. Я получаю сообщение мыла ответа, а затем я пытаюсь сделать это с ним: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- [email protected]%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- [email protected]:us:gov:treasury:irs:common> 
Content-Transfer-Encoding: binary 


------=_Part_3_10783799.1471300737900-- 

ответ

0

Я знаю, что это довольно поздно к партии, и мое решение в C# тогда ваше решение в java. Однако, может быть, я могу объяснить, как я это делаю, и вы можете применить что-то похожее к вашему решению, если вы этого еще не сделали.

Чтение/Обработка Отклик

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

Чтение/Обработка Привязанность

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

 Смежные вопросы

  • Нет связанных вопросов^_^