cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Clegg <and...@nervechannel.com>
Subject MalformedURLException when trying to initialize local transport, and some questions
Date Mon, 02 Mar 2009 19:42:40 GMT
Hi,

I've started hacking around with the local transport mechanism as
described here:

http://cwiki.apache.org/CXF20DOC/local-transport.html

However, when I try to bring it up endpoints listening on a local://
URL I get a MalformedURLException.

The code looks like this:

__endpoints[ 0 ] = Endpoint.publish( "local://CodaCathService",
        new CodaCathProvider() );
__endpoints[ 1 ] = Endpoint.publish( "local://CodaPfamService",
        new CodaPfamProvider() );
__endpoints[ 2 ] = Endpoint.publish( "local://GecoService",
        new GecoProvider() );
__endpoints[ 3 ] = Endpoint.publish( "local://HippiService",
        new HippiProvider() );

where __endpoints is an array of javax.xml.ws.Endpoint .And the
stacktrace looks like this:

javax.xml.ws.WebServiceException:
org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:268)
	at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:202)
	at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:84)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
	at info.cathdb.funcnet.impl.EmbeddedServiceIntegrationTest.setUpClass(EmbeddedServiceIntegrationTest.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
	at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:139)
	at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:168)
	at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:339)
	at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:252)
	... 20 more
Caused by: java.net.MalformedURLException: unknown protocol: local
	at java.net.URL.<init>(URL.java:574)
	at java.net.URL.<init>(URL.java:464)
	at java.net.URL.<init>(URL.java:413)
	at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.<init>(JettyHTTPDestination.java:91)
	at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:116)
	at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103)
	at org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.java:74)
	at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:90)
	at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
	at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:118)
	... 23 more

So it looks like this is still using the JettyHTTPTransportFactory
rather than the LocalTransportFactory. Is the example on that wiki
page complete? It seems to me that if you follow the 'in code'
example, rather than 'in XML', you don't get a chance to specify what
transport factory to use.

I should add that this is in a JUnit test where I'm trying to start
the services and call them in the same thread. For my real
configuration, once it's working in test, I've followed the 'in XML'
example and defined local:// mirrors of my http endpoints in
cxf-servlet.xml like this:

<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>

<jaxws:endpoint id="GecoService"
 implementor="info.cathdb.funcnet.impl.GecoProvider"
 endpointName="funcnet:GecoPort"
 serviceName="funcnet:GecoService"
 address="/GecoService"
 wsdlLocation="WEB-INF/wsdl/Services.wsdl">
</jaxws:endpoint>

<jaxws:endpoint id="GecoServiceLocal"
 implementor="info.cathdb.funcnet.impl.GecoProvider"
 endpointName="funcnet:GecoPort"
 serviceName="funcnet:GecoService"
 address="local://GecoService"
 wsdlLocation="WEB-INF/wsdl/Services.wsdl">
</jaxws:endpoint>

<!-- etc. -->

I have three questions though, maybe a good idea to ask them now in
case these will be show-stoppers... Does anyone know if the local
transport has issues with:

(a) passing messages between different WARs in the same server JVM (in
this case Tomcat 6)?

(b) Provider services and Dispatch clients?

(c) The same implementation classes being published on both http and
local endpoints, as above?

Once again, many thanks!

Andrew.

-- 
:: http://biotext.org.uk/ ::

Mime
View raw message