You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Christopher Moesel <Ch...@avid.com> on 2007/07/17 20:04:27 UTC

Using Local Transport for JUnit Tests

Hello All,

I'm trying to write some JUnit tests that can test my SOAP web services
using the local transport
(http://cwiki.apache.org/CXF20DOC/local-transport.html).

Normally I run my services using the CXF Servlet, so doing it
servlet-less is somewhat new to me.  Here is what I'm doing:

Using a Spring ClassPathXmlApplicationContext to load up the following
CXF spring configs:
- META-INF/cxf/cxf.xml
- META-INF/cxf/cxf-extension-soap.xml
- META-INF/cxf/cxf-extension-policy.xml

and also loading up my own spring configs that contain the endpoint,
like so:

<jaxws:endpoint
  id="mockWebServiceEndpoint"
  implementor="#mockWebService"
  wsdlLocation="mockWebService.wsdl"
  address="local://MockWebService">
  <jaxws:features>
    <wsp:Policy>
      <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
    </wsp:Policy>
  </jaxws:features>
</jaxws:endpoint>

But... when I load them up, I get an exception with the following
message:
No DestinationFactory was found for the namespace
http://schemas.xmlsoap.org/soap/http.

I suspect I'm missing a CXF config file that defines the
DestinationFactory, I'm not setting up something right on the endpoint,
or I'm just completely wrong and can't even use the local transport in
this way.

Could someone with a clue please help me out? ;)  The full stack trace
is at the bottom of this message.

-Chris

org.apache.cxf.service.factory.ServiceConstructionException
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
105)
	at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
n.java:142)
	at
org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
	at
org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
	at
org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
	at
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
mpl.java:74)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
	at
com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests(BaseWebServ
iceTest.java:59)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
	at
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAf
terRunner.java:74)
	at
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfte
rRunner.java:50)
	at
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAf
terRunner.java:33)
	at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
	at
com.intellij.rt.junit4.Junit4TestMethodAdapter.run(Junit4TestMethodAdapt
er.java:54)
	at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
	at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: org.apache.cxf.BusException: No DestinationFactory was found
for the namespace http://schemas.xmlsoap.org/soap/http.
	at
org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFac
tory(DestinationFactoryManagerImpl.java:101)
	at
org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
90)
	... 27 more

Re: Using Local Transport for JUnit Tests

Posted by Julio Arias <ju...@rbxglobal.com>.
Hi Christopher -

If you are using maven you need to add this dependency:

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http-jetty</artifactId>
	<version>${cxf.version}</version>
</dependency>

If your not using maven just add that jar to your application classpath.

On Jul 17, 2007, at 12:04 PM, Christopher Moesel wrote:

> Hello All,
>
> I'm trying to write some JUnit tests that can test my SOAP web  
> services
> using the local transport
> (http://cwiki.apache.org/CXF20DOC/local-transport.html).
>
> Normally I run my services using the CXF Servlet, so doing it
> servlet-less is somewhat new to me.  Here is what I'm doing:
>
> Using a Spring ClassPathXmlApplicationContext to load up the following
> CXF spring configs:
> - META-INF/cxf/cxf.xml
> - META-INF/cxf/cxf-extension-soap.xml
> - META-INF/cxf/cxf-extension-policy.xml
>
> and also loading up my own spring configs that contain the endpoint,
> like so:
>
> <jaxws:endpoint
>   id="mockWebServiceEndpoint"
>   implementor="#mockWebService"
>   wsdlLocation="mockWebService.wsdl"
>   address="local://MockWebService">
>   <jaxws:features>
>     <wsp:Policy>
>       <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
>     </wsp:Policy>
>   </jaxws:features>
> </jaxws:endpoint>
>
> But... when I load them up, I get an exception with the following
> message:
> No DestinationFactory was found for the namespace
> http://schemas.xmlsoap.org/soap/http.
>
> I suspect I'm missing a CXF config file that defines the
> DestinationFactory, I'm not setting up something right on the  
> endpoint,
> or I'm just completely wrong and can't even use the local transport in
> this way.
>
> Could someone with a clue please help me out? ;)  The full stack trace
> is at the bottom of this message.
>
> -Chris
>
> org.apache.cxf.service.factory.ServiceConstructionException
> 	at
> org.apache.cxf.frontend.ServerFactoryBean.create 
> (ServerFactoryBean.java:
> 105)
> 	at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create 
> (JaxWsServerFactoryBea
> n.java:142)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
> 	at
> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint 
> (ProviderI
> mpl.java:74)
> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
> 	at
> com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests 
> (BaseWebServ
> iceTest.java:59)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.jav
> a:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessor
> Impl.java:25)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod 
> (BeforeAndAf
> terRunner.java:74)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.runBefores 
> (BeforeAndAfte
> rRunner.java:50)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.runProtected 
> (BeforeAndAf
> terRunner.java:33)
> 	at
> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java: 
> 52)
> 	at
> com.intellij.rt.junit4.Junit4TestMethodAdapter.run 
> (Junit4TestMethodAdapt
> er.java:54)
> 	at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java: 
> 40)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.jav
> a:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessor
> Impl.java:25)
> 	at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> Caused by: org.apache.cxf.BusException: No DestinationFactory was  
> found
> for the namespace http://schemas.xmlsoap.org/soap/http.
> 	at
> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationF 
> ac
> tory(DestinationFactoryManagerImpl.java:101)
> 	at
> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
> 	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
> 	at
> org.apache.cxf.frontend.ServerFactoryBean.create 
> (ServerFactoryBean.java:
> 90)
> 	... 27 more




