Issue Details (XML | Word | Printable)

Key: MULE-3578
Type: Bug Bug
Status: Open Open
Priority: To be reviewed To be reviewed
Assignee: Dan Diephouse
Reporter: Michel Dehennin
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
Mule

XMLStreamRedaer in CXF Proxy for REST Service Component

Created: 25/Jul/08 10:03 AM   Updated: 30/Dec/08 11:46 AM
Component/s: Modules: XML, XSLT, XPath, Transport: CXF / XFire
Affects Version/s: 2.0.2
Fix Version/s: 2.1.x Backlog

Time Tracking:
Not Specified

Environment: CXF Proxy for a REST Service Component

Labels:
User impact: High
Configuration:
<xml-entity-decoder-transformer name="XmlDecoder"/>
    <xm:xslt-transformer name="StockQuoteSOAP2RESTRequestXslt" xsl-file="xsl/stock-quote-soap-to-rest-request.xslt"/>
    <xm:xslt-transformer name="SOAPStockQuoteResultXslt" xsl-file="xsl/soap-stock-quote-result.xslt"
			returnClass="javax.xml.stream.XMLStreamReader"/>
    <xm:xslt-transformer name="Xslt" xsl-file="xsl/rest-stock.xsl"/>
    <object-to-string-transformer name="ToString"/>

    <model name="Sample-CXF-Proxy-Rest">
        <service name="StockQuoteProxyService">
            <inbound>
                <!-- vm:inbound-endpoint path="stockquote" responseTransformer-refs="ToString XmlDecoder Xslt XmlToObject"/ -->
				<cxf:inbound-endpoint address="http://localhost:65082/services/StockQuoteProxyService" 
					proxy="true" remoteSync="true"
					transformer-refs="StockQuoteSOAP2RESTRequestXslt"
					responseTransformer-refs="ToString XmlDecoder SOAPStockQuoteResultXslt">
				</cxf:inbound-endpoint>
				<!-- forwarding-router/ -->
            </inbound>
            <http:rest-service-component
                    serviceUrl="http://www.webservicex.net/stockquote.asmx/GetQuote"
                    httpMethod="POST">
                <http:payloadParameterName value="symbol"/>
            </http:rest-service-component>
        </service>
    </model>
Log Output:
INFO 2008-07-25 16:34:18,513 [WrapperListener_start_runner] org.mule.model.seda.SedaService: Service _cxfServiceComponent{http://support.cxf.transport.mule.org/}ProxyService29663955 has been started successfully
DEBUG Start Stock Quote SOAP to REST Request
DEBUG End Stock Quote SOAP to REST Request
INFO 2008-07-25 16:34:42,247 [HttpConnector.receiver.2] org.mule.transport.http.components.RestServiceWrapper: Invoking REST service: http://www.webservicex.net/stockquote.asmx/GetQuote
INFO 2008-07-25 16:34:42,247 [HttpConnector.receiver.2] org.mule.transport.service.DefaultTransportServiceDescriptor: Loading default outbound transformer: org.mule.transport.http.transformers.ObjectToHttpClientMethodRequest
INFO 2008-07-25 16:34:42,279 [HttpConnector.receiver.2] org.mule.transport.http.HttpClientMessageDispatcher: Connected: HttpClientMessageDispatcher{this=1b18235, endpoint=http://www.webservicex.net/stockquote.asmx/GetQuote, disposed=false}
25-juil.-2008 16:34:42 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: The object transformed is of type: "String", but the expected return type is "XMLStreamReader"
at org.mule.transport.cxf.MuleInvoker.invoke(MuleInvoker.java:103)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
at org.mule.transport.cxf.CxfServiceComponent.sendToDestination(CxfServiceComponent.java:290)
at org.mule.transport.cxf.CxfServiceComponent.onCall(CxfServiceComponent.java:115)
at org.mule.model.resolvers.CallableEntryPointResolver.invoke(CallableEntryPointResolver.java:52)
at org.mule.model.resolvers.DefaultEntryPointResolverSet.invoke(DefaultEntryPointResolverSet.java:50)
at org.mule.component.DefaultLifecycleAdapter.intercept(DefaultLifecycleAdapter.java:202)
at org.mule.component.AbstractJavaComponent.invokeComponentInstance(AbstractJavaComponent.java:84)
at org.mule.component.AbstractJavaComponent.doOnCall(AbstractJavaComponent.java:75)
at org.mule.component.AbstractComponent.onCall(AbstractComponent.java:96)
at org.mule.model.seda.SedaService.doSend(SedaService.java:237)
at org.mule.service.AbstractService.sendEvent(AbstractService.java:510)
at org.mule.DefaultMuleSession.sendEvent(DefaultMuleSession.java:354)
at org.mule.routing.inbound.DefaultInboundRouterCollection.send(DefaultInboundRouterCollection.java:221)
at org.mule.routing.inbound.DefaultInboundRouterCollection.route(DefaultInboundRouterCollection.java:181)
at org.mule.transport.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:603)
at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:346)
at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:287)
at org.mule.transport.http.HttpMessageReceiver$HttpWorker.doRequest(HttpMessageReceiver.java:271)
at org.mule.transport.http.HttpMessageReceiver$HttpWorker.processRequest(HttpMessageReceiver.java:229)
at org.mule.transport.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:189)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Unknown Source)
Caused by: org.mule.api.transformer.TransformerException: The object transformed is of type: "String", but the expected return type is "XMLStreamReader"
at org.mule.transformer.AbstractTransformer.checkReturnClass(AbstractTransformer.java:87)
at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:267)
at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:598)
at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:558)
at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:551)
at org.mule.transport.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:612)
at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:346)
at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:269)
at org.mule.transport.cxf.MuleInvoker.invoke(MuleInvoker.java:99)
... 28 more
INFO 2008-07-25 16:34:42,857 [HttpConnector.receiver.2] org.mule.transport.http.HttpMessageReceiver: Closing HTTP connection.

