lunes, marzo 31, 2014

Monitoreo Conexion a Base de DATOS.

Before Connect Model Property

Scope

Languages: Java, .NET
Environments: Web, Win
Access Technologies: JNDI (Java), JDBC (Java), ADO.NET (.NET)


Introduction

The Before Connect property has been implemented to change connection properties dynamically at execution time.

In order to use this feature, a GeneXus procedure is required. This procedure should state the connection properties at execution time; it will be executed immediately before any connection request is executed by the application to interact with the database.

A new model property called 'Before Connect' has been added.

Description

A GeneXus procedure should be stated in the new 'Before Connect' property because it will be called before the connection is established. This procedure must be programmed in GeneXus and should fulfill some requirements as well.

In this procedure you may state/change the properties of the Datastore to which the application should connect to.

This procedure will be called every time that a database request is executed. For instance, if we have a work panel that loads data from a database, this procedure will be executed in each Refresh (F5).

Procedure requirements
It must have at least one in/out DBConnection type parameter.

parm(INOUT: &dbconn); //&dbconn is a DBConnection type variable

In 3 Tier models, the "Execute in new LUW" object property must be set to yes.

The procedure receives the &dbconn with the Datastore details, and you can modify those details depending on any logic that you may need to apply. For example, you can change the Datastore details depending on the User that is actually executing the application.

Example - Multi company application

Suppose that the login web panel sets the user that has logged in a web session:
&Session.Set('UserID', str(&UserID)) 


Also, we want to connect to different databases depending on the user logged in.
For this purpose, let's define a procedure named CONNECT, which must be stated in the 'Before Connect' Model property:

JAVA Example

Rules
Parm(inout: &dbconn); 

Source
&UserID = val(&Session.Get('UserID')) 

Do Case
   Case &UserID = 1 
   &DataBase  = "companyone" 
   Case &UserID = 2 
   &DataBase  = "companytwo" 
   Otherwise 
   &DataBase  = "companyone" //default database 
Endcase 

// Get Default connection details 
&dbconn = GetDatastore("Default") 
&dbconn.JDBCDriverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver" 
&dbconn.JDBCDriverURL = "jdbc:microsoft:sqlserver://fabian:1433;databaseName=" + trim(&DataBase) + ";SelectMethod=cursor" 
&dbConn.UserName = 'username' 
&dbConn.UserPassword = 'userpassword' 
Tip: Para XEV2, con driver jtds, configurar así:
&dbconn.JDBCDriverName = "net.sourceforge.jtds.jdbc.Driver"
&dbconn.JDBCDriverURL = "jdbc:jtds:sqlserver://MyServer:1433/"+ &database.Trim()

Tip: check the client.cfg configuration file located under the classes folder if you want to get the complete JDBC Driver URL.

.NET Example
Rules
Parm(inout: &dbconn); 

Source
&UserID = val(&Session.Get('UserID')) 

//select the Database depending on UserID 
Do Case
   Case &UserID = 1 
   &DataBase  = "companyone" 
   Case &UserID = 2 
   &DataBase  = "companytwo" 
   Otherwise 
   &DataBase  = "companyone" //default database 
Endcase 

//Change connection properties 
&dbconn = GetDatastore("Default") 
&dbconn.UserName = 'username' 
&dbconn.UserPassword = 'userpassword' 
&dbconn.ConnectionData = "DATABASE=" + &DataBase.Trim()

Considerations for Java

Two new properties have been implemented in the DBConnection type for using an external data source to connect to a database. These new properties are: UseExternalDatasource and ExternalDatasourceName.

Example for Java

For example, the procedure may look as follows:

parm(&dbconn); 

&dbcon.UseExternalDatasource = 1 
&dbcon.ExternalDatasourceName = "jdbc/orabarba1" 


Compatibility with Java 8.0

