Details
-
Test
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
2.0.5, 2.1
-
None
-
Microsoft Windows XP [version 5.1.2600]
Java 1.6.0_03
-
Unknown
Description
[ Related to issue CXF-1517 ]
Hi,
Investigating CXF 2.1, i tried to create a client to consume the following service:
" Metric Weight Unit Convertor "
http://www.webservicex.net/WS/WSDetails.aspx?WSID=33&CATID=13
WSDL url : http://www.webservicex.net/convertMetricWeight.asmx?WSDL
Commands I ran:
Client code generation:
wsdl2java http://www.webservicex.net/convertMetricWeight.asmx?WSDL
WS consumption:
MetricWeightUnitHttpPost httpPost = service.getMetricWeightUnitHttpPost();
double res = httpPost.changeMetricWeightUnit("123", MetricWeights.KILOGRAM.toString(), MetricWeights.GRAM.toString());
Is this a correct use of the generated classes ?
Exception stacktrace I receive:
INFO: Creating Service
MetricWeightUnit from WSDL: http://www.webservicex.net/convertMetric
Weight.asmx?WSDL
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:249)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:234)
at javax.xml.ws.Service.getPort(Service.java:92)
at net.webservicex.MetricWeightUnit.getMetricWeightUnitHttpPost(MetricWeightUnit.java:99)
at test.WsCaller.testChangeMetricWeightUnitWithPost(WsCaller.java:56)
at test.WsCaller.main(WsCaller.java:20)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:58)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:97)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:89)
at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:369)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:247)
... 5 more
Caused by: org.apache.cxf.BusException: No binding factory for namespace http://schemas.xmlsoap.org/wsdl/http/ registere
d.
at org.apache.cxf.binding.BindingFactoryManagerImpl.getBindingFactory(BindingFactoryManagerImpl.java:91)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:92)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
... 9 more
My observations using the Eclipse debugger:
In the method JaxWSClientFactoryBean#bind(), a test for equality is done with the 2 following values:
1- http://schemas.xmlsoap.org/wsdl/http/ ( data from the generated code )
2- SOAPBinding.SOAP11HTP_BINDING ( = http://schemas.xmlsoap.org/wsdl/soap/http )
I googled "http://schemas.xmlsoap.org/wsdl/soap/http". No result ! Naively : Does using this namespace really have a sense ? couldn't it be the origin of the problem #CXF-1517 ?
Then, just for passing the test, I modified the value of the variable that contained "http://schemas.xmlsoap.org/wsdl/http/" for SOAPBinding.SOAP11HTP_BINDING and then reset this variable to its original value.
A new exception is launched in SoapBindingInfo#resolveSoapVersion(String n) where n = http://schemas.xmlsoap.org/wsdl/http/
A new comparison is run between :
n = http://schemas.xmlsoap.org/wsdl/http/ versus WSDLConstants.NS_SOAP11 = http://schemas.xmlsoap.org/wsdl/soap/
Is this really compare apples to apples ?
Just hoping that this will help to solve the problem.
Best regards,
Claude GUYOMARD
Personal Software System (PSS)
Santa Cruz de Tenerife, Spain