Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problemas com o JAXB no Eclipse

Ao tentar executar o exercício 06 do capítulo 07, recebo o sguinte erro:

Exception in thread "main" javax.xml.bind.DataBindingException: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.JAXB._marshal(JAXB.java:589)
    at javax.xml.bind.JAXB.marshal(JAXB.java:471)
    at br.com.caelum.jms.TesteProdutorTopico.main(TesteProdutorTopico.java:36)
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
    at javax.xml.bind.JAXB$Cache.<init>(JAXB.java:127)
    at javax.xml.bind.JAXB.getContext(JAXB.java:154)
    at javax.xml.bind.JAXB._marshal(JAXB.java:578)
    ... 2 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
    at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
    ... 8 more

Eu segui diversas recomendações, mas nenhuma resolveu.

Já adicionei o jaxb-api-2.3.1.jar

O que mais posso fazer? Pelo que li, tem a ver com as mudanças introduzidas no Java 9 e também que o JAXB seria "deprecated".

Tem alguma outra forma de resolver isto para eu continuar o capítulo?

1 resposta
solução!

Após muita pesquisa e dois dias sem conseguir avançar no curso, finalmente cheguei a uma solução.

A solução: Basicamente eu tive que alterar a estrutura do projeto para um projeto Maven. E, somente após isto, incluir as dependências abaixo (relacionadas ao JAXB) no arquivo pom.xml.

  <dependencies>
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.1</version>
        <scope>runtime</scope>
    </dependency>
  </dependencies>

Dica: Uma coisa que não estava óbvia para mim (que não sabia nada sobre o uso do Maven para gerenciar dependências) é que não basta incluir um arquivo pom.xml com as dependências. Você precisa ter o Maven integrado ao Eclipse.

O artigo que me ajudou a entender como funciona e como instalar e configurar o Maven e que, consequentemente, resolveu meu problema foi este:

http://luizricardo.org/2014/06/instalando-configurando-e-usando-o-maven-para-gerenciar-suas-dependencias-e-seus-projetos-java/

Boa sorte!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software