miércoles, 22 de mayo de 2019

Clean out your Docker images, containers and volumes

Cleaning up containers
Kill all running containers
> docker kill $(docker ps -q)
Delete all stopped containers
> docker rm $(docker ps -a -q)
Cleaning up images
Delete an image
> docker rmi <image name>
Delete all 'untagged/dangling' images
> docker rmi $(docker images -q -f dangling=true)
Delete all images
> docker rmi $(docker images -q)
Cleaning up volumnes
Once a volume is not longer associated with a container, it is considered 'dangling'
> docker volume rm $(docker volume ls -f dangling=true -q)

jueves, 16 de mayo de 2019

How to remove namespaces from XML using XSLT

Sometimes, XML documents you receive could contain unneeded or incorrect namespace information. You can use XSLT stylesheets to remove the namespace information in these documents.

XML Input
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:reportRequest xmlns:ns1="http://v1.dto.reports.rolandopalermo.com">
    <ns1:metadata>
        <ns1:account>12345678</ns1:account>
        <ns1:reportName>Current_Payment</ns1:reportName>
    </ns1:metadata>
    <ns1:report>
        <ns1:reportId>1</ns1:reportId>
        <ns1:header>
            <ns1:id>999999999</ns1:id>
            <ns1:name>John Smith</ns1:name>
        </ns1:header>
        <ns1:invoices>
            <ns1:invoice>
                <ns1:invoiceNumber>0000000000</ns1:invoiceNumber>
                <ns1:dueDate>07/01/18</ns1:dueDate>
                <ns1:invoiceAmount>14.00</ns1:invoiceAmount>
                <ns1:amountPaid>14.00</ns1:amountPaid>
            </ns1:invoice>
        </ns1:invoices>
        <ns1:paymentMethodInformation>
            <ns1:cardType>VISA</ns1:cardType>
            <ns1:cardName>************1111</ns1:cardName>
            <ns1:cardHolder>Juan Pérez</ns1:cardHolder>
            <ns1:authorizationCode>dd92c0f864ea9ff1016501e880d03451</ns1:authorizationCode>
        </ns1:paymentMethodInformation>
    </ns1:report>
</ns1:reportRequest>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:ns1="http://v1.dto.reports.rolandopalermo.com">
    <xsl:template match="/">
        <xsl:apply-templates
            select="ns1:reportRequest/ns1:report" />
    </xsl:template>
    <xsl:template match="*">
        <xsl:element name="{local-name(.)}">
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:copy />
    </xsl:template>
</xsl:stylesheet>
XML Output
<?xml version="1.0" encoding="UTF-8"?>
<report>
    <reportId>1</reportId>
    <header>
        <id>999999999</id>
        <name>John Smith</name>
    </header>
    <invoices>
        <invoice>
            <invoiceNumber>0000000000</invoiceNumber>
            <dueDate>07/01/18</dueDate>
            <invoiceAmount>14.00</invoiceAmount>
            <amountPaid>14.00</amountPaid>
        </invoice>
    </invoices>
    <paymentMethodInformation>
        <cardType>VISA</cardType>
        <cardName>************1111</cardName>
        <cardHolder>Juan Pérez</cardHolder>
        <authorizationCode>dd92c0f864ea9ff1016501e880d03451</authorizationCode>
    </paymentMethodInformation>
</report>

miércoles, 15 de mayo de 2019

Cliente para consumo de servicios Web de la DIAN con Java

Hace ya algunos meses se viene implementando el tema de facturación electrónica en Colombia, lo cual ha conllevado a muchos desarrolladores de software a una intensa búsqueda de recursos en internet que le permitan completar el objetivo de llevar a sus respectivas empresas a la emisión exitosa de comprobantes electrónicos. 

Sin embargo, el camino definitivamente no será fácil debido a la pobre documentación que la DIAN pone a disposición. Este escenario es muy común en países de Latinoamérica; ya hace algunos años tuve la oportunidad de conocer el modelo de facturación electrónica de Ecuador, el cual adolecía de los mismos problemas de documentación. 

Ahora bien, para alegría de nuestros lectores, el día de hoy pongo a su alcance las URL's de los WSDL's de los servicios web de la DIAN, tanto para ambientes de Habilitación como de Operación. En la siguiente tabla muestro un listado de las tres operaciones que la DIAN pone a nuestra disposición: 

Consulta de documentos
Habilitación: https://facturaelectronica.dian.gov.co/habilitacion/B2BIntegrationEngine/FacturaElectronica/consultaDocumentos.wsdl
Operación: https://facturaelectronica.dian.gov.co/operacion/B2BIntegrationEngine/FacturaElectronica/consultaDocumentos.wsdl

Consulta de resoluciones
Habilitación: https://facturaelectronica.dian.gov.co/servicios/B2BIntegrationEngine-servicios/FacturaElectronica/consultaResolucionesFacturacion.wsdl
Operación: https://facturaelectronica.dian.gov.co/servicios/B2BIntegrationEngine-servicios/FacturaElectronica/consultaResolucionesFacturacion.wsdl

Emisión de comprobantes electrónicos
Habilitación: https://facturaelectronica.dian.gov.co/habilitacion/B2BIntegrationEngine/FacturaElectronica/facturaElectronica.wsdl
Operación: https://facturaelectronica.dian.gov.co/operacion/B2BIntegrationEngine/FacturaElectronica/facturaElectronica.wsdl

Y si ya logramos generar los clientes para el consumo de estos servicios Web, ahora es necesario configurar las cabeceras de seguridad que permitirán un apropiado consumo de estos servicios ¡Bastante trabajo el que nos esperar!

Pero no todas son malas noticias - ¿Se imaginan que al ejecutar el siguiente código Java podamos, por ejemplo, consultar un documento electrónico enviado a la DIAN?
public static void main(String[] args) throws MalformedURLException, DatatypeConfigurationException, ParseException {
    String identificadorSoftware = "";
    String password = "";
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    EnvioConsultaDocumento request = new EnvioConsultaDocumento();
    //Métodos set omitidos
    DianSoapWSClient client = new DianSoapWSClient(identificadorSoftware, password, TipoAmbiente.HABILITACION);
    DocumentosRecibidos response = client.consultaResultadoValidacionDocumentos(request);
}
Luego de muchas vueltas a la documentación de la DIAN y apoyado en experiencias pasadas, se ha logrado la implementación de un cliente Jar que nos brinda una capa de abstración a toda la complejidad que exige la DIAN como parte del consumo de sus servicios.

Detalles del producto
Versión Java JDK 8
Modo de integración Artefacto Maven
Costo USD 75
Servicios soportados Emisión de facturas, consulta de documentos, consulta de resoluciones
Licenciamiento No posee restricciones de licencia

Datos de contacto
Skype rolandopalermo
Email rolando.roc@gmail.com
Facebook fb.com/rolandopalermo