In GeneXus 8.0 you could change the connection information at runtime. This behavior could be implemented by changing a few lines in the CLIENT.CFG (read more information in SAC #16659).

Considerations that should be taken into account when using this feature in GeneXus 8.0:

Will this stop working after converting to GeneXus 9.0?
YES

What should we do in order to keep this functionality in the new version?
As per the above mentioned SAC, this functionality required a few more lines in the CLIENT.CFG and a procedure that returned a string with the JNDI.

Now, it is not necessary to change the CLIENT.CFG, and we suggest deleting those lines. However, a few changes should be done in the model.

The old procedure should now receive a DBConnection type variable instead of a Character one. In this procedure, the DBConnection properties should be stated rather than returning only a character variable:

&dbcon.UseExternalDatasource = 1 
&dbcon.ExternalDatasourceName = "jdbc/orabarba1" 


&dbconn should be inout instead of OUT as before.

Fuente: Articulo Original

sábado, marzo 29, 2014

Algo Util - Codigo externo en aplicaciones GeneXus

En algunas oportunidades, es necesario invocar a codigo externo para la realizacion de tareas
que con Genexus es dificil (o imposible) de realizar.
La idea de esta pagina es especificar los diferentes casos y en la medida que sirva generar objetos
externos o incorprar la funcionalidad a GeneXus.

    Try/Catch
Para programas que pueden lanzar alguna excepción y se necesita controlar,
se agrega sentencias para capturarlas y manejarlas.

    Variables de ambiente/propiedades.

Recuperar el valor de una variable de ambiente del sistema operativo.
Es util para grabar en directorios temporarios o en directorio del usuario para guardar algun documento.



java [!&dirtmp!]=System.getProperty("TMP"); 
 // esto se pasa con -D al invocar a java.
csharp [!&dirtmp!]= Environment.GetEnvironmentVariable("TEMP");
java [!&fileseparator!] = System.getProperty("file.separator");   
// para diferenciar Windows y Linux en el separador de directorios.



    Chequeo de propiedades de archivos.

En el caso de imagenes, recuperar la resolución, tipo, cantidad de colores, etc.

    Recuperación de datos de directorios.


Es necesaria recuperar los archivos de un directorio, ordenado por fecha de recepcion.
El tipo de datos Directory solo posibilita traer los archivos del directorio ordenados por nombre del archivo.
Recuperar todos y despues recuperar la fecha de modificacion y ordenar puede ser lento. 

    Leer/grabar una puerta serial

Ejemplo de esto puede ser para usar modems, envio de SMS, recepci

    Mandar un error a System.err

    Redireccionar System.err a un archivo.

    Obtener el directorio donde esta instalada una aplicacion


java [!&Path!] = httpContext.getDefaultPath();   
csharp [!&Path!] = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); // Win exe 

csharp String url = new Uri(Context.Request.Url, ResolveUrl("~")).ToString(); 
csharp [!&Path!] = url;  //web


    Listar el contenido de un directorio ftp.
    Comprimir y descomprimir archivos. (ZIP/UNZIP)
    Firmar / Verificar Firma digital en archivos XML (se esta trabajando en un objeto externo para hacer esto).

Ver Cryptography in GeneXus

    Recuperar informacion de los procesos ejecutando en la maquina.


    Wrapper de Webservices,
    Cuando el WSDL Inspector no puede importar correctamente la derfinicion de un Web Service.
En muchas oportunidades no se puede utilizar algun webservice definido en
otras herramientas pues utiliza algun tipo de datos no soportado correctamente por
Genexus o porque tiene definicion complicada.
En estos casos hay que usar herramientas nativas de java o Visual Studio y con eso se generan webservices
intermedio que pueden ser utilizados con GeneXus.

    Recuperar el nombre del Servidor donde estoy ejecutando

    Hacer un Pop.up en aplicacion windows.

Una aplicacion windows que ejecuta en background y ante determinado evento despliega un popup en la taskbar.

    Manipulacion de imagenes.

Crop / Grabar imagenes en diferentes resoluciones y tamaños..
Ver Image Tools


Ver Image Tools





Fuente: articulo original 

viernes, marzo 28, 2014

Asignar Color a Celda de Excel

Cuando se quiere asignar un color tipo RGB a una celda en EXCEL.

Se puede utilizar lo siguiente:

    java com.genexus.uifactory.UIFactory UIFactory = null;
   
&ExcelDocument.Cells(&CellRow, &FirstColumn).Color = rgb(100,090,09)

Funciona Perfecto.


Fuente foro de genexus

Redirije a WWW.LOCALHOST.COM

En el FireFox escribo en la barra de direcciones localhost, se redirige a www.localhost.com.

Para ello tenemos que modificar una propiedad en el FireFox:

Desactivar la Búsquedas de palabra clave en Internet

