to access a Stateless Session Bean as a web service using JBoss and
Axis. I hope your MUA can show this message in the same thread as my
previous message.
Here is the problem: after being able to generate the WSDL for the
service (thanks to Cédric Chabanois for the helping me), I tried to
write a DII client to invoke the service. However, something goes wrong
again and all I get is an AxisFault. Attached goes:
1) The full stack trace;
2) The WSDL (generated by axis using ?wsdl) for the service;
3) The Service interface (an EJB remote interface);
4) The DII client source code.
I'm willing to provide any further information. I've seen that the axis
generate a lot of logging information during the call. I haven't
included it here due it's sheer volume (aronud ~60k for just a single
call), but I could provide it if needed.
--
Pazu <[EMAIL PROTECTED]>
AxisFault faultCode: {http://www.w3.org/2002/06/soap-envelope}Server.userException faultSubcode: faultString: org.xml.sax.SAXException: Bad types (class com.telebahiacelular.movistore.acao.value.AcaoModel -> class com.telebahiacelular.movistore.acao.value.AcaoModel) faultActor: null faultNode: null faultDetail: stackTrace: org.xml.sax.SAXException: Bad types (class com.telebahiacelular.movistore.acao.value.AcaoModel -> class com.telebahiacelular.movistore.acao.value.AcaoModel) at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:302) at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:912) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:200) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:693) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:220) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:296) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:191) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:332) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:126) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:469) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:315) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:766) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:339) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:366) at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:293) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:572) at org.mortbay.http.HttpContext.handle(HttpContext.java:1700) at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:554) at org.mortbay.http.HttpContext.handle(HttpContext.java:1650) at org.mortbay.http.HttpServer.service(HttpServer.java:894) at org.jboss.jetty.Jetty.service(Jetty.java:497) at org.mortbay.http.HttpConnection.service(HttpConnection.java:816) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:966) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:833) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:204) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:504)
org.xml.sax.SAXException: Bad types (class com.telebahiacelular.movistore.acao.value.AcaoModel -> class com.telebahiacelular.movistore.acao.value.AcaoModel) at org.apache.axis.AxisFault.makeFault(AxisFault.java:127) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:336) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:126) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:469) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:315) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:766) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:339) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:366) at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:293) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:572) at org.mortbay.http.HttpContext.handle(HttpContext.java:1700) at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:554) at org.mortbay.http.HttpContext.handle(HttpContext.java:1650) at org.mortbay.http.HttpServer.service(HttpServer.java:894) at org.jboss.jetty.Jetty.service(Jetty.java:497) at org.mortbay.http.HttpConnection.service(HttpConnection.java:816) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:966) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:833) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:204) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:504) Caused by: org.xml.sax.SAXException: Bad types (class com.telebahiacelular.movistore.acao.value.AcaoModel -> class com.telebahiacelular.movistore.acao.value.AcaoModel) at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:302) at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:912) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:200) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:693) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:220) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:296) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:191) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:332) ... 23 more
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="urn:telebahiacelular/movistore/acao" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:telebahiacelular/movistore/acao" xmlns:intf="urn:telebahiacelular/movistore/acao" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://value.acao.movistore.telebahiacelular.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><wsdl:types><schema targetNamespace="http://value.acao.movistore.telebahiacelular.com" xmlns="http://www.w3.org/2001/XMLSchema"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="AcaoPKModel"><sequence><element name="codigo" nillable="true" type="xsd:int"/></sequence></complexType><complexType name="AcaoModel"><complexContent><extension base="tns1:AcaoPKModel"><sequence><element name="codTela" nillable="true" type="xsd:int"/><element name="codUsuario" nillable="true" type="xsd:int"/><element name="descricao" nillable="true" type="xsd:string"/><element name="descricaoResumida" nillable="true" type="xsd:string"/></sequence></extension></complexContent></complexType></schema></wsdl:types> <wsdl:message name="inserirResponse"> <wsdl:part name="inserirReturn" type="tns1:AcaoPKModel"/> </wsdl:message> <wsdl:message name="inserirRequest"> <wsdl:part name="in0" type="tns1:AcaoModel"/> </wsdl:message> <wsdl:portType name="Acao"> <wsdl:operation name="inserir" parameterOrder="in0"> <wsdl:input message="impl:inserirRequest" name="inserirRequest"/> <wsdl:output message="impl:inserirResponse" name="inserirResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="AcaoSoapBinding" type="impl:Acao"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="inserir"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="inserirRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:telebahiacelular/movistore/acao" use="encoded"/> </wsdl:input> <wsdl:output name="inserirResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:telebahiacelular/movistore/acao" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="AcaoService"> <wsdl:port binding="impl:AcaoSoapBinding" name="Acao"> <wsdlsoap:address location="http://localhost:8080/jboss-net/services/Acao"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
/* * Generated by XDoclet - Do not edit! */ package com.telebahiacelular.movistore.acao.interfaces; /** * Remote interface for Acao. */ public interface Acao extends javax.ejb.EJBObject { /** * Altera os dados de uma acao existente. * @param acao a acao a ser alterada. */ public void alterar( com.telebahiacelular.movistore.acao.value.AcaoModel acao ) throws javax.ejb.FinderException, java.rmi.RemoteException; /** * Remove uma acao existente. * @param acao a chave da acao a ser removida */ public void excluir( com.telebahiacelular.movistore.acao.value.AcaoPKModel acao ) throws javax.ejb.RemoveException, java.rmi.RemoteException; /** * Insere uma nova acao no sistema. * @param acao a acao a ser inserida. * @returns a chave da acao que acaba de ser inserida. */ public com.telebahiacelular.movistore.acao.value.AcaoPKModel inserir( com.telebahiacelular.movistore.acao.value.AcaoModel acao ) throws javax.ejb.CreateException, java.rmi.RemoteException; /** * Seleciona uma acao a partir de sua chave. * @param chave a chave da acao a ser selecionada * @param factoryClass o nome da classe de uma AcaoModelFactory para transformar o VO. * @retun um ValueObject da acao selecionada, transformada de acordo com a factory. */ public java.lang.Object selecionarPorChave( com.telebahiacelular.movistore.acao.value.AcaoPKModel chave,java.lang.String factoryClass ) throws javax.ejb.FinderException, java.rmi.RemoteException; /** * Seleciona todas as acoes de uma tela. * @param tela a chave da tela. * @param factoryClass o nome da classe de uma AcaoModelFactory para transformar o VO. * @return um array de ValueObjects da acao selecionada, transformadas de acordo com a factory. */ public java.lang.Object[] selecionarPorTela( com.telebahiacelular.movistore.tela.value.TelaPKModel tela,java.lang.String factoryClass ) throws javax.ejb.FinderException, java.rmi.RemoteException; /** * Seleciona todas as acoes cadastradas. * @param factoryClass o nome da classe de uma AcaoModelFactory para transformar o VO. * @return um array de ValueObjects da acao selecionada, transformadas de acordo com a factory. */ public java.lang.Object[] selecionarTodos( java.lang.String factoryClass ) throws javax.ejb.FinderException, java.rmi.RemoteException; }
package com.telebahiacelular.movistore.client; import javax.xml.namespace.QName; import org.apache.axis.client.Service; import org.apache.axis.client.Call; import org.apache.axis.encoding.ser.BeanSerializerFactory; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import com.telebahiacelular.movistore.acao.value.AcaoModel; import com.telebahiacelular.movistore.acao.value.AcaoPKModel; import com.telebahiacelular.movistore.tela.value.TelaPKModel; public class TesteAcaoDII { public static void main(String[] args) throws Exception { String endpoint = "http://localhost:8080/jboss-net/services/Acao"; Service service = new Service(); Call call = (Call)service.createCall(); // Type Mappings call.registerTypeMapping(AcaoPKModel.class, new QName("http://value.acao.movistore.telebahiacelular.com", "AcaoPKModel"), BeanSerializerFactory.class, BeanDeserializerFactory.class); call.registerTypeMapping(AcaoModel.class, new QName("http://value.acao.movistore.telebahiacelular.com", "AcaoModel"), BeanSerializerFactory.class, BeanDeserializerFactory.class); /* call.registerTypeMapping(TelaPKModel.class, new QName("urn:telabahiacelular/movistore/acao", "TelaPKModel"), BeanSerializerFactory.class, BeanDeserializerFactory.class); */ call.setTargetEndpointAddress(endpoint); call.setOperationName(new QName("urn:telebahiacelular/movistore/acao", "inserir")); call.setReturnClass(AcaoPKModel.class); AcaoModel acao = new AcaoModel(); acao.setCodTela(new Integer(1)); acao.setCodUsuario(new Integer(1)); acao.setDescricao("Descricao Completa da Acao"); acao.setDescricaoResumida("Descricao Resumida"); AcaoPKModel pk = (AcaoPKModel)call.invoke(new Object[] {acao}); System.out.println("Acao inserida: " + pk); } }