我正在开发一个使用某些服务的应用程序,我必须使用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,这是保留这些日期类型的任何方式,当我通过这些参数时,他们得到今天不是,我发送的。我该怎么办?
非常感谢
答案 0 :(得分:1)
当JAXB将java对象映射到xml时,java数据类型将映射到相应的xml架构类型。您可以在here找到有关数据类型映射的更多详细信息。
xml架构类型dateTime / date / time的java数据类型为javax.xml.datatype.XMLGregorianCalendar
在这种情况下,服务器端创建的java Date首先被封送到xml,而在客户端中,xml日期被解组为java日期类型(XMLGregorianCalendar)。你可以得到日历对象。
希望这有帮助。