Puedes desactivar la búsqueda de palabras clave en Internet cambiando una preferencia.
Nota: Esta preferencia no afecta a las búsquedas inteligentes por palabras clave desde la barra de direcciones.
  1. En la barra de direcciones, escribe about:config y pulsa Intro.
    • El aviso de about:config "¡Zona hostil para manazas!" o "¡Esto puede cancelar su garantía!" puede aparecer. Haz clic en ¡Tendré cuidado, lo prometo! o ¡Seré cuidadoso, lo prometo!, para continuar.
  2. En el campo Buscar, escribe keyword.enabled.
  3. Haz doble clic en la preferencia keyword.enabled para determinar su valor a falso.

¿Cómo Acelerar el Emulador de Android?


Si eres un desarrollador Android, sabes que el emulador toma mucho tiempo para arrancar (sin mencionar el lento desempeño una vez que ya está funcionando) y esto afecta tu productividad.
Afortunadamente, si cuentas con un equipo razonablemente moderno con un procesador Intel® que tenga Intel® Virtualization Technology habilitada, puedes hacer usó de está tecnología para acelerar significativamente el emulador de Android. En esté artículo explicaremos los pasos necesarios para hacer esto. Es posible hacerlo tanto en sistema operativo Windows cómo en Mac OS y Linux. En los dos primeros casos se utiliza Intel® Hardware Accelerated Execution Manager (Intel® HAXM), y en el caso de Linux se utiliza KVM.

1. Introducción

A continuación te guiaremos para realizar la instalación del Intel® Hardware Accelerated Execution Manager (Intel® HAXM), un motor de virtualización asistido por hardware (hipervisor) que usa Intel® Virtualization Technology (Intel® VT) para acelerar el desarrollo de Android en Windows y OSX. También explicamos cómo configurar una máquina virtual basada en kernel (KVM) asistida por hardware en Linux.

2. Instalación

2.1. Prerrequisitos

  • Tener instalado el kit de desarrollo de software (SDK) de Android.
  • Tu equipo debe tener un procesador Intel compatible con Intel VT-x y EM64T, y con la funcionalidad Execute Disable (XD) Bit habilitada desde el BIOS.

2.2. Instalación en Windows

Después de haber instalado el SDK de Android, abre el SDK Manager. En la sección de extras, podrás encontrar el Intel HAXM.
Marca la casilla y haz clic en el botón “Install packages…”; cuándo hayas instalado el paquete, el estado aparecerá cómo “Installed”. Esto es engañoso, ya que en realidad no queda instalado. El SDK tan sólo copia el ejecutable de Intel HAXM a nuestra máquina, pero todavía tenemos que instalarlo. Para instalar el ejecutable de Intel HAXM, busca en tu disco duro IntelHaxm.exe (o IntelHAXM.dmg en Mac OS X). Si dejaste todos los valores predeterminados, debería estar en C:Program FilesAndroidandroid-sdkextrasIntelHardware_Accelerated_Execution_ManagerIntelHaxm.exe.
Intel HAXM sólo funciona en combinación con una de las imágenes de sistema x86 de procesador Intel® Atom™. Al momento de publicar esté artículo existen imágenes x86 disponibles para Android 2.3.3 (API 10), 4.0.3 (API 15), 4.1.2 (API 16), 4.2.2 (API 17) y 4.3 (API 18). Estás imágenes de sistema de Intel se pueden instalar de la misma manera que las imágenes basadas en ARM, mediante el administrador de SDK.
haxm01.jpg
Cuando das clic en el ejecutable de IntelHaxm, se muestra una pantalla de bienvenida cómo esta:
haxm03.jpg
haxm04.jpg
Puedes ajustar la cantidad de memoria RAM que se asigna a Intel HAXM. Después de ajustarla, haz clic en “Next”. La pantalla siguiente confirma la asignación de memoria. Si todo está cómo lo desea, haz clic en “Install”.
haxm05.jpg
A fin de poder instalar el Intel HAXM, debes tener habilitada Intel VT-x en el BIOS, si no, verás un error cómo esté durante la instalación:
haxm06.jpg
Si se produce esté error, ve al BIOS y habilítala.
haxm07.jpg
La segunda opción para descargar el Intel HAXM y la imagen de sistema del emulador x86 Emulator System Image es ir directamente al sitio web: http://software.intel.com/es-es/android y descargar de allí todos los componentes necesarios.

2.3. Instalación en Linux

