[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: [reverbel-sod] problema com o método getRentalServiceDocPort



Olá Alexandre.

Ao que parece os metadados do JBoss não refletem perfeitamente a
interface RentalServiceRPC. Sugiro que você faça o seguinte: adicione
um arquivo como esse no classpath do seu cliente (o nome do arquivo
deve ser log4j.properties):

log4j.rootLogger=CONSOLE, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{dd-MM
HH:mm:ss,SSS} (%F:%M:%L)  -%m%n

No caso RPC vai aparecer, entre muitas outras coisas:

(ServiceProxy.java:invoke:112)  -Invoke on jaxrpc service: getPort
...
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract
videorentalstore.webservice.MovieInfoArray
videorentalstore.webservice.RentalServiceRPC.findMovieByDirector(java.lang.String)
throws java.rmi.RemoteException
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract void
videorentalstore.webservice.RentalServiceRPC.startRental(int,int,videorentalstore.webservice.Date)
throws videorentalstore.webservice.InvalidMovieCopyIdExceptionType,videorentalstore.webservice.AlreadyRentedExceptionType,videorentalstore.webservice.InvalidCustomerIdExceptionType,java.rmi.RemoteException
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract
videorentalstore.webservice.MovieInfo
videorentalstore.webservice.RentalServiceRPC.findMovieById(int) throws
videorentalstore.webservice.NotFoundExceptionType,java.rmi.RemoteException
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract
videorentalstore.webservice.MovieInfoArray
videorentalstore.webservice.RentalServiceRPC.findMovieByGenreAndYear(java.lang.String,short)
throws java.rmi.RemoteException
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract
videorentalstore.webservice.MovieInfoArray
videorentalstore.webservice.RentalServiceRPC.findMovieByName(java.lang.String)
throws java.rmi.RemoteException

No caso document, deve aparecer algo parecido, mas deve ocorrer um
erro na sincronização de algum dos métodos:

(ServiceProxy.java:invoke:112)  -Invoke on jaxrpc service: getPort
...
(MetaDataSynchronization.java:synchronizeServiceEndpointInterface:55)
-synchronize method: public abstract
videorentalstore.webservice.FindMovieByDirectorResponse
videorentalstore.webservice.RentalServiceDoc.findMovieByDirector(videorentalstore.webservice.FindMovieByDirectorRequest)
throws java.rmi.RemoteException

Com isso dá para saber qual método está causando o erro.

O que eu sugiro é que você gere novamente o jaxrpc-mapping.xml,
conforme descrito no enunciado do EP (com todos os parâmetros lá
apresentados). Depois disso, verifique novamente seus descritores de
implantação, e certifique-se de que os casos document e RPC estão
"parecidos" um com o outro. Se está funcionando no caso RPC, pode ser
algum detalhe na configuração document que está causando o erro.

[]'s

On 6/13/06, Alexandre Freire <chegado@xxxxxxxxx> wrote:
O código abaixo:

        public static void main(String[] args) throws Exception {
                Context initialContex = new InitialContext();

                VideoRentalService service = (VideoRentalService) initialContex
                .lookup("java:comp/env/service/videorental");

                RentalServiceRPC port = (RentalServiceRPC) service.getRentalServiceRPCPort();
        }

Funciona perfeitamente, porém quando substituo a linha

RentalServiceRPC port = (RentalServiceRPC) service.getRentalServiceRPCPort();

por

RentalServiceDoc port = (RentalServiceDoc) service.getRentalServiceDocPort();

ocorre a seguinte exception:

Exception in thread "main" javax.xml.rpc.ServiceException: Cannot create proxy
        at org.jboss.ws.jaxrpc.ServiceImpl.createProxy(ServiceImpl.java:380)
        at org.jboss.ws.jaxrpc.ServiceImpl.getPort(ServiceImpl.java:329)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.jboss.ws.jaxrpc.ServiceProxy.invoke(ServiceProxy.java:130)
        at $Proxy1.getRentalServiceDocPort(Unknown Source)
        at temp.WSClient.main(WSClient.java:21)
Caused by: org.jboss.ws.WSException: Unexpected null return parameter
        at org.jboss.ws.jaxrpc.ParameterWrapping.assertOperationMetaData(ParameterWrapping.java:71)
        at org.jboss.ws.jaxrpc.ParameterWrapping.matchRequestParameters(ParameterWrapping.java:79)
        at org.jboss.ws.metadata.OperationMetaData.getJavaMethod(OperationMetaData.java:182)
        at org.jboss.ws.metadata.EndpointMetaData.getOperation(EndpointMetaData.java:324)
        at org.jboss.ws.jaxrpc.MetaDataSynchronization.synchronizeServiceEndpointInterface(MetaDataSynchronization.java:57)
        at org.jboss.ws.jaxrpc.ServiceImpl.createProxy(ServiceImpl.java:365)
        ... 8 more

Já verifiquei todos os XMLs e aparentemente estão corretos.

Obrigado.