Removing the returnClass="javax.xml.stream.XMLStreamReader" only results in another conversion error:

INFO 2008-07-25 16:55:48,919 [WrapperListener_start_runner] org.mule.component.DefaultJavaComponent: Initialising: org.mule.component.DefaultJavaComponent component for: _cxfServiceComponent{http://support.cxf.transport.mule.org/}ProxyService835474
INFO 2008-07-25 16:55:48,919 [WrapperListener_start_runner] org.mule.component.DefaultJavaComponent: Starting: org.mule.component.DefaultJavaComponent component for: _cxfServiceComponent{http://support.cxf.transport.mule.org/}ProxyService835474
INFO 2008-07-25 16:55:48,935 [WrapperListener_start_runner] org.mule.transport.http.HttpConnector: Registering listener: _cxfServiceComponent{http://support.cxf.transport.mule.org/}ProxyService835474 on endpointUri: http://localhost:65082/services/StockQuoteProxyService
INFO 2008-07-25 16:55:48,935 [WrapperListener_start_runner] org.mule.transport.http.HttpMessageReceiver: Connected: HttpMessageReceiver{this=1395dab, receiverKey=http://localhost:65082/services/StockQuoteProxyService, endpoint=http://localhost:65082/services/StockQuoteProxyService}
INFO 2008-07-25 16:55:48,935 [WrapperListener_start_runner] org.mule.model.seda.SedaService: Service _cxfServiceComponent{http://support.cxf.transport.mule.org/}ProxyService835474 has been started successfully
DEBUG Start Stock Quote SOAP to REST Request
DEBUG End Stock Quote SOAP to REST Request
INFO 2008-07-25 16:56:05,076 [HttpConnector.receiver.2] org.mule.transport.http.components.RestServiceWrapper: Invoking REST service: http://www.webservicex.net/stockquote.asmx/GetQuote
INFO 2008-07-25 16:56:05,076 [HttpConnector.receiver.2] org.mule.transport.service.DefaultTransportServiceDescriptor: Loading default outbound transformer: org.mule.transport.http.transformers.ObjectToHttpClientMethodRequest
INFO 2008-07-25 16:56:05,091 [HttpConnector.receiver.2] org.mule.transport.http.HttpClientMessageDispatcher: Connected: HttpClientMessageDispatcher{this=18837f1, endpoint=http://www.webservicex.net/stockquote.asmx/GetQuote, disposed=false}
25-juil.-2008 16:56:06 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
java.lang.UnsupportedOperationException: Data types of class [B are not supported.
at org.apache.cxf.databinding.stax.StaxDataBinding$XMLStreamDataWriter.write(StaxDataBinding.java:127)
at org.apache.cxf.databinding.stax.StaxDataBinding$XMLStreamDataWriter.write(StaxDataBinding.java:117)
at org.apache.cxf.databinding.stax.StaxDataBinding$XMLStreamDataWriter.write(StaxDataBinding.java:113)
at org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:93)
at org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:198)
at org.mule.transport.cxf.CxfServiceComponent$1.write(CxfServiceComponent.java:275)
at org.mule.transport.http.HttpServerConnection.writeResponse(HttpServerConnection.java:281)
at org.mule.transport.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:189)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Unknown Source)
INFO 2008-07-25 16:56:06,060 [HttpConnector.receiver.2] org.mule.transport.http.HttpMessageReceiver: Closing HTTP connection.


 Description  « Hide
Using Mule 2.0.2 I tried to configure a CXF Proxy for a REST Service Component.
The config is based on the stockquote example to illustrate the problem.

The CXF Proxy correctly calls the REST service component, which correctly executes.
When the inbound CXF proxy receives the response, I guess, it expects a XMLStreamReader, but instead it receives a String.

See config and log for details. Not Log Output contains 2 traces: 1 with the returnClass="javax.xml.stream.XMLStreamReader" in the config and 1 without.

Could be related to issues 3555 and/or 3242.

Any idea when there could be a patch available?



 All   Comments   Work Log   Change History   Transitions   FishEye      Sort Order: Ascending order - Click to sort in descending order
There are no comments yet on this issue.