0

如何在 java 中编程以获取附件?我终于得到了这个程序来发送 mtom,并接收状态更新。来自美国国税局的那条肥皂消息的一部分带有提交文件中错误列表的附件。我一直在网上搜索,试图找出如何从响应中下载附件。我收到响应肥皂消息,然后尝试使用它执行此操作:

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--
4

1 回答 1

0

我知道这对聚会来说已经很晚了,我的解决方案是 inC#而你的解决方案是java. 但是,也许我可以解释我是如何做到这一点的,如果你还没有的话,你可以应用类似于你的解决方案的东西。

读取/处理响应

  1. 阅读响应的第一行并将其分配给 MimeBoundary 属性。第一行是响应对象UUID的以及MimeBoundary
  2. 使用 方法将MimeBoundary与控制提要/换行符 ( \r\n) 的字符和响应对象的其余部分连接起来ReadToEnd()。将此连接的字符串读入字符串属性ResponseString.
  3. 创建一个变量 ( match) 来存储Regex.Match()方法的返回值,并使用模式ACABulkRequestTransmitterStatusDetailResponseResponseString.
  4. 调用Deserializer<T>将使用XmlSerializermatch变量转换为ACABulkRequestTransmitterStatusDetailResponseType对象的方法。将此分配给一个属性StatusDetailResponse
  5. 使用该StatusDetailResponse属性查找 的值TransmissionStatus。如果 TransmissionStatus 等于“AcceptedwithErrors”、“PartiallyAccepted”或“Rejected”,则响应中将出现错误附件。

读取/处理附件

  1. 在 .xml 文件中查找声明 XML( DeclarationIndex)的索引ResponseString。如果索引为 -1,则找不到附件。根据美国国税局的说法,这可能会发生,当发生这种情况时,请更新该ContactPersonLastName字段并将传输重新发送为Replacement. 如果大于-1,应该有附件。
  2. 通过检索以 a开头并以减号结尾的aSubstring来查找附件的整个字符串。将此字符串分配给一个变量。ResponseStringDeclarationIndexLastIndexOfMimeBoundryDeclarationIndexAttachmentXML
  3. 我为SubmissionDetailResponse它创建了一个类,它是通过获取 XML 输出的样本Error Attachment并在.NET. Deserialize进入AttachmentXML这个SubmissionDetailResponse班级。
  4. 将数据处理SubmissionDetailResponse到数据库中以进行错误审查。
于 2016-11-23T16:51:13.673 回答