SOAP POST java - mjungjohann/Ingefactura GitHub Wiki

Seguridad

Para poder acceder al web service SOAP es necesaria el uso de una contraseña la cual debe ser pedida al equipo de soporte de ingefactura ([email protected]).

Enviar request

Los web service utilizan la comunicación por xml.

Las peticiones son HTTPS SAOP. El web service al ser de tipo SOAP posee una ruta WSDL ejemplo:

Envio de Archivo POST SOAP con java


package proyectopruebasoap;

import java.io.File;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.io.FileUtils;

public class ProyectoPruebaSOAP {

    public static void main(String[] args) {
        try {

            File file = new File("Ruta del archivo xml");

            String rut = "22222222";
            String dv = "1";
            String pass = "pass123";
            String numPedido = "111111";

            //convertimos el xml a string para poder enviarlo
            String xml = FileUtils.readFileToString(file);
            
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();
            
            SOAPMessage mensaje;
            mensaje = createSOAPRequest(rut, dv, pass, numPedido, xml);

            if (mensaje != null) {

             String url = "https://develop.ingefactura.cl/wsDte/igf?wsdl";  
                
                //se envía response 
                SOAPMessage soapResponse = soapConnection.call(mensaje, url);
                //tomamos la salida de datos(XML) y la tomamos como byte[]
                byte[] xmlsalida = printResponse(soapResponse);
                //convertimos el arreglo de bytes a string 
                //respuesta tomada
                String xmlfinal = new String(xmlsalida,Charset.forName("UTF-8"));
                

            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


//Metodo para retornar la respuesta como un arreglo de bytes
    private static byte[] printResponse(SOAPMessage soapResponse)
            throws Exception {
        TransformerFactory transformerFactory = TransformerFactory
                .newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        Source sourceContent = soapResponse.getSOAPPart().getContent();
  

        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
  
        transformer.transform(sourceContent, result);
        
        byte[] res = writer.toString().getBytes("ISO-8859-1");
        return res;
    }

    //con ayuda de este metodo se crea el documento xml para poder comunicarnos con 
    //el servicio web service
    private static SOAPMessage createSOAPRequest(String rut, String dv, String pass, String numPedido, String xml) {
        try {

            //creacion de Request SOAP
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage soapMessage = messageFactory.createMessage();
            SOAPPart soapPart = soapMessage.getSOAPPart();

            // SOAP Envelope
            SOAPEnvelope envelope = soapPart.getEnvelope();
            //cambiamos prefijo del xml 
            envelope.removeNamespaceDeclaration("SOAP-ENV");
            envelope.addNamespaceDeclaration("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            envelope.setPrefix("soapenv");
            
            SOAPHeader header = envelope.getHeader();
            SOAPBody body = envelope.getBody();
            header.setPrefix("soapenv");
            body.setPrefix("soapenv");
            
            
            //indicamos ruta de servicios
            envelope.addNamespaceDeclaration("ser", "http://servicios/");
            // SOAP Body
            SOAPBody soapBody = envelope.getBody();
            
            SOAPElement soapBodyElem = soapBody.addChildElement("sendDte", "ser");
            //agregamos elementos a enviar
            SOAPElement Rut = soapBodyElem.addChildElement("rut");
            SOAPElement Dv = soapBodyElem.addChildElement("dv");
            SOAPElement Pass = soapBodyElem.addChildElement("pass");
            SOAPElement NumPedido = soapBodyElem.addChildElement("numPedido");
            SOAPElement Xml = soapBodyElem.addChildElement("sxml");  

         // Agregamos a los elementos cada uno de sus atributos
            
            Rut.addTextNode(rut);
            Dv.addTextNode(dv);
            Pass.addTextNode(pass);
            NumPedido.addTextNode(numPedido);
            Xml.addTextNode(xml); 

            //guardamos los cambiaos hechos en el documento
            soapMessage.saveChanges()
            
            return soapMessage;

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }

    }

 }