segunda-feira, 12 de setembro de 2011

Erro ao ler XML - Java

Stack trace do erro:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence.
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684)
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:405)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1242)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1654)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2985)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)...


Solução:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(streamResponse));
        
        String linha;
        StringBuilder buffer = new StringBuilder();
        while ((linha = bufferedReader.readLine()) != null)
            buffer.append(linha);
        bufferedReader.close();
        System.out.println("conteudo xml -> "+buffer);
        
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setCoalescing(true);
        DocumentBuilder builder = dbf.newDocumentBuilder();
        Document doc = builder.parse(new ByteArrayInputStream(buffer.toString().trim().getBytes("UTF8")));

//linha com problema antigo.
Document doc = builder.parse(streamResponse)));

private HttpURLConnection createHttpConnection(String URL) throws Exception {
        URL url = new URL(URL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
        return conn;
    }

    private InputStream getContentFromRequest(HttpURLConnection conn) throws Exception {
        // Obtém a resposta
        InputStream is = null;
        try {
            is = conn.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
            is = conn.getErrorStream();
        }
        return is;
    }

quarta-feira, 24 de agosto de 2011

Erro componente jsf 1.1 - Weblogic 11g

Boa noite,

minha intenção é registrar também algumas experiências profissionais. A primeira dela que gostaria de registrar, estou em um trabalho de migração da aplicação que trabalho do Weblogic 9.2 para o Weblogic 11g. A arquitetura da aplicação é composta por JDBC, EJB 2.0 e JSF 1.1 com RichFaces e tomahawk. Existe uma lib proprietária que foi encapsulado alguns componentes jsf. Esta lib apresentava erro de compilação toda vez que era referenciada.

O erro " No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during parsing of the .tld file." acontecia porque a URI definida no tld desta taglib tinha o endereço da seguinte forma:
"http://endereco.com.teste/" e o Weblogic não conseguia resolver este nome. Então encontrei a solução neste link e tudo ficou claro. A URI não deveria terminar em "/" e o resultado deveria ser "http://endereco.com.teste".

Após esta mudança o erro de compilação foi resolvida.

Segue stack completa, espero ter ajudado:

javax.faces.FacesException: weblogic.servlet.jsp.CompilationException: Failed to compile JSP /errorDisplay.jsp
errorDisplay.jsp:7:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib uri="http://sistema.empresa.com/" prefix="p"%>
    ^----^
errorDisplay.jsp:7:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib uri="http://sistema.empresa.com/" prefix="p"%>
    ^----^

    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425)
    at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    Truncated. see log file for complete stacktrace


Não sei se faz diferença para vocês, mas no Weblogic 9.2 o container não reclamava se você definisse um novo prefixo na declaração da taglib, o 11g exige que você utilize o mesmo prefixo definido no tld.

quarta-feira, 1 de junho de 2011

[MAC OS] Gerenciador de tarefas no iCal

No post anterior falei sobre o iCal e a possibilidade de sincronização do mesmo com o Gmail. Neste post, gostaria de complementar, as informações a respeito do iCal mostrando que o mesmo tem suporte a gerenciamento de tarefas (todo).
Para exibir a tela de tarefas, basta clicar conforme tela abaixo:


Você pode definir prioridades, alarmes e outras configurações, conforme figura abaixo:


Até onde pesquisei, não é possível sincronizar o Google Task com o Google Calendar. Fica a dica.
Referências sobre a impossibilidade de sincronizar iCal e Google taks:
http://gmailblog.blogspot.com/2011/01/top-tasks-for-google-tasks.html
http://www.google.com/support/forum/p/Calendar/thread?tid=0cf4489e6e69bd34&hl=en

[MAC OS] Como sincronizar ICal com Google Calendar

O Google Calendar, também conhecido como Google Agenda (na versão brasileira do Google) é um serviço gratuito que o Google disponibiliza para seus usuários para criação de uma agenda na web. Esta ferramenta fantástica do Google pode ser usada para compartilhar agenda de clientes do Google, você pode configurar envio de SMS ou email para lembrar de seus compromissos, programar mais de um calendário por contra, dentre outras funcionalidades (para conhecer melhor, acessem o tour da ferramenta). Sempre gostei muito do Google Calendar.
Quando comprei o Imac conheci a aplicação iCal do Mac OS e como já era usuário do Google Calendar, não queria abandonar o uso do serviço, que me oferece um envio de SMS como lembrete. O iCal sincroniza com o Iphone e isso torna uma poderosa ferramenta para controle de seus compromissos. Mas descobri um problema, como unir os dois mundos de duas aplicações que eu gostava bastante e não queria deixar de usar?
Solução: Sincronizar as duas aplicações.
O iCal tem suporte as sincronizações expostas abaixo:



Para acessar este menu, basta clicar no menu de opções iCal->Preferências e abrirá a janela acima. Selecionar a aba conta.

Quando é marcado a opção automática, e informado email e senha do Gmail o iCal iniciará a comunicação com os servidores do Google para fazer a sincronização. Após isto, basta avançar para as duas próximas telas e o processo de sincronização estará concluído.




Após esta tela, é bom fazer um teste de criar um evento no iCal e atualizar o calendário do Google Agenda e vice-versa.
Para criar um novo evento basta clicar com o botão direito do mouse em uma data/horário, clicar em Novo Evento ou usar o atalho Command+k e definir as configurações do evento, conforme é exibido na figura abaixo:


Espero ter ajudado.

Referências:
http://smarterware.org/3172/twig-tip-sync-your-google-calendar-to-ical-in-one-step
http://forums.macrumors.com/showthread.php?p=8013856#post8013856

terça-feira, 8 de fevereiro de 2011

[MAC OS] Configurando PHP, Apache e Mysql no Mac OS X (MAMP)

Bem pessoal,
apresento neste post uma aplicação bastante interessante para Mac OS. O MAMP (mac, apache, mysql and php) que pode ser encontrado aqui.
Achei uma aplicação interessante e gostaria de compartilhar com vocês.