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?

Reply via email to