Julio Arias
Java Developer
Roundbox Global : enterprise : technology : genius
---------------------------------------------------------------------
Avenida 11 y Calle 7-9, Barrio Amón, San Jose, Costa Rica
tel: 404.567.5000 ext. 2001 | cell: 11.506.849.5981
email: julio.arias@rbxglobal.com | www.rbxglobal.com
---------------------------------------------------------------------


Re: Using Local Transport for JUnit Tests

Posted by Willem Jiang <ni...@iona.com>.
Here is another way to add the LocalTransport by adding these in your 
spring.xml instead of  including META-INF/cxf/cxf-extension-local.xml

<bean class="org.apache.cxf.transport.local.LocalTransportFactory" 
lazy-init="false">
      <property name="transportIds">
          <list>
              <value>http://cxf.apache.org/transports/local</value>
              <value>http://schemas.xmlsoap.org/soap/http</value>
              <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>
          </list>
      </property>
</bean>

Cheers,

Willem.

Willem Jiang wrote:
> You may need to add the
>
> -META-INF/cxf/cxf-extension-local.xml
>
> And I just searched the codes with 
> "http://schemas.xmlsoap.org/soap/http", there are some hard code of it 
> in the SoapBindingConfiguration.
> You have to register do some register of local transport factory with 
> "http://schemas.xmlsoap.org/soap/http" URI to try to use the local 
> transport.
>
> Here is an example in the AbstractJaxWsTest class.
>
>        DestinationFactoryManager dfm = 
> bus.getExtension(DestinationFactoryManager.class);
>              localTransport = new LocalTransportFactory();
>        
> dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", 
> localTransport);
>        
> dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", 
> localTransport);
>        
> dfm.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", 
> localTransport);
>        
> dfm.registerDestinationFactory("http://cxf.apache.org/transports/local", 
> localTransport);
>
> If you still want to do use it with the spring wiring way, I think you 
> need to fill a JIRA for it.
>
> Willem.
>
>
> Christopher Moesel wrote:
>> Hello All,
>>
>> I'm trying to write some JUnit tests that can test my SOAP web services
>> using the local transport
>> (http://cwiki.apache.org/CXF20DOC/local-transport.html).
>>
>> Normally I run my services using the CXF Servlet, so doing it
>> servlet-less is somewhat new to me.  Here is what I'm doing:
>>
>> Using a Spring ClassPathXmlApplicationContext to load up the following
>> CXF spring configs:
>> - META-INF/cxf/cxf.xml
>> - META-INF/cxf/cxf-extension-soap.xml
>> - META-INF/cxf/cxf-extension-policy.xml
>>
>> and also loading up my own spring configs that contain the endpoint,
>> like so:
>>
>> <jaxws:endpoint
>>   id="mockWebServiceEndpoint"
>>   implementor="#mockWebService"
>>   wsdlLocation="mockWebService.wsdl"
>>   address="local://MockWebService">
>>   <jaxws:features>
>>     <wsp:Policy>
>>       <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
>>     </wsp:Policy>
>>   </jaxws:features>
>> </jaxws:endpoint>
>>
>> But... when I load them up, I get an exception with the following
>> message:
>> No DestinationFactory was found for the namespace
>> http://schemas.xmlsoap.org/soap/http.
>>
>> I suspect I'm missing a CXF config file that defines the
>> DestinationFactory, I'm not setting up something right on the endpoint,
>> or I'm just completely wrong and can't even use the local transport in
>> this way.
>>
>> Could someone with a clue please help me out? ;)  The full stack trace
>> is at the bottom of this message.
>>
>> -Chris
>>
>> org.apache.cxf.service.factory.ServiceConstructionException
>>     at
>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
>> 105)
>>     at
>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
>> n.java:142)
>>     at
>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
>>     at
>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
>>     at
>> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
>>     at
>> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
>> mpl.java:74)
>>     at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
>>     at
>> com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests(BaseWebServ
>> iceTest.java:59)
>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>     at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
>> a:39)
>>     at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
>> Impl.java:25)
>>     at
>> org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAf
>> terRunner.java:74)
>>     at
>> org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfte
>> rRunner.java:50)
>>     at
>> org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAf
>> terRunner.java:33)
>>     at
>> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
>>     at
>> com.intellij.rt.junit4.Junit4TestMethodAdapter.run(Junit4TestMethodAdapt
>> er.java:54)
>>     at
>> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>     at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
>> a:39)
>>     at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
>> Impl.java:25)
>>     at
>> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
>> Caused by: org.apache.cxf.BusException: No DestinationFactory was found
>> for the namespace http://schemas.xmlsoap.org/soap/http.
>>     at
>> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFac
>> tory(DestinationFactoryManagerImpl.java:101)
>>     at
>> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
>>     at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
>>     at
>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
>> 90)
>>     ... 27 more
>>
>>   
>