Los pasos para acelerar el emulador de Android en Linux son diferentes que en Windows y Mac OS X, porque Intel HAXM no es compatible con Linux, así que es necesario usar KVM en su lugar. Los pasos que se muestran a continuación corresponden a Ubuntu* 12.04 y pueden diferir ligeramente en otras distribuciones de Linux.

2.3.1. Instalación de KVM

Para instalar y ejecutar KVM, primero necesitas comprobar que tu CPU admite virtualización de hardware. Tal vez la forma más práctica de hacer esto es con el comando “kvm-ok” que se encuentra en el paquete “cpu-checker”.
  1. $ sudo apt-get install cpu-checker
  2. $ sudo kvm-ok
Este comando nos indicará si nuestro equipo cuenta con la capacidad de ejecutar KVM y si ya está habilitado en el BIOS o tenemos que habilitarlo.
El siguiente paso es instalar la KVM y otros paquetes necesarios. Para hacerlo, escribe:
  1. $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
Si obtienes una pantalla de configuración de Postfix, selecciona “No configuration”.
A continuación, agrega tu usuario al grupo KVM y al grupo libvirtd. Para hacerlo, escribe:
  1. $ sudo adduser your_user_name kvm
  2. $ sudo adduser your_user_name libvirtd
Después de la instalación, vuelve a iniciar sesión y los cambios surtirán efecto. Para probar la instalación, escribe:
  1. $ sudo virsh -c qemu:///system list
Ahora puedes ir al paso siguiente, que es crear y ejecutar el dispositivo virtual de Android (AVD). Esté procedimiento es el mismo para Linux y Windows.

2.4. Cómo crear un AVD (dispositivo virtual de Android*)

Después de instalar el SDK e Intel HAXM (o KVM en Linux), puedes crear un dispositivo virtual que tenga emulación acelerada por hardware. Para hacerlo, ve a AVD Manager y crea un nuevo dispositivo. Asegúrate de seleccionar Intel Atom (x86) cómo CPU/ABI. Está selección sólo aparece en el menú desplegable si tienes instalada la imagen de sistema x86 Intel; para que los gráficos sean más suaves, activa la emulación de GPU cuándo crees el AVD.
Haz clic en New y crea tu AVD x86. Asegúrate de elegir una API compatible con imágenes de sistema x86, que CPU/ABI esté establecido en x86 y de haber habilitado la emulación de GPU (OpenGL ES*). Cuándo hayas hecho esto, haz clic en Create AVD para crear el AVD.
haxm11.jpg
Para iniciar el AVD x86, haz clic en Start y luego en Launch.
haxm12.jpg
Si la instalación fue exitosa, cuándo se esté iniciando el emulador, aparecerá un cuadro de diálogo que indicará que Intel HAXM se está ejecutando en modo virtual rápido. También puedes revisar los detalles en “About phone” dentro del emulador.

Conclusión

En esté artículo hemos revisado cómo podemos apoyarnos en las capacidades de los procesadores Intel para acelerar el emulador para Android en Windows, Mac y Linux. La mejora de rendimiento que apreciarás con Intel HAXM o KVM depende de tu equipo, pero debería ser entre 5 y 10 veces mejor que al no usar aceleración.
Si deseas conocer más herramientas y recursos que ofrece Intel para desarrolladores Android, te recomendamos que visites la zona para desarrolladores Android en http://software.intel.com/es-es/android

Fuente:Articulo Original

martes, marzo 11, 2014

Envio de PDF o cualquier imagen en un Servicio WEB.


De la aplicación donde publico el WS en el metodo este lo que hago es crear el pdf y luego al SDT de salida que tiene un atributo blob le asigno el pdf

Qué versión de Genexus ni generador trabajas pero creo que en todos los casos tienes que codificar en 64 bits para poder enviarlo por el ws. Yo trabajo con Gx9, generador Java, y en mi caso no contaba con funciones específicas para esa conversión, tuve que usar una clase java externa. Pero creo que a partir de la versión X ya existen funciones específicas para ello. Investiga por ahí.

He estado investigando pero no me doy cuenta com hacerlo por lo que veo hay q utilizar las funciones tobase64String y frombase64string yo tengo mi SDT que es de este estilo sdtsalida.blob

Tengo que convertirlo a base64 y luego para consumirlo tengo q hacerle un frombase64string el tema que del lado de donde lo consumo el sdt q me crea en
ves de tener un blob tengo un character(9999) y no se ccomo seguir.

