Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
414 espaco 1
package nfe;
2
 
3
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
4
import br.com.swconsultoria.nfe.dom.enuns.AssinaturaEnum;
5
import br.com.swconsultoria.nfe.dom.enuns.DocumentoEnum;
6
import br.com.swconsultoria.nfe.dom.enuns.EstadosEnum;
7
import br.com.swconsultoria.nfe.dom.enuns.ServicosEnum;
8
import br.com.swconsultoria.nfe.exception.NfeException;
9
import br.com.swconsultoria.nfe.schema_4.enviNFe.TEnviNFe;
10
import br.com.swconsultoria.nfe.schema_4.enviNFe.TRetEnviNFe;
11
import br.com.swconsultoria.nfe.util.ObjetoUtil;
12
import br.com.swconsultoria.nfe.util.WebServiceUtil;
13
import br.com.swconsultoria.nfe.util.XmlNfeUtil;
14
import br.com.swconsultoria.nfe.ws.RetryParameter;
15
import br.com.swconsultoria.nfe.wsdl.NFeAutorizacao.NFeAutorizacao4Stub;
16
import lombok.extern.java.Log;
17
import org.apache.axiom.om.OMAbstractFactory;
18
import org.apache.axiom.om.OMElement;
19
import org.apache.axiom.om.OMFactory;
20
import org.apache.axiom.om.util.AXIOMUtil;
21
import org.apache.axiom.om.util.StAXParserConfiguration;
22
import org.apache.axis2.transport.http.HTTPConstants;
23
import org.xml.sax.InputSource;
24
 
25
import javax.xml.bind.JAXBException;
26
import javax.xml.stream.XMLStreamException;
27
import java.io.StringReader;
28
import java.rmi.RemoteException;
29
import java.util.Iterator;
30
 
31
/**
32
 * Classe Responsavel por Enviar o XML.
33
 *
34
 * @author Samuel Oliveira - samuel@swconsultoria.com.br - www.swconsultoria.com.br
35
 */
36
@Log
37
class Enviar {
38
 
39
    /**
40
     * Metodo para Montar a NFE
41
     *
42
     * @param enviNFe
43
     * @param valida
44
     * @return
45
     * @throws NfeException
46
     */
47
    static TEnviNFe montaNfe(ConfiguracoesNfe config, TEnviNFe enviNFe, boolean valida) throws NfeException {
48
 
49
        try {
50
 
51
            /**
52
             * Cria o xml
53
             */
54
            String xml = XmlNfeUtil.objectToXml(enviNFe, config.getEncode());
55
 
56
            /**
57
             * Assina o Xml
58
             */
59
            xml = Assinar.assinaNfe(config, xml, AssinaturaEnum.NFE);
60
 
61
            //Retira Quebra de Linha
62
            xml = xml.replaceAll(System.lineSeparator(), "");
63
 
64
            log.info("[XML-ASSINADO]: " + xml);
65
 
66
            /**
67
             * Valida o Xml caso sejá selecionado True
68
             */
69
            if (valida) {
70
                new Validar().validaXml(config, xml, ServicosEnum.ENVIO);
71
            }
72
 
73
            return XmlNfeUtil.xmlToObject(xml, TEnviNFe.class);
74
 
75
        } catch (Exception e) {
76
            throw new NfeException(e.getMessage(),e);
77
        }
78
 
79
    }
80
 
81
    /**
82
     * Metodo para Enviar a NFE.
83
     *
84
     * @param enviNFe
85
     * @param tipoDocumento
86
     * @return
87
     * @throws NfeException
88
     */
89
    static TRetEnviNFe enviaNfe(ConfiguracoesNfe config, TEnviNFe enviNFe, DocumentoEnum tipoDocumento) throws NfeException {
90
 
91
        try {
92
 
93
            String xml = XmlNfeUtil.objectToXml(enviNFe, config.getEncode());
94
 
95
            OMElement ome;
96
            if (tipoDocumento.equals(DocumentoEnum.NFE)) {
97
                ome = AXIOMUtil.stringToOM(xml);
98
            } else {
99
                OMFactory factory = OMAbstractFactory.getOMFactory();
100
                ome = factory.getMetaFactory().createOMBuilder(factory, StAXParserConfiguration.NON_COALESCING, new InputSource(new StringReader(xml))).getDocumentElement();
101
            }
102
 
103
            Iterator<?> children = ome.getChildrenWithLocalName("NFe");
104
            while (children.hasNext()) {
105
                OMElement omElementNFe = (OMElement) children.next();
106
                if ((omElementNFe != null) && ("NFe".equals(omElementNFe.getLocalName()))) {
107
                    omElementNFe.addAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe", null);
108
                }
109
            }
110
 
111
            log.info("[XML-ENVIO]: " + xml);
112
 
113
            NFeAutorizacao4Stub.NfeDadosMsg dadosMsg = new NFeAutorizacao4Stub.NfeDadosMsg();
114
            dadosMsg.setExtraElement(ome);
115
 
116
            NFeAutorizacao4Stub stub = new NFeAutorizacao4Stub(WebServiceUtil.getUrl(config, tipoDocumento, ServicosEnum.ENVIO));
117
 
118
            // Timeout
119
            if (ObjetoUtil.verifica(config.getTimeout()).isPresent()) {
120
                stub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, config.getTimeout());
121
                stub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT, config.getTimeout());
122
            }
123
 
124
            //Erro 411 MG
125
            if (tipoDocumento.equals(DocumentoEnum.NFCE) && config.getEstado().equals(EstadosEnum.MG)) {
126
                stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false);
127
            }
128
 
129
            if (ObjetoUtil.verifica(config.getRetry()).isPresent()) {
130
                RetryParameter.populateRetry(stub, config.getRetry());
131
            }
132
 
133
            NFeAutorizacao4Stub.NfeResultMsg result = stub.nfeAutorizacaoLote(dadosMsg);
134
            log.info("[XML-RETORNO]: " + result.getExtraElement().toString());
135
            return XmlNfeUtil.xmlToObject(result.getExtraElement().toString(), TRetEnviNFe.class);
136
 
137
        } catch (RemoteException | XMLStreamException | JAXBException e) {
138
            throw new NfeException(e.getMessage(), e);
139
        }
140
 
141
    }
142
 
143
}