You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/11/14 20:57:57 UTC
svn commit: r595027 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/endpoint/
rt/core/src/main/java/org/apache/cxf/endpoint/
rt/core/src/main/resources/META-INF/cxf/
rt/core/src/test/java/org/apache/cxf/endpoint/ rt/frontend/jaxws/src/main/...
Author: dkulp
Date: Wed Nov 14 11:57:47 2007
New Revision: 595027
URL: http://svn.apache.org/viewvc?rev=595027&view=rev
Log:
[CXF-1199] ServiceResolver stuff from Jeff
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java (with props)
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java (with props)
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java (with props)
incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java (with props)
incubator/cxf/trunk/systests/src/test/resources/wsdl/hello_world_resolver.jar (with props)
Modified:
incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.endpoint;
+
+import java.net.URI;
+
+import javax.xml.namespace.QName;
+
+public interface ServiceContactResolver {
+ URI getContractLocation(QName qname);
+
+}
Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContactResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.endpoint;
+
+import java.net.URI;
+
+import javax.xml.namespace.QName;
+
+public interface ServiceContractResolverRegistry {
+ URI getContractLocation(QName qname);
+ void register(ServiceContactResolver resolver);
+ void unregister(ServiceContactResolver resolver);
+ boolean isRegistered(ServiceContactResolver resolver);
+
+}
Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java (added)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.endpoint;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+
+public class ServiceContractResolverRegistryImpl implements ServiceContractResolverRegistry {
+
+ private Bus bus;
+ private List<ServiceContactResolver> resolvers;
+
+ /**
+ * Initialize registry, and expose as Bus extension.
+ */
+ @PostConstruct
+ public void init() {
+ resolvers = new ArrayList<ServiceContactResolver>();
+ if (bus != null) {
+ bus.setExtension(this, ServiceContractResolverRegistry.class);
+ }
+ }
+
+ public URI getContractLocation(QName qname) {
+ for (ServiceContactResolver resolver : resolvers) {
+ URI contact = resolver.getContractLocation(qname);
+ if (null != contact) {
+ return contact;
+ }
+ }
+ return null;
+ }
+
+ public boolean isRegistered(ServiceContactResolver resolver) {
+ return resolvers.contains(resolver);
+ }
+
+ public synchronized void register(ServiceContactResolver resolver) {
+ resolvers.add(resolver);
+
+ }
+
+ public synchronized void unregister(ServiceContactResolver resolver) {
+ resolvers.remove(resolver);
+
+ }
+
+ public void setBus(Bus bus) {
+ this.bus = bus;
+ }
+
+ protected List<ServiceContactResolver> getResolvers() {
+ return resolvers;
+ }
+
+}
Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml?rev=595027&r1=595026&r2=595027&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml (original)
+++ incubator/cxf/trunk/rt/core/src/main/resources/META-INF/cxf/cxf.xml Wed Nov 14 11:57:47 2007
@@ -115,4 +115,8 @@
<bean id="org.apache.cxf.catalog.OASISCatalogManager" class="org.apache.cxf.catalog.OASISCatalogManager">
<property name="bus" ref="cxf"/>
</bean>
+
+ <bean id="org.apache.cxf.endpoint.ServiceContractResolverRegistry" class="org.apache.cxf.endpoint.ServiceContractResolverRegistryImpl">
+ <property name="bus" ref="cxf"/>
+ </bean>
</beans>
Added: incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java (added)
+++ incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,161 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.endpoint;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ServiceContractResolverRegistryImplTest extends Assert {
+ private ServiceContractResolverRegistryImpl registry;
+ private ServiceContactResolver resolver1;
+ private ServiceContactResolver resolver2;
+ private URI uri1;
+ private URI uri2;
+ private IMocksControl control;
+ private QName serviceName;
+
+ @Before
+ public void setUp() throws URISyntaxException {
+ registry = new ServiceContractResolverRegistryImpl();
+ control = EasyMock.createNiceControl();
+ resolver1 = control.createMock(ServiceContactResolver.class);
+ resolver2 = control.createMock(ServiceContactResolver.class);
+ uri1 = new URI("http://mock");
+ uri2 = new URI("file:///foo/bar");
+
+ serviceName = new QName("namespace", "local");
+ }
+ @After
+ public void tearDown() {
+ resolver1 = null;
+ resolver2 = null;
+ serviceName = null;
+ }
+
+ @Test
+ public void testInit() {
+ assertNull("unexpected resolvers list", registry.getResolvers());
+ Bus bus = control.createMock(Bus.class);
+ registry.setBus(bus);
+ bus.setExtension(registry, ServiceContractResolverRegistry.class);
+ control.replay();
+
+ registry.init();
+
+ assertNotNull("expected resolvers list", registry.getResolvers());
+ control.verify();
+ }
+
+ @Test
+ public void testRegister() {
+ registry.init();
+ assertEquals("unexpected resolver count",
+ 0,
+ registry.getResolvers().size());
+
+ registry.register(resolver1);
+
+ assertEquals("unexpected resolver count",
+ 1,
+ registry.getResolvers().size());
+ assertTrue("expected resolver to be registered",
+ registry.getResolvers().contains(resolver1));
+
+ registry.unregister(resolver1);
+
+ assertEquals("unexpected resolver count",
+ 0,
+ registry.getResolvers().size());
+ assertFalse("expected resolver to be registered",
+ registry.getResolvers().contains(resolver1));
+
+ registry.register(resolver2);
+ registry.register(resolver1);
+
+ assertEquals("unexpected resolver count",
+ 2,
+ registry.getResolvers().size());
+ assertTrue("expected resolver to be registered",
+ registry.getResolvers().contains(resolver1));
+ assertTrue("expected resolver to be registered",
+ registry.getResolvers().contains(resolver2));
+
+ registry.unregister(resolver2);
+
+ assertEquals("unexpected resolver count",
+ 1,
+ registry.getResolvers().size());
+ assertTrue("expected resolver to be registered",
+ registry.getResolvers().contains(resolver1));
+ assertFalse("expected resolver to be registered",
+ registry.getResolvers().contains(resolver2));
+ }
+
+ @Test
+ public void testGetContactLocation() {
+ registry.init();
+ registry.register(resolver1);
+ registry.register(resolver2);
+ resolver1.getContractLocation(serviceName);
+ EasyMock.expectLastCall().andReturn(uri1);
+ control.replay();
+
+ URI resolved = registry.getContractLocation(serviceName);
+
+ control.verify();
+ assertSame("unexpected physical EPR", uri1, resolved);
+
+ control.reset();
+ resolver1.getContractLocation(serviceName);
+ EasyMock.expectLastCall().andReturn(null);
+ resolver2.getContractLocation(serviceName);
+ EasyMock.expectLastCall().andReturn(uri2);
+ control.replay();
+
+ resolved = registry.getContractLocation(serviceName);
+
+ control.verify();
+ assertSame("unexpected physical EPR", uri2, resolved);
+ assertNotSame("unexpected physical EPR", uri1, resolved);
+
+ control.reset();
+ resolver1.getContractLocation(serviceName);
+ EasyMock.expectLastCall().andReturn(null);
+ resolver2.getContractLocation(serviceName);
+ EasyMock.expectLastCall().andReturn(null);
+ control.replay();
+
+ resolved = registry.getContractLocation(serviceName);
+
+ control.verify();
+ assertNull("unexpected physical EPR", resolved);
+ }
+
+}
Propchange: incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/core/src/test/java/org/apache/cxf/endpoint/ServiceContractResolverRegistryImplTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?rev=595027&r1=595026&r2=595027&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Wed Nov 14 11:57:47 2007
@@ -20,6 +20,7 @@
package org.apache.cxf.jaxws;
import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;
@@ -32,6 +33,7 @@
import java.util.concurrent.Executor;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import javax.jws.WebService;
import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
@@ -56,6 +58,7 @@
import org.apache.cxf.endpoint.ClientImpl;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
+import org.apache.cxf.endpoint.ServiceContractResolverRegistry;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.binding.soap.JaxWsSoapBindingConfiguration;
@@ -99,11 +102,29 @@
public ServiceImpl(Bus b, URL url, QName name, Class<?> cls) {
bus = b;
- wsdlURL = url == null ? null : url.toString();
this.serviceName = name;
clazz = cls;
handlerResolver = new HandlerResolverImpl(bus, name, clazz);
+
+ if (null == url && null != bus) {
+ ServiceContractResolverRegistry registry =
+ bus.getExtension(ServiceContractResolverRegistry.class);
+ if (null != registry) {
+ URI uri = registry.getContractLocation(name);
+ if (null != uri) {
+ try {
+ url = uri.toURL();
+ } catch (MalformedURLException e) {
+ LOG.log(Level.FINE, "resolve qname failed", name);
+ throw new WebServiceException(e);
+ }
+ }
+ }
+ }
+
+ wsdlURL = url == null ? null : url.toString();
+
if (url != null) {
try {
initializePorts();
Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=595027&r1=595026&r2=595027&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Wed Nov 14 11:57:47 2007
@@ -27,6 +27,8 @@
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
+import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
@@ -54,6 +56,7 @@
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.endpoint.ServiceContractResolverRegistry;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.frontend.FaultInfoException;
import org.apache.cxf.frontend.MethodDispatcher;
@@ -1642,13 +1645,30 @@
for (AbstractServiceConfiguration c : serviceConfigurations) {
wsdlURL = c.getWsdlURL();
if (wsdlURL != null) {
- //create a unique string so if its an interned string (like
- //from an annotation), caches will clear
- wsdlURL = new String(wsdlURL);
break;
}
}
+ if (null == wsdlURL && getBus() != null) {
+ ServiceContractResolverRegistry registry =
+ getBus().getExtension(ServiceContractResolverRegistry.class);
+ if (null != registry) {
+ URI uri = registry.getContractLocation(this.getServiceQName());
+ if (null != uri) {
+ try {
+ wsdlURL = uri.toURL().toString();
+ } catch (MalformedURLException e) {
+ LOG.log(Level.FINE, "resolve qname failed", this.getServiceQName());
+ }
+ }
+ }
+ }
+ if (wsdlURL != null) {
+ //create a unique string so if its an interned string (like
+ //from an annotation), caches will clear
+ wsdlURL = new String(wsdlURL);
+ }
}
+
return wsdlURL;
}
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.resolver;
+
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+
+import org.apache.cxf.endpoint.ServiceContractResolverRegistry;
+import org.apache.cxf.endpoint.ServiceContractResolverRegistryImpl;
+import org.apache.cxf.systest.jca.OutBoundConnectionTest.Server;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.hello_world_soap_http.Greeter;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class JarResolverTest extends AbstractBusClientServerTestBase {
+ private final QName serviceName = new QName("http://apache.org/hello_world_soap_http", "SOAPService");
+
+ private final QName portName = new QName("http://apache.org/hello_world_soap_http", "SoapPort");
+
+ @BeforeClass
+ public static void startServers() throws Exception {
+ assertTrue("server did not launch correctly", launchServer(Server.class));
+
+ }
+ @Test
+ public void testResolver() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/hello_world.wsdl");
+ assertNotNull(wsdl);
+
+ createBus();
+ assertNotNull(bus);
+ ServiceContractResolverRegistryImpl registry =
+ new ServiceContractResolverRegistryImpl();
+ registry.setBus(bus);
+ registry.init();
+ assertNotNull(bus.getExtension(ServiceContractResolverRegistry.class));
+
+ JarServiceContactResolver resolver = new JarServiceContactResolver();
+ registry.register(resolver);
+
+ Service service = Service.create(serviceName);
+ //service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
+ // "http://localhost:9000/SoapContext/SoapPort");
+ Greeter greeter = service.getPort(portName, Greeter.class);
+
+ String resp = greeter.sayHi();
+ assertNotNull(resp);
+ }
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarResolverTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.resolver;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.endpoint.ServiceContactResolver;
+
+public class JarServiceContactResolver implements ServiceContactResolver {
+
+ private URI uri;
+
+ public URI getContractLocation(QName qname) {
+ URI ns = null;
+ try {
+ ns = new URI(qname.getNamespaceURI()).normalize();
+ } catch (URISyntaxException e2) {
+ return null;
+ }
+
+ String[] hostStrings = ns.getHost().split("\\.");
+ String[] pathStrings = ns.getPath().split("\\/");
+ String local = qname.getLocalPart();
+ StringBuffer path = new StringBuffer();
+ for (int i = hostStrings.length - 1; i >= 0; i--) {
+ path.append(hostStrings[i]).append("/");
+ }
+ for (int i = 1; i < pathStrings.length; i++) {
+ path.append(pathStrings[i]).append("/");
+ }
+ path.append(local).append(".wsdl");
+ try {
+ URL jarURL = this.getClass().getResource("/wsdl/hello_world_resolver.jar");
+ JarFile jar = new JarFile(new File(jarURL.toURI()));
+ JarEntry jarEntry = jar.getJarEntry(path.toString());
+ uri = new URI("jar:" + jarURL + "!/" + jarEntry.toString());
+ return uri;
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ return null;
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/JarServiceContactResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java?rev=595027&view=auto
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java Wed Nov 14 11:57:47 2007
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.resolver;
+
+import javax.xml.ws.Endpoint;
+
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.hello_world_soap_http.GreeterImpl;
+
+public class Server extends AbstractBusTestServerBase {
+ protected void run() {
+ Object implementor = new GreeterImpl();
+ String address = "http://localhost:9000/SoapContext/SoapPort";
+ Endpoint.publish(address, implementor);
+
+ }
+
+ public static void main(String[] args) {
+ try {
+ Server s = new Server();
+ s.start();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.exit(-1);
+ } finally {
+ System.out.println("done!");
+ }
+ }
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/resolver/Server.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/systests/src/test/resources/wsdl/hello_world_resolver.jar
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/resources/wsdl/hello_world_resolver.jar?rev=595027&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/cxf/trunk/systests/src/test/resources/wsdl/hello_world_resolver.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream