4
respostas

Não consigo fazer import javax.xml.WebService

Não consigo fazer os seguintes "imports":

  • import javax.xml.WebService
  • import javax.xml.bind.annotation.XmlEnumValue
  • import javax.xml.bind.annotation.XmlEnumValue

Aparentemente quase nenhum import que envolva javax.xml está dando certo. Eu creio que isso acontece por conta da versão do java que eu tenho instalada aqui que é o java 11 enquanto que a versão que está sendo utilizada na vídeo aula é o java 8. Porém não sei como resolver esse problema sem ter que mudar a versão do meu java.

Alguém pode me ajudar com isso?

obs. Já procurei soluções na internet e nenhuma das encontradas funcionou pra mim.

4 respostas

Oi Átila, tudo bem?

O Java 11 removeu os módulos Java EE:

java.xml.bind (JAXB) - REMOVED

Dessa forma, se você não quiser mudar para o Java 8 é necessário baixar a lib do JAXB e adicionar ao seu projeto. Vou te passar um artigo de um instrutor da caelum que explica como resolver esse problema: https://blog.caelum.com.br/erros-com-jaxb-no-java-9/

Olá Otávio. Obrigado pelo retorno. Conforme sua orientação baixei todas as lib's (.jar) que eu estava precisando e adicionei ao projeto e assim todos os erros de import do projeto inteiro sumiram. Porém agora ao tentar rodar o seguinte código para publicar um serviço conforme feito na vídeo-aula obtenho o seguinte erro.

Código

package br.com.caelum.estoque.ws;

import javax.xml.ws.Endpoint;

public class PublicaWebService {

    public static void main(String[] args) {

        EstoqueWs service =  new EstoqueWs();
        String url = "http://localhost:8080/estoquews";

        Endpoint.publish(url, service);

    }

}

Erro

Exception in thread "main" javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61)
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58)
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:103)
    at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:112)
    at javax.xml.ws.spi.Provider.provider(Provider.java:96)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
    at br.com.caelum.estoque.ws.PublicaWebService.main(PublicaWebService.java:12)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:90)
    at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:123)
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:101)
    ... 4 more

Você consegue me ajudar com isso?

Acredito que precise colocar mais uma dependência para resolver esse problema.

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>rt</artifactId>
  <version>2.3.2</version>
</dependency>

Link para download: https://repo1.maven.org/maven2/com/sun/xml/ws/jaxws-rt/2.3.2/jaxws-rt-2.3.2.jar

Supondo que você não adicionou o jaxws-api, segue link também: https://repo1.maven.org/maven2/javax/xml/ws/jaxws-api/2.3.1/jaxws-api-2.3.1.jar

O jaxws-api eu já tinha adicionado, mas realmente estava faltando o jaxws-rt.

Depois de adicionar e rodar obtive um novo erro:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/stream/buffer/XMLStreamBuffer
    at com.sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:108)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
    at br.com.caelum.estoque.ws.PublicaWebService.main(PublicaWebService.java:12)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.stream.buffer.XMLStreamBuffer
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 3 more

Após isso adicionei streambuffer-2.0.0-M2.jar e na seguencia obtive o seguinte erro:

Exception in thread "main" java.lang.Error: javax.xml.soap.SOAPException: Unable to create SAAJ meta-factory: Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
    at com.sun.xml.ws.api.SOAPVersion.<init>(SOAPVersion.java:163)
    at com.sun.xml.ws.api.SOAPVersion.<clinit>(SOAPVersion.java:69)
    at com.sun.xml.ws.api.BindingID.<clinit>(BindingID.java:312)
    at com.sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:109)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
    at br.com.caelum.estoque.ws.PublicaWebService.main(PublicaWebService.java:12)
Caused by: javax.xml.soap.SOAPException: Unable to create SAAJ meta-factory: Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
    at javax.xml.soap.SAAJMetaFactory.getInstance(SAAJMetaFactory.java:112)
    at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:150)
    at com.sun.xml.ws.api.SOAPVersion.<init>(SOAPVersion.java:160)
    ... 5 more

Após isso tentei saaj-api-1.3.5.jar (javax.xml.soap), mas o mesmo erro permaneceu, então removi essa e adicionei saaj-impl-2.0.0-M1.jar (com.sun.xml.messaging.saaj), o mesmo erro permaneceu e só mudou quando eu adicionei esse mesmo jar na versão saaj-impl-1.5.1.jar e com isso tive esse último erro:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.ws.model.Injector (file:/C:/Users/Atila-Pc/Documents/eclipse-workspace-2/estoquews/lib/jaxws-rt-2.3.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.ws.model.Injector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/ws/policy/PolicyException
    at com.sun.xml.ws.wsdl.writer.WSDLGenerator.<init>(WSDLGenerator.java:218)
    at com.sun.xml.ws.db.DatabindingImpl.generateWSDL(DatabindingImpl.java:228)
    at com.sun.xml.ws.server.EndpointFactory.generateWSDL(EndpointFactory.java:660)
    at com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:278)
    at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:134)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:548)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:530)
    at com.sun.xml.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:304)
    at com.sun.xml.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:217)
    at com.sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:111)
    at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
    at br.com.caelum.estoque.ws.PublicaWebService.main(PublicaWebService.java:12)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.policy.PolicyException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 12 more

Após isso eu parei de tentar procurar dependências, porque provavelmente devo estar fazendo alguma coisa errada. Caso facilite, no link abaixo tem o projeto inteiro exatamente como ele ficou quando fiz essas alterações citadas acima. Aqui estou usando o java 11 e eclipse. https://drive.google.com/drive/folders/1SjdVfds_k1HWJDo_Ecbgu-YcltjI_wmn?usp=sharing