Re: Using Local Transport for JUnit Tests

Posted by Willem Jiang <ni...@iona.com>.
You may need to add the

-META-INF/cxf/cxf-extension-local.xml

And I just searched the codes with 
"http://schemas.xmlsoap.org/soap/http", there are some hard code of it 
in the SoapBindingConfiguration.
You have to register do some register of local transport factory with 
"http://schemas.xmlsoap.org/soap/http" URI to try to use the local 
transport.

Here is an example in the AbstractJaxWsTest class.

        DestinationFactoryManager dfm = 
bus.getExtension(DestinationFactoryManager.class);
       
        localTransport = new LocalTransportFactory();
        
dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", 
localTransport);
        
dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", 
localTransport);
        
dfm.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", 
localTransport);
        
dfm.registerDestinationFactory("http://cxf.apache.org/transports/local", 
localTransport);

If you still want to do use it with the spring wiring way, I think you 
need to fill a JIRA for it.

Willem.

 
Christopher Moesel wrote:
> Hello All,
>
> I'm trying to write some JUnit tests that can test my SOAP web services
> using the local transport
> (http://cwiki.apache.org/CXF20DOC/local-transport.html).
>
> Normally I run my services using the CXF Servlet, so doing it
> servlet-less is somewhat new to me.  Here is what I'm doing:
>
> Using a Spring ClassPathXmlApplicationContext to load up the following
> CXF spring configs:
> - META-INF/cxf/cxf.xml
> - META-INF/cxf/cxf-extension-soap.xml
> - META-INF/cxf/cxf-extension-policy.xml
>
> and also loading up my own spring configs that contain the endpoint,
> like so:
>
> <jaxws:endpoint
>   id="mockWebServiceEndpoint"
>   implementor="#mockWebService"
>   wsdlLocation="mockWebService.wsdl"
>   address="local://MockWebService">
>   <jaxws:features>
>     <wsp:Policy>
>       <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
>     </wsp:Policy>
>   </jaxws:features>
> </jaxws:endpoint>
>
> But... when I load them up, I get an exception with the following
> message:
> No DestinationFactory was found for the namespace
> http://schemas.xmlsoap.org/soap/http.
>
> I suspect I'm missing a CXF config file that defines the
> DestinationFactory, I'm not setting up something right on the endpoint,
> or I'm just completely wrong and can't even use the local transport in
> this way.
>
> Could someone with a clue please help me out? ;)  The full stack trace
> is at the bottom of this message.
>
> -Chris
>
> org.apache.cxf.service.factory.ServiceConstructionException
> 	at
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
> 105)
> 	at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
> n.java:142)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
> 	at
> org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
> mpl.java:74)
> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
> 	at
> com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests(BaseWebServ
> iceTest.java:59)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAf
> terRunner.java:74)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfte
> rRunner.java:50)
> 	at
> org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAf
> terRunner.java:33)
> 	at
> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
> 	at
> com.intellij.rt.junit4.Junit4TestMethodAdapter.run(Junit4TestMethodAdapt
> er.java:54)
> 	at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> 	at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> Caused by: org.apache.cxf.BusException: No DestinationFactory was found
> for the namespace http://schemas.xmlsoap.org/soap/http.
> 	at
> org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFac
> tory(DestinationFactoryManagerImpl.java:101)
> 	at
> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
> 	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
> 	at
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
> 90)
> 	... 27 more
>
>   