A partir de ese string es que debes reconstruir tu estructura del lado del cliente. Aplica la función FromBase64String y obtendrás la estructura.

Te cuento mas o menos como hago del lado donde publico lo q hago es esto:
    &blob=(ruta del pdf)'C:\Documents and Settings\prueba.pdf'
    &sdtsalida.blob=&blob.ToBase64String()
    &blob tipo blob
    &sdtsalida sdt de salida

y de donde lo consumo :
    &salida=ws.Execute()
    &pdf.FromBase64String(&salida.blob)
    &pdf tipo blob

pero se me cae &pdf.FromBase64String(&salida.blob)
    Capaz q estoy entendiendo mal .
    Después otra duda es ni bien tenga el archivo cargado en una variable de tipo blob como hago para mostrarla en una ventana ??? mi idea es crearme
    un procedimiento q me lo abra en una ventana del browser.

Ya pude enviarlo ...
    Estaba haciéndolo mal estaba intentando mandar un blob y al final cambie y mande un longvarchar entonces del lado donde publico hago un tobase64 y del otro un frombase64

   

sábado, marzo 08, 2014

Aumentar Memoria en Tomcat7 y ubicacion para Genexus

  • Mmodificar el archivo CATALINA.BAT y asignar el siguiente valor 
  • set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -XX:PermSize=64m -XX:MaxPermSize=256m
  • Ejecutar startup.bat
  • Revisar si existe la asignación de memoria
Si el Genexus no recone automatica mente la ubicacion del Tomcat7, generalmente esto sucede cuando no realizamos la instalación, en lugar de ello se descomprime el archivo ZIP.

Debemos revisar que exista en el registro lo siguiente:

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\6.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0\Tomcat7]
"InstallPath"="C:\\Tomcat7"
"Version"="7.0.50"

Si no existe cargar esos datos, hacer con REGEDIT y  registrar los datos arriba citados

Si requerimos hacerlo en linux ejecutar lo siguiente:

Linux:
JAVA_OPTS="$JAVA_OPTS -server -Xms256M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"


Su significado:

-Xms256M => memoria heap inicial alocada

-Xmx512M => memoria heap máxima
-XX:PermSize=64m => perm gen inicial asignado
-XX:MaxPermSize=128m => perm gen máximo

domingo, marzo 02, 2014

Ejemplos de Facturacion electronica.

Tomado de: Registrar WS-SecurtyWS-Security DGI (Efactura) WebServices


Consuming DGI (Efactura) WebServices

The provided services from DGI called Efactura are webservices based on WS-Security. This specification is different from the standards
Webservice generated by GeneXus, so in order to communicate with them we must set up some configuration.
Note: These examples contains only an implementation for DGI Service "FACRECEPCIONSOBRE". 
Efactura News
Prerequisites
- Certificate
- RUC Number

.NET 

Note: GeneXus X Evolution 2 Upgrade 2 required
1. Install the certificate provided by DGI using mmc.exe from
Windows. Install it in "Personal" store on the Computer Account.
2. DGI signs the response with theirs certificate (DGI RUC PRUEBA CEDE). So in order to work property,
DGI certificate must be installed on the server.
In order to get this certificate go to https://www.efactura.dgi.gub.uy/ (Note2)
Install that certificate in Personal Store on computer account using mmc.exe.
This certificate will be used in order to authenticate with DGI web services.
3. Grant Certificate Permission to ASP.NET (or the user that is running the application): How to do it
4. Download and import this NET DGI XPZ WebService Sample that contains the
DGI WebService with the SDTs needed.
5. Set property Use Native Soap property = true to .NET Generator in order to use
WCF instead of GeneXus SOAP client. 6
6. Set the web.config as the following:
  • Replace: "RUC21XXXXXX" with the Serial Number of your certificate.
<system.serviceModel>
    <client>
      <endpoint address="https://efactura.dgi.gub.uy:6443/ePrueba/ws_eprueba" 
