Hi Diego,
I just went through your mail, and found you put the server and client
in one spring application context.
That is wrong. because they have different context.
And I also found that the log should be "Could not find conduit
initiator for ***"
There some transport URI conflict between servlet transport and the
standalone http transport.
We just split them into cxf-extension-http-jetty.xml and cxf-servlet.xml.
And there is no http conduit initiatior defined in the servlet
transport factory.
And in your case , you just put the cxf-servlet.xml in you spring
application context, so the client http conduit Initiator will not be
found for the client.
You need to create the client with another spring application context
file likes this:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
<bean id="client" class="com.net2com.webservice.HelloWorld"
factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass"
value="com.net2com.webservice.HelloWorld"/>
<property name="address"
value="http://localhost:8080/interface/webservice/HelloWorld"/>
</bean>
</beans>
Cheers,
Willem.
Diego Xu wrote:
Hi:
I'm using CXF2.0 release version for my first try of jax-ws, and now got
blocked by an error throwed by server.
I'm using JDK5.0, Tomcat5.5, Spring2.0.6.
here is my HellowWorld interface:
---------------------------------
package com.net2com.webservice;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(String text);
}
and impl:
------------------------------------
package com.net2com.webservice;
import javax.jws.WebService;
@WebService(endpointInterface = "com.net2com.webservice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
return "Hello " + text;
}
}
Spring config: (I put both server and client into one application)
-------------------------------
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
.......
<jaxws:endpoint id="helloWorld"
implementor="com.net2com.webservice.HelloWorldImpl"
address="/HelloWorld" />
<bean id="client" class="com.net2com.webservice.HelloWorld"
factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass"
value="com.net2com.webservice.HelloWorld"/>
<property name="address"
value="http://localhost:8080/interface/webservice/HelloWorld"/>
</bean>
</beans>
tomcat web.xml
------------------------------------
<web-app>
.......
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
..............
</web-app>
and i already put following deps into WEB-INF/lib
-----------------------------------
commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar
geronimo-annotation_1.0_spec-1.1.jar
geronimo-javamail_1.4_spec-1.0-M1.jar
geronimo-servlet_2.5_spec-1.1-M1.jar
geronimo-ws-metadata_2.0_spec-1.1.1.jar
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
spring-2.0.6.jar
cxf-2.0-incubator.jar
-----------------------------#
that's all my did to run the first spring demo, but when i try to invoke
server side impl through:
this.helloWorldService = (HelloWorld) wac.getBean("client"); // get ws
client bean from spring context
...
String greet = helloWorldService.sayHi("CXF");
i got following error:
javax.xml.ws.soap.SOAPFaultException: Could not find destination factory for
transport http://schemas.xmlsoap.org/soap/http
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:168)
at $Proxy15.sayHi(Unknown Source)
at
com.net2com.face.action.thirdinterface.ThirdInterfaceQueryAction.queryOutBoundInterface(ThirdInterfaceQueryAction.java:75)
.......
Caused by: java.lang.RuntimeException: Could not find destination factory
for transport http://schemas.xmlsoap.org/soap/http
at
org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransportFactory.java:148)
.......
I already checked out some threads, some say their is another dependency
needed:
cxf-rt-transports-http-2.0-incubator.jar
but i wonder it's not what i want coz i have tried it out, while still
doesn't work.
I got stuck for a whole day to work this out, could any body here give me a
hand?