Update...

Tried adding

bindingUri="http://cxf.apache.org/transports/local";

as suggested in this thread:

http://www.nabble.com/Can-local:---and-http:---addresses-coexist-on-the-same-server-td17916451.html

to each of the local:// endpoints. Still get a MalformedURLException.

Am I missing something really obvious here?

The in_jvm_transport uses the coloc feature at the client end to set
up local transport instead of server-side config. But in the thread I
linked to above, Dan spotted that this feature has a serious bug. Was
that ever addressed? I couldn't find anything in JIRA that looked
relevant.

Thanks,

Andrew.

2009/3/2 Andrew Clegg <and...@nervechannel.com>:
> 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/ ::
>



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

Reply via email to