Eu estou começando a trabalhar com WebService e estou ainda um pouco perdida… Eu tenho que criar um Client de teste para o meu WebService porém estou com o seguinte erro
Exception in thread "main" java.lang.NoClassDefFoundError: com.ibm.ws.webservices.multiprotocol.utils.WSDLFactoryImpl
at java.lang.J9VMInternals.verifyImpl(Native Method)
at java.lang.J9VMInternals.verify(J9VMInternals.java:72)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:134)
at br.com.alelo.florida.ejb.fidelity.servico.client.FidelityTransacaoTransferenciaP2PWS.main(FidelityTransacaoTransferenciaP2PWS.java:18)
Caused by: java.lang.ClassNotFoundException: com.ibm.ws.webservices.multiprotocol.utils.WSDLFactoryImpl
at java.net.URLClassLoader.findClass(URLClassLoader.java:419)
at java.lang.ClassLoader.loadClass(ClassLoader.java:643)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:345)
at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
... 4 more
A minha classe de teste está da seguinte maneira
public static void main(String[] args) {
try {
String urlWS = "http://localhost:9080/simulador/Transf/Transf.wsdl";
Object[] params = { new String("1223455"), new String("011"),
new String("992694476"), new String(""), new String("122"),
new String("011"), new String("992694476"), new String(""),
new String("36164238803"), new String("188"),
new String("claro"), new String(""), new String("") };
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(urlWS);
call.setOperationName("consultarInformacoes");
Integer ret = (Integer) call.invoke(params);
System.out.println("Resultado: " + ret);
} catch (Exception ex) {
ex.printStackTrace();
}
}
O servidor de aplicação que estou utilizando é Websphere, porém estou começando a conhecer ele agora. Será que alguém poderia me dar uma ajuda de onde estou errando?
Percebí que você está tentando criar um cliente dinâmico. É a intenção, ou foi acidental? Se foi acidental, já tentou usar wsimport? Se não foi, já tentou usar o Dispatcher, do JAX-WS?
EDIT: Além disso, me parece que tem alguma biblioteca faltando no próprio websphere. Tente usar o findjar.com (ou similares) pra descobrir em que JAR deveria estar essa classe: com.ibm.ws.webservices.multiprotocol.utils.WSDLFactoryImpl
Bom, como eu disse nessa parte eu sou muito novata… Já tenho 3 anos em Java, mas o WebService que eu mexia era REST, porém como troquei de emprego, aqui eles usam SOAP e eu não manjo nada e foi me dada a tarefa de criar os Clients para os WebServices. Eu procurei alguns materiais mas que não me ajudaram muito, o que chegou mais próximo foi esse então… Pelo que vi não fiz da melhor forma possível… Você poderia então me explicar a diferença do dinâmico e o WSImport. Diante dessa minha explicação, o que seria o melhor a ser feito?
Bom, como eu disse nessa parte eu sou muito novata… Já tenho 3 anos em Java, mas o WebService que eu mexia era REST, porém como troquei de emprego, aqui eles usam SOAP e eu não manjo nada e foi me dada a tarefa de criar os Clients para os WebServices. Eu procurei alguns materiais mas que não me ajudaram muito, o que chegou mais próximo foi esse então… Pelo que vi não fiz da melhor forma possível… Você poderia então me explicar a diferença do dinâmico e o WSImport. Diante dessa minha explicação, o que seria o melhor a ser feito?
Obrigada![/quote]
Então, o wsimport é um utilitário que vem na JVM Oracle (tenho quase certeza que você está usando a VM da IBM, e não sei dizer se essa VM tem ou não esse utilitário). Ele faz a leitura do WSDL e cria algumas interfaces para usar como proxy na comunicação com o serviço. Ou seja, na prática, você usa como se estivesse usando um método normal em uma classe qualquer.
Já um serviço dinâmico é aquele em que você não tem como garantir o formato do XML. Mesmo tendo schemas, algumas partes podem variar. É o caso de serviços definidos com schemas XML que contém anyType, por exemplo. A imensa maioria dos serviços por aí não usa esse tipo de coisa, mas pelo código que você postou, eu fiquei em dúvida.
Para usar o wsimport, você só precisa pegar ele na JDK (fica na mesma pasta do executável Java e outros) e usar
wsimport -s <pasta onde você quer colocar os arquivos gerados> seu.wsdl
E pode arrancar todas essas libs do Axis daí, que pra usar JAX-WS você não precisa de nada disso
Eu acho que meu entendimento ainda está bem confuso … rs… Talvez esteja fazendo as coisas e eu nem saiba o que ao certo estou fazendo… Eu não sei se é a mesma coisa, mas eu gerei um WebService e ele gerou várias classes pra mim… Seria isso que o wsimport faz? Eu encontrei alguns exemplos na internet onde fazia o teste com um main normal, isso é possível? Outra coisa, acho que já deu pra perceber que estou bem perdida na questão de WebService né? Você tem algum material pra indicar onde eu possa entender bem a estrutura pra que eu não fique nessa confusão? Desculpa estar tomando o seu tempo, mas é que meio que fui jogada no meio de um tiroteio rs…