RE: Using Local Transport for JUnit Tests

Posted by Benson Margulies <bi...@basistech.com>.
I recommend stealing code from AbstractAegisTest. Since I use Aegis, I
can just use that class.

> -----Original Message-----
> From: Liu, Jervis [mailto:jliu@iona.com]
> Sent: Tuesday, July 17, 2007 10:40 PM
> To: cxf-user@incubator.apache.org
> Subject: RE: Using Local Transport for JUnit Tests
> 
> Hi Chris, to use local transport, you need to manually register
> LocalTransportFactory with all the namespaces that might be used, for
> example, "http://schemas.xmlsoap.org/soap/http". An example of how
this is
> done can be found from
>
\trunk\rt\frontend\jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxW
sT
> est.java. Actually almost all unit tests under jaxws module are
written
> with local transport, so just grab one CXF unit test then copy&paste,
> should work.
> 
> Cheers,
> Jervis
> 
> -----Original Message-----
> From: Christopher Moesel [mailto:Christopher_Moesel@avid.com]
> Sent: 2007?7?18? 2:04
> To: cxf-user@incubator.apache.org
> Subject: Using Local Transport for JUnit Tests
> 
> 
> Hello All,
> 
> I'm trying to write some JUnit tests that can test my SOAP web
services
> using the local transport
> (http://cwiki.apache.org/CXF20DOC/local-transport.html).
> 
> Normally I run my services using the CXF Servlet, so doing it
> servlet-less is somewhat new to me.  Here is what I'm doing:
> 
> Using a Spring ClassPathXmlApplicationContext to load up the following
> CXF spring configs:
> - META-INF/cxf/cxf.xml
> - META-INF/cxf/cxf-extension-soap.xml
> - META-INF/cxf/cxf-extension-policy.xml
> 
> and also loading up my own spring configs that contain the endpoint,
> like so:
> 
> <jaxws:endpoint
>   id="mockWebServiceEndpoint"
>   implementor="#mockWebService"
>   wsdlLocation="mockWebService.wsdl"
>   address="local://MockWebService">
>   <jaxws:features>
>     <wsp:Policy>
>       <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
>     </wsp:Policy>
>   </jaxws:features>
> </jaxws:endpoint>
> 
> But... when I load them up, I get an exception with the following
> message:
> No DestinationFactory was found for the namespace
> http://schemas.xmlsoap.org/soap/http.
> 
> I suspect I'm missing a CXF config file that defines the
> DestinationFactory, I'm not setting up something right on the
endpoint,
> or I'm just completely wrong and can't even use the local transport in
> this way.
> 
> Could someone with a clue please help me out? ;)  The full stack trace
> is at the bottom of this message.
> 
> -Chris
> 
> org.apache.cxf.service.factory.ServiceConstructionException
> 	at
>
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
> 105)
> 	at
>
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
> n.java:142)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
> 	at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
> 	at
>
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
> mpl.java:74)
> 	at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
> 	at
>
com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests(BaseWebServ
> iceTest.java:59)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> 	at
>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> 	at
>
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAf
> terRunner.java:74)
> 	at
>
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfte
> rRunner.java:50)
> 	at
>
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAf
> terRunner.java:33)
> 	at
>
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
> 	at
>
com.intellij.rt.junit4.Junit4TestMethodAdapter.run(Junit4TestMethodAdapt
> er.java:54)
> 	at
>
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> 	at
>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> 	at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> Caused by: org.apache.cxf.BusException: No DestinationFactory was
found
> for the namespace http://schemas.xmlsoap.org/soap/http.
> 	at
>
org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFac
> tory(DestinationFactoryManagerImpl.java:101)
> 	at
> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
> 	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
> 	at
>
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
> 90)
> 	... 27 more
> 
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
Ireland

