On 11/12/10 6:51 PM, Stephane Nicoll wrote:
On Fri, Nov 12, 2010 at 10:43 AM, Willem Jiang<[email protected]>wrote:
The SoapTransportFactory will try to locat the real TransportFactory by
checking the address.
You can find the code from SoapTransportFactory.getDestination() method.
Can you just set the break point on the JettyHTTPTransportFactory?
Here is more information about this. In SoapTransportFactory#getDestination
* bi [BindingInfo http://schemas.xmlsoap.org/wsdl/soap/]
* address = http://localhost:7171/MathWebService
* transId= http://schemas.xmlsoap.org/soap/http
Which leads to a call on DestinationFactoryManagerImpl#getDestinationFactory
with the "http://cxf.apache.org/transports/http" namespace. The problem is
that these are my destination factories:
- [0] = {java.util.concurrent.concurrenthashmap$writethroughen...@3059}
http://www.w3.org/2003/05/soap/bindings/HTTP/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [1] = {java.util.concurrent.concurrenthashmap$writethroughen...@3067}
http://schemas.xmlsoap.org/soap/http ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [2] = {java.util.concurrent.concurrenthashmap$writethroughen...@3075}
http://schemas.xmlsoap.org/wsdl/soap12/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [3] = {java.util.concurrent.concurrenthashmap$writethroughen...@3083}
http://www.w3.org/2010/soapjms/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [4] = {java.util.concurrent.concurrenthashmap$writethroughen...@3091}
http://schemas.xmlsoap.org/wsdl/http ->
org.apache.cxf.transport.servlet.servlettransportfact...@b20090
- [5] = {java.util.concurrent.concurrenthashmap$writethroughen...@3100}
http://schemas.xmlsoap.org/wsdl/soap/http ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [6] = {java.util.concurrent.concurrenthashmap$writethroughen...@3108}
http://cxf.apache.org/transports/http ->
org.apache.cxf.transport.servlet.servlettransportfact...@b20090
- [7] = {java.util.concurrent.concurrenthashmap$writethroughen...@3116}
http://schemas.xmlsoap.org/soap/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [8] = {java.util.concurrent.concurrenthashmap$writethroughen...@3124}
http://cxf.apache.org/transports/http/configuration ->
org.apache.cxf.transport.servlet.servlettransportfact...@b20090
- [9] = {java.util.concurrent.concurrenthashmap$writethroughen...@3132}
http://schemas.xmlsoap.org/wsdl/http/ ->
org.apache.cxf.transport.servlet.servlettransportfact...@b20090
- [10] = {java.util.concurrent.concurrenthashmap$writethroughen...@3140}
http://schemas.xmlsoap.org/soap/http/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
- [11] = {java.util.concurrent.concurrenthashmap$writethroughen...@3148}
http://schemas.xmlsoap.org/wsdl/soap/ ->
org.apache.cxf.binding.soap.soaptransportfact...@12284af
No Jetty in there and the returned factory is
obviously org.apache.cxf.transport.servlet.servlettransportfact...@b20090
I don't understand what is happening. I have the http-jetty jar in my
classpath and I also explicitely added the following in my spring config
file:
<import resource="classpath*:/META-INF/cxf/cxf-extension-http-jetty.xml"/>
Can we use wildcards for this thing? Maybe I am loading another
configuration file that registers the same transportId with another
protocol? The imports of my project on CXF are:
<import resource="classpath*:META-INF/cxf/cxf-servlet.xml"/>
If you put the cxf-servlet here, The ServletTransportFactory will
replace all registered transportIds with itself, that could explain why
you can't find the JettyTransportFactory here.
If you are using the servlet transport, please don't include other http
related transport.
<import resource="classpath*:META-INF/cxf/cxf.xml"/>
<import resource="classpath*:META-INF/cxf/cxf-extension-*.xml"/>
HTH,
S.
--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.javaeye.com (Chinese)
Twitter: willemjiang