none
Convertir ArrayList Web Service Java en Array .Net RRS feed

  • Pregunta

  • Estimados

    Buenas noches, estoy tratado de consumir un web service que desarrolle en JAVA donde defini un metodo que realiza una consulta para obtener dos campos de una tabla de mi base de datos en MYSQL y este metodo es de tipo ArrayList y con una clase. El metodo que cree es el siguiente.

    @WebMethod(operationName = "consultarTipoContribuyente")
        public ArrayList<TipoContribuyente> consultarTipoContribuyente() {
            //TODO write your implementation code here:
    
            ArrayList<TipoContribuyente> arrayTipoContribuyente = new ArrayList<TipoContribuyente>();
    
            try {
                Conexion cn = new Conexion();
                cn.conectar();
                Statement st = cn.getSt();
                String sql = "SELECT codigo,descripcion FROM tipocontribuyente";
                ResultSet rs = st.executeQuery(sql);
    
                while(rs.next())
                {
                    int codigo=rs.getInt("codigo");
                    String descripcion=rs.getString("descripcion");
                    
                    TipoContribuyente tc = new TipoContribuyente(codigo,descripcion);
    
                    arrayTipoContribuyente.add(tc);
                }
                cn.desconectar();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
    
            return arrayTipoContribuyente;
        }

    Cuando ejecuto el web service este me devuelve una lista con mis datos que se encuentran en la base sin ningun problema.

    Ahora al querer consumir este metodo desde mi cliente en vb.Net me sale un error al querer instanciar mi metodo consultarTipoContribuyente().

    Cabe recalcar que estuve siguiendo una guia que encontre en internet para convertir un ArrayList de Java en vb.Net pero me bota el siguiente error

    Imports GestionVentas.vicsoftService
    Imports System.Collections.Generic
    Public Class frmMantenimientoClientes
        Public vicsoft As New vicsoftClient
        Private Sub frmMantenimientoClientes_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Try
                'Dim array As Entidad.TipoContribuyente = vicsoft.consultarTipoContribuyente
                Dim tipoContribuyente As Array() = vicsoft.consultarTipoContribuyente
    
                
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    Si alguien me puede orientar que estoy haciendo mal.

    O de que forma puedo obtener los datos de mi ArrayList de Java porque deseo poner estos datos en un combobox.S

    De antemano les agradezco mucho su ayuda. La verdad soy nuevo en esto de consumir web services.

    Saludos desde Ecuador.

    martes, 2 de agosto de 2016 4:19

Respuestas

  • TipoContribuyente debe tener unos atributos para codigo y descripcion, no se si se llamen igual

    si se llama igual despues de la linea que llena el datasource

    Combo.DisplayMember = "descripcion"

    Combo.ValueMember = "codigo"



    Harold Chia

    Ya lo pude resolver.

    Indico lo que realice en caso de que a alguien mas le pueda servir.

     Dim arreglo As tipoContribuyente()
                arreglo = vicsoft.consultarTipoContribuyente()
    
                Dim dtTipoContribuyente As New DataTable
    
                dtTipoContribuyente = convertirListaDataTable(arreglo.ToList)
    
                If arreglo.Length > 0 Then
                    cmbTipoContribuyente.DataSource = dtTipoContribuyente
                    cmbTipoContribuyente.DisplayMember = "descripcion"
                    cmbTipoContribuyente.ValueMember = "codigo"
    
                End If

    Cabe recalcular que utilice un metodo convertirListaDataTable porque estoy mas acostumbrado a utilizar este componente.

    No se si sea lo mas optimo pero fue lo que resolvio mi problema

    Adjunto el codigo del metodo

    Public Shared Function convertirListaDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
            Dim td As New DataTable
            Dim entityType As Type = GetType(T)
            Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(entityType)
    
            For Each prop As PropertyDescriptor In properties
                td.Columns.Add(prop.Name)
            Next
    
            For Each item As T In list
                Dim row As DataRow = td.NewRow()
    
                For Each prop As PropertyDescriptor In properties
                    row(prop.Name) = prop.GetValue(item)
                Next
    
                td.Rows.Add(row)
            Next
            Return td
        End Function

    Muchas gracias por su tiempo y por su gentil ayuda.

    martes, 2 de agosto de 2016 19:33

Todas las respuestas

  • Estás declarando un array de objetos del tipo Array. Cámbialo por un array del tipo concreto de dato que coincide con los resultados. Es decir, donde pones esto:

    DIm tipoContribuyente as Array()

    cámbialo por esto otro:

    Dim tipoContribuyente as GestionVentas.vicsoftService.tipoContribuyente()

    martes, 2 de agosto de 2016 6:51
  • Estás declarando un array de objetos del tipo Array. Cámbialo por un array del tipo concreto de dato que coincide con los resultados. Es decir, donde pones esto:

    DIm tipoContribuyente as Array()

    cámbialo por esto otro:

    Dim tipoContribuyente as GestionVentas.vicsoftService.tipoContribuyente()


    Estoy intentando realizar lo que se me propuso pero la linea que me indico solo define el tipo de dato para mi Objeto TipoContribuyente pero en ningun momento estoy llenando mi consulta del web service llamada consultarTipoContribuyente() que es del tipo ArrayList<TipoContribuyente> y la deseo poner en un arreglo para luego este arreglo pasarlo a mi ComboBox.

    Si me puede guiar como hacerlo le agradeceria mucho.

    martes, 2 de agosto de 2016 17:12
  • Si lo quieres dejar en cun combo 

    se podria dejar como:

    Combo.Datasource = vicsoft.consultarTipoContribuyente


    Harold Chia

    martes, 2 de agosto de 2016 17:19
  • Si lo quieres dejar en cun combo 

    se podria dejar como:

    Combo.Datasource = vicsoft.consultarTipoContribuyente


    Harold Chia

    Lo intente de esa forma pero no solo me trae el nombre de los items sino tambien el nombre del servicio.

    Por ejemplo mi combo aparece el primer item como

    GestionVentas.vicsoftService.tipoContribuyente

    y no me aparecen los elementos dentro de la consulta.

    O de que manera puedo acceder a esos elementos para en el DisplayMember del combo pueda presentar el campo descripcion y en el value member el campo codigo que son los dos campos que retorna mi metodo consultarTipoContribuyente

    De antemano muchas gracias por tomarse la molestia de leer mi consulta.

    martes, 2 de agosto de 2016 17:36
  • TipoContribuyente debe tener unos atributos para codigo y descripcion, no se si se llamen igual

    si se llama igual despues de la linea que llena el datasource

    Combo.DisplayMember = "descripcion"

    Combo.ValueMember = "codigo"



    Harold Chia

    martes, 2 de agosto de 2016 18:39
  • TipoContribuyente debe tener unos atributos para codigo y descripcion, no se si se llamen igual

    si se llama igual despues de la linea que llena el datasource

    Combo.DisplayMember = "descripcion"

    Combo.ValueMember = "codigo"



    Harold Chia

    Ya lo pude resolver.

    Indico lo que realice en caso de que a alguien mas le pueda servir.

     Dim arreglo As tipoContribuyente()
                arreglo = vicsoft.consultarTipoContribuyente()
    
                Dim dtTipoContribuyente As New DataTable
    
                dtTipoContribuyente = convertirListaDataTable(arreglo.ToList)
    
                If arreglo.Length > 0 Then
                    cmbTipoContribuyente.DataSource = dtTipoContribuyente
                    cmbTipoContribuyente.DisplayMember = "descripcion"
                    cmbTipoContribuyente.ValueMember = "codigo"
    
                End If

    Cabe recalcular que utilice un metodo convertirListaDataTable porque estoy mas acostumbrado a utilizar este componente.

    No se si sea lo mas optimo pero fue lo que resolvio mi problema

    Adjunto el codigo del metodo

    Public Shared Function convertirListaDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
            Dim td As New DataTable
            Dim entityType As Type = GetType(T)
            Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(entityType)
    
            For Each prop As PropertyDescriptor In properties
                td.Columns.Add(prop.Name)
            Next
    
            For Each item As T In list
                Dim row As DataRow = td.NewRow()
    
                For Each prop As PropertyDescriptor In properties
                    row(prop.Name) = prop.GetValue(item)
                Next
    
                td.Rows.Add(row)
            Next
            Return td
        End Function

    Muchas gracias por su tiempo y por su gentil ayuda.

    martes, 2 de agosto de 2016 19:33