Campos Date em Web Service

7 respostas
C

Pessoal, boa tarde. Estou com problema na utilização de campos Date com Web Service. Tenho uma aplicação que usa o rich:calendar para pegar um campo data. Uso também o JSF na aplicação. Este campo deve ser passado via Web Service para uma pesquisa em banco. Porém o Web Service trabalha com XMLGregorianCalendar, não é mesmo? Aí estou sempre tendo erro ou de cast ou de parse. Não estou conseguindo resolver este problema. Qual é o método de se trabalhar neste caso? Quando devo fazer a conversão do Data para XMLGregorianCalendar? Ou devo trabalhar de alguma outra forma? Alguém pode me ajudar?

Grato, Carlos.

7 Respostas

O

Você pode tentar enviar uma String e o cliente pegaria essa String e recuperaria uma date

E

Olá Carlos,

Eu tive um problema muito parecido com o seu. Mas o meu campo era passado para um bean normal mesmo, que gravava no banco através de um DAO.
Eu resolvi passando um formato para a data (no caso, dd/MM/yyyy), porque ele não conseguia gravar no banco sem eu definir o formato.
Dê uma olhada no trecho do código:

<rich:calendar id="data" firstWeekDay="0" showWeeksBar="false" showFooter="false" converter="javax.faces.DateTime" datePattern="dd/MM/yyyy" enableManualInput="true" locale="#{localeBean.locale}" value="#{bean.data}" showApplyButton="false" required="true" rendered="#{permissaoBean.escrita and permissaoBean.modoEdicao}"/>

Espero que tenha te ajudado.

C

Vc está dizendo para eu trafegar com a data no WS como String?

O

É apenas uma solução, existem vários exemplos de transformar String em data.
Você pode olhar aqui no guj mesmo.

C

Pois é cara, meu código está assim:

<h:panelGroup> <rich:calendar id="dataInicial" inputSize="12" datePattern="dd/MM/yyyy" enableManualInput="false" value="#{exibeBean.dataInicial}" label="Data Inicial" /> </h:panelGroup> <h:panelGroup> <rich:calendar id="dataFinal" inputSize="12" datePattern="dd/MM/yyyy" enableManualInput="false" value="#{exibeBean.dataFinal}" label="Data Final" /> </h:panelGroup>

Aí eu pego estas datas no meu bean e envio via WS para que seja feito uma consulta usando estas datas.

private Date dataInicial; private Date dataFinal; ... ListaUltimoService servico = new ListaUltimoService(); ListaUltimo port = servico.getListaUltimoPort(); eventos = port.listaArray(dataInicial, dataFinal);

Aí eu tenho o erro:

SEVERE: java.lang.ClassCastException: java.util.Date cannot be cast to javax.xml.datatype.XMLGregorianCalendar

O

para converter data para String

protected String converteData(java.util.Date dtData){ SimpleDateFormat formatBra; formatBra = new SimpleDateFormat("dd/MM/yyyy"); try { java.util.Date newData = formatBra.parse(dtData.toString()); return (formatBra.format(newData)); } catch (ParseException Ex) { return "Erro na conversão da data"; } }
referência: http://javafree.uol.com.br/topic-860958-Converter-Data-para-String.html

para converter String para Date

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
    java.sql.Date data = new java.sql.Date(format.parse(dataStr).getTime());

referência: http://www.guj.com.br/java/41935-converter-string-para-date

E

cmendes:
Pois é cara, meu código está assim:

<h:panelGroup> <rich:calendar id="dataInicial" inputSize="12" datePattern="dd/MM/yyyy" enableManualInput="false" value="#{exibeBean.dataInicial}" label="Data Inicial" /> </h:panelGroup> <h:panelGroup> <rich:calendar id="dataFinal" inputSize="12" datePattern="dd/MM/yyyy" enableManualInput="false" value="#{exibeBean.dataFinal}" label="Data Final" /> </h:panelGroup>

Aí eu pego estas datas no meu bean e envio via WS para que seja feito uma consulta usando estas datas.

private Date dataInicial; private Date dataFinal; ... ListaUltimoService servico = new ListaUltimoService(); ListaUltimo port = servico.getListaUltimoPort(); eventos = port.listaArray(dataInicial, dataFinal);

Aí eu tenho o erro:

SEVERE: java.lang.ClassCastException: java.util.Date cannot be cast to javax.xml.datatype.XMLGregorianCalendar

Passa o converter do XMLGregorianCalendar no rich:calendar para ver se funciona :smiley:

Criado 13 de junho de 2011
Ultima resposta 13 de jun. de 2011
Respostas 7
Participantes 3