I am having issues using the soap-provider ServiceMix component in ServiceMix 3.3 to connect to an external web service. I am building a test case that is trying to connect to a public web service at http://ws.cdyne.com/delayedstockquote/delayedstockquote.asmx?wsdl for stock quotes. My xbean.xml looks like the following:
<beans xmlns:http="http://servicemix.apache.org/http/1.0" xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" xmlns:oms="urn:oms" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://servicemix.apache.org/http/1.0 http://servicemix.apache.org/schema/servicemix-http-3.2.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" xmlns:ce="http://ws.cdyne.com/"> <http:soap-provider service="ce:DelayedStockQuote" endpoint="DelayedStockQuoteSoap" locationURI="http://ws.cdyne.com/delayedstockquote/delayedstockquote.asm x" wsdl="http://ws.cdyne.com/delayedstockquote/delayedstockquote.asmx?wsdl" validateWsdl="false" useJbiWrapper="false"> </http:soap-provider> </beans> I am using Camel to route the messages through to this endpoint, the Camel that is involved is shown below: .to("xslt:transform.xsl") .to("log:test") .to("jbi:service:http://ws.cdyne.com//DelayedStockQuote?operation={http: //ws.cdyne.com/}GetQuickQuote&mep=in-out").convertBodyTo(String.class) The XSLT file above creates the request XML - the transform is shown below: <xsl:template match="/"> <xsl:element name="ws:GetQuickQuote" namespace="http://ws.cdyne.com/"> <xsl:element name="ws:StockSymbol" namespace="http://ws.cdyne.com/">GS</xsl:element> <xsl:element name="ws:LicenceKey" namespace="http://ws.cdyne.com/">0</xsl:element> </xsl:element> </xsl:template> When I send this message to the endpoint I get the following error: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' The actual JBI information I see on the console is as follows: DEBUG - flow.seda.SedaQueue - org.apache.servicemix.jbi.nmr.flow.seda.sedaqueu...@dc4bc dequeued exchange: InOut[ id: ID:140.140.144.118-121160831af-3:5 status: Error role: consumer service: {http://ws.cdyne.com/}DelayedStockQuote endpoint: DelayedStockQuoteSoap operation: {http://ws.cdyne.com/}GetQuickQuote in: <?xml version="1.0" encoding="UTF-8"?><ws:GetQuickQuote xmlns:ws="http://ws.cdyne.com/"> <ws:StockSymbol>GS</ws:StockSymbol> <ws:LicenceKey>0</ws:LicenceKey> </ws:GetQuickQuote> error: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] ] Can anyone shed any light on why this error is occurring. I am able to successfully connect to this web service through SoapUI and have copied the XML request structure from there. I cannot find any simple example of connecting to public web services using the new HTTP endpoints. I have successfully used the old http endpoint, however this has an issue with specifying the correct Content-Type header and therefore cannot be used as the actual service I wish to connect to throws an error. Full stack trace of error below: org.apache.camel.RuntimeCamelException: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelpe r.java:724) at org.apache.camel.component.jms.EndpointMessageListener.onMessage(Endpoin tMessageListener.java:81) at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvo keListener(AbstractMessageListenerContainer.java:531) at org.springframework.jms.listener.AbstractMessageListenerContainer.invoke Listener(AbstractMessageListenerContainer.java:466) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExec uteListener(AbstractMessageListenerContainer.java:435) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer .doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:322) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer .receiveAndExecute(AbstractPollingMessageListenerContainer.java:260) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMe ssageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java :944) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMe ssageListenerInvoker.run(DefaultMessageListenerContainer.java:875) at java.lang.Thread.run(Thread.java:619) Caused by: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor.handleMess age(StaxInInterceptor.java:64) at org.apache.servicemix.soap.core.PhaseInterceptorChain.doIntercept(PhaseI nterceptorChain.java:85) at org.apache.servicemix.http.endpoints.HttpSoapProviderMarshaler.handleRes ponse(HttpSoapProviderMarshaler.java:124) at org.apache.servicemix.http.endpoints.HttpProviderEndpoint.handle(HttpPro viderEndpoint.java:218) at org.apache.servicemix.http.endpoints.HttpProviderEndpoint$Exchange.onRes ponseComplete(HttpProviderEndpoint.java:317) at org.mortbay.jetty.client.HttpExchange$Listener.onResponseComplete(HttpEx change.java:563) at org.mortbay.jetty.client.HttpExchange.setStatus(HttpExchange.java:164) at org.mortbay.jetty.client.HttpConnection$Handler.messageComplete(HttpConn ection.java:470) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:662) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.client.HttpConnection.handle(HttpConnection.java:254) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java: 409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java :497) Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:623 ) at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java: 2047) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069) at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.jav a:60) at org.apache.servicemix.soap.util.stax.ExtendedXMLStreamReader.next(Extend edXMLStreamReader.java:61) at org.apache.servicemix.soap.util.stax.ExtendedXMLStreamReader.nextTag(Ext endedXMLStreamReader.java:44) at org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor.handleMess age(StaxInInterceptor.java:61) ... 12 more WARN - jms.listener.DefaultMessageListenerContainer - Execution of JMS message listener failed org.apache.camel.RuntimeCamelException: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelpe r.java:724) at org.apache.camel.component.jms.EndpointMessageListener.onMessage(Endpoin tMessageListener.java:81) at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvo keListener(AbstractMessageListenerContainer.java:531) at org.springframework.jms.listener.AbstractMessageListenerContainer.invoke Listener(AbstractMessageListenerContainer.java:466) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExec uteListener(AbstractMessageListenerContainer.java:435) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer .doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:322) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer .receiveAndExecute(AbstractPollingMessageListenerContainer.java:260) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMe ssageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java :944) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMe ssageListenerInvoker.run(DefaultMessageListenerContainer.java:875) at java.lang.Thread.run(Thread.java:619) Caused by: org.apache.servicemix.soap.api.Fault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor.handleMess age(StaxInInterceptor.java:64) at org.apache.servicemix.soap.core.PhaseInterceptorChain.doIntercept(PhaseI nterceptorChain.java:85) at org.apache.servicemix.http.endpoints.HttpSoapProviderMarshaler.handleRes ponse(HttpSoapProviderMarshaler.java:124) at org.apache.servicemix.http.endpoints.HttpProviderEndpoint.handle(HttpPro viderEndpoint.java:218) at org.apache.servicemix.http.endpoints.HttpProviderEndpoint$Exchange.onRes ponseComplete(HttpProviderEndpoint.java:317) at org.mortbay.jetty.client.HttpExchange$Listener.onResponseComplete(HttpEx change.java:563) at org.mortbay.jetty.client.HttpExchange.setStatus(HttpExchange.java:164) at org.mortbay.jetty.client.HttpConnection$Handler.messageComplete(HttpConn ection.java:470) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:662) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.client.HttpConnection.handle(HttpConnection.java:254) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java: 409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java :497) Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'T' (code 84) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:623 ) at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java: 2047) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069) at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.jav a:60) at org.apache.servicemix.soap.util.stax.ExtendedXMLStreamReader.next(Extend edXMLStreamReader.java:61) at org.apache.servicemix.soap.util.stax.ExtendedXMLStreamReader.nextTag(Ext endedXMLStreamReader.java:44) at org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor.handleMess age(StaxInInterceptor.java:61) ... 12 more Thanks Iain Iain Soars Senior Consultant The Ultimate People Company (UPCO) 1 Crown Sq, Woking, Surrey, GU21 6HR Tel: 01483 215132 Email: [email protected] <mailto:[email protected]> Web: www.upco.co.uk <http://www.upco.co.uk>
