2016-08-15 14 views
0

어떻게 첨부 파일을 얻기 위해 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- [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

나는 이것이 아주 늦게 파티에 알고, 당신의 솔루션 java에 반면 내 솔루션은 C#입니다. 그러나 어쩌면 내가이 일을 어떻게하는지 설명 할 수 있으며, 아직 해보지 않았다면 솔루션과 비슷한 것을 적용 할 수 있습니다.

읽기/처리 응답

  1. 는 응답의 첫 번째 줄을 읽고 MimeBoundary 속성에 할당합니다. 이 첫 번째 줄은 UUID과 응답 개체의 MimeBoundary입니다.
  2. 제어 피드/줄 바꿈 문자 (\r\n)와 MimeBoundary을 연결하고 나머지는 ReadToEnd() 메서드를 사용하여 연결합니다. 이 연결된 문자열을 문자열 속성 ResponseString으로 읽어들입니다.
  3. Regex.Match() 메서드의 반환 값을 저장하고 패턴을 사용하여 ResponseString 내의 ACABulkRequestTransmitterStatusDetailResponse 노드를 찾으려면 변수 (match)를 만듭니다.
  4. XmlSerializer을 사용하는 Deserializer<T> 메서드를 호출하여 match 변수를 ACABulkRequestTransmitterStatusDetailResponseType 개체로 변환합니다. 이것을 StatusDetailResponse 속성에 할당하십시오.
  5. StatusDetailResponse 속성을 사용하여 TransmissionStatus 값을 찾습니다. TransmissionStatus가 "AcceptedwithErrors", "PartiallyAccepted"또는 "Rejected"인 경우 오류 첨부가 응답에 표시됩니다.

읽기 /를 ResponseString 내에서 선언 XML (DeclarationIndex)의 인덱스를 찾기 첨부 파일을

  1. 을 처리. 인덱스가 -1이면 첨부 파일이 없습니다. 국세청에 따르면, 이런 일이 생길 때 ContactPersonLastName 필드를 업데이트하고 전송을 Replacement으로 다시 보냅니다. -1보다 크면 첨부 파일이 있어야합니다.
  2. DeclarationIndex로 시작 ResponseStringSubstring를 검색하고 LastIndexOfMimeBoundryDeclarationIndex로 끝나는하여 첨부 파일의 전체 문자열을 찾습니다. 이 문자열을 AttachmentXML 변수에 할당하십시오.
  3. Error Attachment에 대한 XML 출력의 샘플을 취하여 .NET에 클래스를 생성하여 작성한 SubmissionDetailResponse에 대한 클래스를 만들었습니다. AttachmentXML을이 SubmissionDetailResponse 클래스에 입력합니다.
  4. 오류 검토를 위해 SubmissionDetailResponse의 데이터를 데이터베이스로 처리하십시오.