binding="customBinding" bindingConfiguration="dgiBinding" contract="GeneXus.Programs.ISdtWS_eFactura" 
name="GeneXus.Programs.SdtWS_eFacturaClient" behaviorConfiguration="ServiceBehavior">
        <identity>
          <dns value="DGI RUC PRUEBA CEDE" />
        </identity>
      </endpoint>
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ServiceBehavior">
          <clientCredentials>    
            <clientCertificate findValue="RUCXXXXXX" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
            <serviceCertificate>
              <authentication certificateValidationMode="PeerOrChainTrust" />             
              <defaultCertificate findValue="DGI RUC PRUEBA CEDE" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My" />
            </serviceCertificate>
          </clientCredentials>
          <protectionLevel level="Sign" />
          <!-- None, Sign, EncryptAndSign-->
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
     <customBinding>
        <binding name="dgiBinding">
          <security includeTimestamp="false" allowSerializedSigningTokenOnReply="true" 
authenticationMode="MutualCertificate" requireDerivedKeys="false" securityHeaderLayout="Lax" 
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
            <secureConversationBootstrap />
             <localClientSettings detectReplays="false"/>
          </security>
          <textMessageEncoding messageVersion="Soap11" />
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>
    <extensions>
      <behaviorExtensions>
        <add name="protectionLevel" type="GeneXus.Wcf.ProtectionLevelBehaviorElement, GxClasses, Version=10.1.0.0, 
Culture=neutral, PublicKeyToken=6f5bf81c27b6b8aa" />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
7. WebPanel "Ejemplo_ServicioSobre" contains an example for calling DGI Service "Envio de mensaje con Sobre".
You need to replace the certificate that is being used within code: &CryptoUtils.FindCertificate("RUC21XXXXXX")
If there is warning certificate message's, it get a "Certficate with Subject = RUC21XXXXX not found" error.
In order to fix, there are two options
               - install a Certification Autorithy certificate (in order to fix the warning message) or
               - Looking for invalid certificates, it means, setting the parameter validonly = false . It would be replacing &CryptoUtils.FindCertificate("RUC21XXXXXX") for  &CryptoUtils.FindCertificate1("RUC21XXXXXX", storeName, storeLocation, false)
Note: DGI does not accept SOAP messages with empty element tags (example: <cantidad/>). XML Null Serialization property (SDT) property must be set to "No tag" in every SDT attribute. 
Note2: Another way to Get the DGI certificate is from the SOAP header in the response:
<wsse:BinarySecurityToken >MIIFvjCC.............</wsse:BinarySecurityToken>.
Copy the text inside tags BinarySecurityToken, then save as "cert.cer".

JAVA (tested Apache Tomcat 6 and 7)

Note: GeneXus X Evolution 1 Upgrade 6 required
1. Download JAVA_DGI_WS.zip  and extract to your hard drive.

2. DGIWS.xpz. Import into GeneXus.
3. Add "java_dgiWS_EOs.jar" to classpath in GeneXus.
3. Copy and merge all folders and files inside folder "webapp" to your Tomcat\WebApp directory.
4. Create your Java Key Store (JKS) from your Certificate:
For generating a .jks the following command can be executed:
keytool -v -importkeystore -srckeystore RUC2XXXXXXX.pfx -srcstoretype PKCS12 -destkeystore RUC2XXXXXXX.jks -deststoretype JKS. Refer to this link for more info.
(Temporary Limitation: Set the Java Key Store Password as the private key password). 
In order to obtain certifcate alias (needed for the next step), run the following command:
keytool -list -v -keystore RUC2XXXXXXX.jks
5. Download the Server certificate and import it into the Java cacerts. For example, suppose the downloaded certificate is dgi_ssl_cert.cer, a sample command is:
keytool -import -alias dgi_efactura_https -file "E:\DGI_HTTP_CERT.cer" -keystore "C:\Program Files\Java\jre6\lib\security\cacerts"             (default cacert password: changeit)
Check this article for further information. By default the WebService address is https://efactura.dgi.gub.uy:6443/ePrueba/ws_eprueba, check the ServicioSobre WebPanel reference:
&DGIWSWrapper.Address = "https://efactura.dgi.gub.uy:6443/ePrueba/ws_eprueba"
6. Open "ServicioSobre" to see how the DGI WebService is being called. You will need to edit the following code in order to specify the certificate information:
Sub 'SetConfigurationOptions'

&keyStoreFile = "C:\\RUC2XXXXXXX.jks"
&keyStorePassword = "desarrollo" //Current Limitation: keystorepassword must be equal to private key password
&keyStoreType = "JKS"
&privateKeyAlias = "xx-xxxx-xx-xxx-xxxx-xxxxx"