RE: Using Local Transport for JUnit Tests

Posted by "Liu, Jervis" <jl...@iona.com>.
Hi Chris, to use local transport, you need to manually register LocalTransportFactory with all the namespaces that might be used, for example, "http://schemas.xmlsoap.org/soap/http". An example of how this is done can be found from \trunk\rt\frontend\jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxWsTest.java. Actually almost all unit tests under jaxws module are written with local transport, so just grab one CXF unit test then copy&paste, should work. 

Cheers,
Jervis

-----Original Message-----
From: Christopher Moesel [mailto:Christopher_Moesel@avid.com]
Sent: 2007?7?18? 2:04
To: cxf-user@incubator.apache.org
Subject: Using Local Transport for JUnit Tests


Hello All,

I'm trying to write some JUnit tests that can test my SOAP web services
using the local transport
(http://cwiki.apache.org/CXF20DOC/local-transport.html).

Normally I run my services using the CXF Servlet, so doing it
servlet-less is somewhat new to me.  Here is what I'm doing:

Using a Spring ClassPathXmlApplicationContext to load up the following
CXF spring configs:
- META-INF/cxf/cxf.xml
- META-INF/cxf/cxf-extension-soap.xml
- META-INF/cxf/cxf-extension-policy.xml

and also loading up my own spring configs that contain the endpoint,
like so:

<jaxws:endpoint
  id="mockWebServiceEndpoint"
  implementor="#mockWebService"
  wsdlLocation="mockWebService.wsdl"
  address="local://MockWebService">
  <jaxws:features>
    <wsp:Policy>
      <mtom:OptimizedMimeSerialization wsp:Optional="true"/>
    </wsp:Policy>
  </jaxws:features>
</jaxws:endpoint>

But... when I load them up, I get an exception with the following
message:
No DestinationFactory was found for the namespace
http://schemas.xmlsoap.org/soap/http.

I suspect I'm missing a CXF config file that defines the
DestinationFactory, I'm not setting up something right on the endpoint,
or I'm just completely wrong and can't even use the local transport in
this way.

Could someone with a clue please help me out? ;)  The full stack trace
is at the bottom of this message.

-Chris

org.apache.cxf.service.factory.ServiceConstructionException
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
105)
	at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
n.java:142)
	at
org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
	at
org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
	at
org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
	at
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
mpl.java:74)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
	at
com.myco.ws.client.BaseWebServiceTest.runsOnceBeforeAllTests(BaseWebServ
iceTest.java:59)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
	at
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAf
terRunner.java:74)
	at
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfte
rRunner.java:50)
	at
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAf
terRunner.java:33)
	at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
	at
com.intellij.rt.junit4.Junit4TestMethodAdapter.run(Junit4TestMethodAdapt
er.java:54)
	at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
	at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: org.apache.cxf.BusException: No DestinationFactory was found
for the namespace http://schemas.xmlsoap.org/soap/http.
	at
org.apache.cxf.transport.DestinationFactoryManagerImpl.getDestinationFac
tory(DestinationFactoryManagerImpl.java:101)
	at
org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
	at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:
90)
	... 27 more

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland