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);
}
}