//Setting Certificate information in order to sign XML
&xmlSignatureutil.keyStoreFile = &keyStoreFile
&xmlSignatureutil.keyStorePassword = &keyStorePassword
&xmlSignatureutil.keyStoreType = &keyStoreType
&xmlSignatureutil.privateKeyAlias = &privateKeyAlias
&xmlSignatureutil.privateKeyPassword = &keyStorePassword

//Setting Certificate information in order to sign the SOAP message
&DGIWSWrapper.keyStoreFile = &keyStoreFile
&DGIWSWrapper.keyStorePassword = &keyStorePassword
&DGIWSWrapper.keyStoreType = &keyStoreType
&DGIWSWrapper.privateKeyAlias = &privateKeyAlias
&DGIWSWrapper.privateKeyPassword = &keyStorePassword

Endsub
and make sure to change the RUCEmisor and associated information in the GenerateSDT subroutine.

Logging

By default, logging is placed in C:\Temp\log4j.log
Note: For production environment you should turn off logging by opening "java_dgiWS_EOs.jar" with Winrar and deleting "java_  log4j.properties".

Troubleshooting

Problem: ErrorDsc: "No se pudo inicializar el módulo Axis Rampart -Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
Solution1:  Check again the step 5, the server side certificate is not imported in the local truststore
or not referenced using the Java variables (javax.net.ssl.trustStorePassword and javax.net.ssl.trustStore).
Solution2:  Add the server certificate to the Java Runtime Environment used by the Application Server. Link

Registrar Certificado para factura electronica.

Pasos para Facturacion Electronica:

Aqui algunas experiencias:

Tomado de:Ejemplos de Facturacion Electronica registrar certificado

javax.net.ssl.SSLHandshakeException - Instalar certificados en la Maquina Virtual Java


Tuve este inconveniente con la aplicacion en la que trabajo, este es parte del trace y debajo esta la solucion:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


Eventualmente cuando queremos acceder a un servicio web atraves de nuestra aplicacion Java, necesitemos instalar un certificado a nuestra maquina virtual, para ello primero necesitaremos bajar dicho certificado en nuestra pc y luego instalarlo en la JVM


Para guardar el el certificado en la pc

Acceder a traves de un IE al wsdl del web services, una vez abierto ir a
file-> properties -> General tab -> certificates ->details tab ->copy to file ->aparece un wizard y luego presionar next-> ahi seleccionar el formato DER encoded binary -> ponerle algun nombre significativo al certificado y luego finish

una vez que tengo el certificado en la pc, ahora que hago?
Yo luego de guardarlo en la pc, copie los certificados a un directorio cercano al root
una cosa asi c:\directorio

Luego de eso procederemos a instalar el certificado con el Keytool en el cacerts

Aqui esta el comando ejemplo para instalar el certificado

C:\Program Files\Java\jre6\lib\security>keytool -import -alias webc -file "C:\certificates\webc.cer"
-keystore "C:\Program Files\Java\jre6\lib\security\cacerts"

donde webc es el nombre significativo de este ejemplo pero puede ser el que cada uno quiera y webc.cer es el certificado que bajamos con el wsdl

una vez que le damos enter a ese comando se nos va a requerir la password del keystore, la cual por defecto es changeit

Enter keystore password: changeit
Owner: CN=ebosi.vzbi.com, OU=VBP Cert, O=Verizon Business, L=Boston, ST=MA, C=US
Issuer: CN=VBP Certificate Authority, OU=VBP CA, O=Verizon Business, L=Boston, ST=MA, C=US
Serial number: 49
Valid from: Mon Feb 22 17:03:19 GMT-03:00 2010 until: Tue May 22 17:03:19 GMT-03:00 2018
Certificate fingerprints:
MD5: CC:0B:73:44:67:74:85:06:F2:82:57:D9:BA:53:A1:C4
SHA1: A2:3E:2C:E9:EB:A8:71:14:2C:4E:D9:1D:7B:06:6B:DF:54:29:8F:F6
Trust this certificate? [no]: yes
Certificate was added to keystoreMe ha dado este error:

error de herramienta de claves: java.io.FileNotFoundException: C:\Program Files (x86)\Java\jre6\lib\security\cacerts (Acceso denegado)

Si alguien sabe como arreglarlo??
Gracias

  Hay que ejecutar el cmd como administrador para que no te de ese error