Re:CFX no JBossWs

6 respostas
donatinho

Opa SeuFagner, beleza brother?

Estou passando por um problema muito parecido com o seu.

No entanto, quando o jaxb com o CXF usa tipos complexos, ele coloca namespaces que nao deveriam existir.

Voce sabe como retirar esses namespaces?

Ja tentei de tudo e mais o capeta, mas nao consegui retirar.

Sera que é um bug ?

donatinho

:shock: :shock: :shock:

6 Respostas

donatinho

Cara, nao entendi quando perguntou se consegui receber tipos complexos do soap response, o que quis dizer com isso?

Conseguimos resolver o problema aqui, para tal usamos CXF + JAXB + ECLIPSE + JBOSS 4.2.3 pegando os beans que o jaxb gera e juntamos com informacoes da pagina


http://old.nabble.com/Are-namespace-prefixes-normative-in-jaxb–td13203505.html#a13203505

que forca o CXF a ignorar os namespace.

see ya

donatinho

seufagner

Para contextualizar:

Estou integrando o CFX em uma aplicação já existente, que roda no JBoss 4.2.3, repleta de @EJBs que são @WebServices ao mesmo tempo.

Os @EJBs já possuem clientes fixos os utilizando, portanto não posso migrar para @WebService. Hoje em dia funciona porque estão utilizando a stack default do JBossWS (pois enquanto Container, identifica e injeta Beans mesmo que estes sejam, também, WebServices). Com CFX não funciona, não embbeded na aplicação.

A solução foi utilizar o JBossWs-CFX, configurando uma stack nativamente no JBoss.

Contudo estou utilizando como binding o Aegis, pois o JAXB, todos sabem, é um inferno de mapear o Beans de tipos complexos (Não encontrei referências de que isto havia mudado).

Ao tentar consumir um Web Service, ele está me indicando o seguinte erro:

javax.xml.ws.soap.SOAPFaultException: Server was unable to process request. —> Object reference not set to an instance of an object.

No stacktrace não informa nem o ‘faultcode’. Alguém sabe do que se trata? Segue o trace completo.

Obrigado!

Caused by: org.apache.cxf.binding.soap.SoapFault: Server was unable to process request. ---> Object reference not set to an instance of an object.
	at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
	at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
	at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
	at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:96)
	at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
	at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
	at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:664)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2160)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2040)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1965)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:627)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:478)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:308)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:260)
	at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
	... 23 more
seufagner

Fala Donatinho

Eu estou usando o Aegis como binding factory. É muito mais simples! Dá uma olhada.

Mas me fala uma coisa, você conseguiu receber tipos complexos no soap response? COMOOO ? O meu tá com SoapFault. rs

Eu acredito que deve ser problemas de JARs. Ambiente: JBoss 4.2.3 + JDK 6 .

Puts!

seufagner

donatinho

A questão é que consigo comunicar com o Web Service, recebendo String. Quando o retorno do Web Service é um Objeto é diferente. Dá erro.

Eu abandonei o CFX para ver primeiro se resolvia da forma mais simples. O Bean do cliente já vem com as anotações do JAXB.

Porém, com tipos complexos, ele ainda lança a SOAP fault. Ou seja, se o serviço me retorna uma String, funciona. Porém, retornando um Bean, não funciona. Esta exceção é lançada:

Server was unable to process request. —> Object reference not set to an instance of an object.

11:24:57,537 ERROR [[consumeWsServlet]] Servlet.service() for servlet consumeWsServlet threw exception
javax.xml.ws.soap.SOAPFaultException: Server was unable to process request. ---> Object reference not set to an instance of an object.
	at org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS.getSOAPFaultException(SOAPFaultHelperJAXWS.java:72)
	at org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS.throwFaultException(SOAP11BindingJAXWS.java:109)
	at org.jboss.ws.core.CommonSOAPBinding.unbindResponseMessage(CommonSOAPBinding.java:579)
	at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:380)
	at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:302)
	at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:172)
	at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:152)
	at $Proxy73.insertOrder(Unknown Source)
	at br.com.poc.ConsumeWsServlet.chamaWs(ConsumeWsServlet.java:67)
	at br.com.poc.ConsumeWsServlet.handleRequest(ConsumeWsServlet.java:74)
	at org.springframework.web.context.support.HttpRequestHandlerServlet.service(HttpRequestHandlerServlet.java:63)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:619)
seufagner

donatinho

Você está usando o Aegis do CFX como Binding?

seufagner

Só para encerrar esta thread que foi quase um monólogo. O problema era no Web Service que deveria, supostamente, estar funcionando. ts… No soapUI a contece omesmo erro.

Criado 30 de outubro de 2009
Ultima resposta 31 de out. de 2009
Respostas 6
Participantes 2