Web服务中类型日期的问题

时间:2012-10-22 22:10:47

标签: java web-services

我正在开发一个使用某些服务的应用程序,我必须使用Date类型。 WebService有这个方法:

 public TRespuestaPedidosClientes consultarPedidosClientes(int id_cuenta_padre, int nivel_cuenta_padre, int id_cuenta, Date f_inicio, Date f_fin, int estado_pedido, String n_pedido)
 {
     // devuelve los pedidos asociados de una cuenta o de todas las cuentas hijas
     // en un rango de fechas y con estado determinado
     //
     // id_cuenta == 0 -> buscar las cuentas hijas asociadas a la cuenta padre
     //      los pedidos los realizán las cuentas de nivel >= 3
     //      cuenta padre es de nivel 1 -> los pedidos son de sus cuentas hijas de nivel 2
     //      cuenta padre es de nivel 2 -> los pedidos son de sus cuentas hijas de nivel 3 y de las hijas de éstas
     // id_cuenta != 0 -> solo los pedidos de ésta cuenta:
     //      - nivel_cuenta_padre = 1 => id_cuenta debe ser de nivel 2
     //      - nivel_cuenta_padre = 2 => id_cuenta debe ser de nivel 3
     //      - nivel_cuenta_padre = 3 => id_cuenta puede ser igual que id_cuenta_padre (ella misma) o puede ser de nivel 4 o 5

     TRespuestaPedidosClientes resultado = new TRespuestaPedidosClientes();
     try
     {

         System.out.println("F_inicio es:"+f_inicio.getTime());
         System.out.println("Tengo la cuenta padre:"+id_cuenta_padre);
         System.out.println("El nivel del padre es"+nivel_cuenta_padre);
         //   A-> nivel cuenta padre = 1
         //          - buscar cuentas hijas -> nivel 2
         //          - por cada cuenta hija de nivel 2: A y C
         //   B-> nivel cuenta padre = 2
         //          - buscar cuentas hijas -> nivel 3
         //          - buscar pedidos
         //   C-> nivel cuenta padre >= 3
         //          - buscar cuentas hijas -> nivel 4
         //          - pedidos de la cuenta actual y de sus hijas

         TRespuestaCuentas result1 = new TRespuestaCuentas();
         switch (nivel_cuenta_padre)
         {
             case 0:
                 {

                     result1 = buscar_Cuentas_Hijas(id_cuenta_padre);
                     if (result1.getError() == -1)
                         throw new Exception("Error al buscar las cuentas hija");


                     for (int i = 0; i < result1.getDatosCuentas().length; i++)
                     {
                         if ((id_cuenta == 0) || (id_cuenta != 0 && id_cuenta == result1.getDatosCuentas()[i].getId_cuenta()))
                         {

                            TRespuestaPedidosClientes resultP = buscar_Pedidos_Cuenta(id_cuenta_padre, result1.getDatosCuentas()[i], 0, estado_pedido, f_inicio, f_fin, n_pedido);
                             if (resultP.getError() == -1)
                                 throw new Exception(resultP.getDescripcion_error());


                             if (resultP.getDatosPedidosClientes() != null)
                             {

                                 for (int k = 0; k < resultP.getDatosPedidosClientes().length; k++)
                                 {
                                     resultP.getDatosPedidosClientes()[k].setCuenta(result1.getDatosCuentas()[i].getNombre());
                                 }

                                 // añadir pedidos a resultado
                                 resultP.setDatosPedidosClientes(cargar_Datos_PedidosClientes_Array(resultP.getDatosPedidosClientes(), resultado.getDatosPedidosClientes()));
                             }
                         }
                     }

                     break;
                 }

             case 1:
                 {

                     result1 = buscar_Cuentas_Hijas(id_cuenta_padre);
                     if (result1.error == -1)
                         throw new Exception("Error al buscar las cuentas hijas");


                     for (int i = 0; i < result1.getDatosCuentas().length; i++)
                     {
                         if ((id_cuenta == 0) || (id_cuenta != 0 && id_cuenta == result1.getDatosCuentas()[i].getId_cuenta()))
                         {

                             TRespuestaPedidosClientes resultP = buscar_Pedidos_Cuenta(id_cuenta_padre, result1.getDatosCuentas()[i], 0, estado_pedido, f_inicio, f_fin, n_pedido);
                             if (resultP.error == -1)
                                 throw new Exception(resultP.getDescripcion_error());

                             if (resultP.getDatosPedidosClientes() != null)
                             {

                                 for (int k = 0; k < resultP.getDatosPedidosClientes().length; k++)
                                 {
                                     resultP.getDatosPedidosClientes()[k].setCuenta(result1.getDatosCuentas()[i].getNombre());
                                 }

                                 // añadir pedidos a resultado
                                 resultP.setDatosPedidosClientes(cargar_Datos_PedidosClientes_Array(resultP.getDatosPedidosClientes(), resultado.getDatosPedidosClientes()));
                             }
                         }
                     }

                     break;
                 }
             case 2:
                 {

                         result1 = buscar_Cuentas_Hijas(id_cuenta_padre);
                         if (result1.error == -1)
                             throw new Exception("Error al buscar cuentas hijas");

                         System.out.println("Datos cuentas es:"+result1.getDatosCuentas().length);

                         for (int i = 0; i < result1.getDatosCuentas().length; i++)
                         {
                             if ((id_cuenta == 0) || (id_cuenta != 0 && id_cuenta == result1.getDatosCuentas()[i].getId_cuenta()))
                             {

                               TRespuestaPedidosClientes resultP = buscar_Pedidos_Cuenta(id_cuenta_padre, result1.getDatosCuentas()[i], 0, estado_pedido, f_inicio, f_fin, n_pedido);
                                 System.out.println("ResultP"+resultP.getError());  
                                 if (resultP.getError() == -1)
                                     throw new Exception(resultP.getDescripcion_error());


                                 if (resultP.getError() != 4)
                                 {
                                     // añadir pedidos a resultado
                                     resultP.setDatosPedidosClientes(cargar_Datos_PedidosClientes_Array(resultP.getDatosPedidosClientes(), resultado.getDatosPedidosClientes()));
                                 }
                             }
                         }

                     break;
                 }
             default:
                 {

                     result1 = buscar_Datos_Cuenta(id_cuenta_padre);
                     if (result1.getError() == -1)
                         throw new Exception("Error al buscar los datos de las cuentas");


                     TRespuestaPedidosClientes resultP = buscar_Pedidos_Cuenta(id_cuenta_padre, result1.getDatosCuentas()[0], id_cuenta, estado_pedido, f_inicio, f_fin, n_pedido);
                     if (resultP.getError() == -1)
                         throw new Exception(resultP.getDescripcion_error());

                     if (resultP.getDatosPedidosClientes() != null)
                     {
                         // añadir pedidos a resultado
                         resultP.setDatosPedidosClientes(cargar_Datos_PedidosClientes_Array(resultP.getDatosPedidosClientes(), resultado.getDatosPedidosClientes()));
                     }

                     break;
                 }
         }

         resultado.setError(0);
         resultado.setDescripcion_error("");
         return resultado;
     }
     catch (Exception ex)
     {
         resultado.setError(-1);
         resultado.setDescripcion_error(ex.getMessage());
         resultado.setDatosPedidosClientes(null);
         return resultado;
     }
 }

当我从客户端调用此服务时,我这样做:

TRespuestaPedidosClientes pedidosClientes=bsStubcloud.consultarPedidosClientes(params[0].getId_cuenta_padre(), nivel, cuenta, cal, calF, 0, servletRequest.getParameter("edt_pedido").toString());

将cal和calF转换为Calendar类型,我不知道为什么。我使用Axis,这是保留这些日期类型的任何方式,当我通过这些参数时,他们得到今天不是,我发送的。我该怎么办?

非常感谢

1 个答案:

答案 0 :(得分:1)

当JAXB将java对象映射到xml时,java数据类型将映射到相应的xml架构类型。您可以在here找到有关数据类型映射的更多详细信息。

xml架构类型dateTime / date / time的java数据类型为javax.xml.datatype.XMLGregorianCalendar

在这种情况下,服务器端创建的java Date首先被封送到xml,而在客户端中,xml日期被解组为java日期类型(XMLGregorianCalendar)。你可以得到日历对象。

希望这有帮助。