blob: 803393ac0fe846b1e10a39a76f2ec81cbf08439b [file] [log] [blame]
/*
* 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.axis2.jaxws.client;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.jaxws.description.DescriptionTestUtils2;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.ServiceDescription;
import org.apache.axis2.jaxws.spi.ClientMetadataTest;
import org.apache.axis2.jaxws.spi.ServiceDelegate;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
/**
* Verify that when a Service (i.e. a JAXWS Service Delegate instance) is no longer needed
* the resources it uses are cleaned up (i.e the EndpointDescription, AxisService, etc).
* The release can be driven by an explicit proprietary call or via the finalizer on the
* ServiceDelegate that is run during garbage collection.
*/
public class ReleaseServiceTests extends TestCase {
static final String namespaceURI = "http://dispatch.client.jaxws.axis2.apache.org";
static final String svcLocalPart = "svcLocalPart";
static final String dynamicPort1 = "dynamicPort1";
static final String bindingID1 = null;
static final String epr1 = null;
/**
* When a ServiceDelegate will not be used anymore, a close call on it should release
* the AxisServices and such it holds. Verify this for dynamic ports.
*/
public void testServiceReleaseDynamicPort() {
QName svcQN = new QName(namespaceURI, svcLocalPart);
try {
ClientMetadataTest.installCachingFactory();
Service svc1 = Service.create(svcQN);
QName portQN = new QName(namespaceURI, dynamicPort1);
svc1.addPort(portQN, bindingID1, epr1);
// User internal state to verify the port information before and after the close
ServiceDelegate delegate = DescriptionTestUtils2.getServiceDelegate(svc1);
ServiceDescription svcDesc = delegate.getServiceDescription();
EndpointDescription epDesc= svcDesc.getEndpointDescription(portQN, delegate);
assertNotNull(epDesc);
AxisConfiguration axisConfig = svcDesc.getAxisConfigContext().getAxisConfiguration();
HashMap axisServices = axisConfig.getServices();
assertEquals(1, axisServices.size());
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
axisServices = axisConfig.getServices();
assertEquals(0, axisServices.size());
epDesc= svcDesc.getEndpointDescription(portQN, delegate);
assertNull(epDesc);
} catch (Throwable t) {
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
/**
* Simple test to create a service, add quite a few dynamic ports under it, then release
* the service. This test is mostly for debugging the release logic outside the tests that
* create a lot of services to test an OOM isn't produced.
*/
public void testServiceReleaseSingleServiceDescriptionRelease() {
try {
ClientMetadataTest.installCachingFactory();
QName svcQN = new QName(namespaceURI, svcLocalPart);
Service svc1 = Service.create(svcQN);
for (int i = 0; i < 100; i++) {
QName portQN = new QName(namespaceURI, dynamicPort1 + "_" + i);
svc1.addPort(portQN, bindingID1, epr1);
}
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
} catch (Throwable t) {
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
/**
* Create a bunch of services with a bunch of ports under each, closing the service
* before the next one is created. This should release the resources for that service. The
* number of services and ports created is large enough to cause an OOM if the release isn't
* being done correctly.
*/
public void testMultipleServiceMultiplePortReleaseLoop() {
// Create a bunch of different services, make sure the service desc finalizer is called
try {
ClientMetadataTest.installCachingFactory();
for (int i = 0; i < 1000; i++) {
QName svcQN = new QName(namespaceURI, svcLocalPart + "_" + i);
Service svc1 = Service.create(svcQN);
for (int j = 0; j < 200; j++) {
QName portQN = new QName(namespaceURI, dynamicPort1 + "_svc_" + i + "_port_" + j);
svc1.addPort(portQN, bindingID1, epr1);
}
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
}
} catch (Throwable t) {
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
/**
* Test that creating a large number of services and ports, and then having them released by
* the finalizers during garbage collections does not produce on Out of Memory Error.
*
* NOTE: This test is disabled because forcing garbage collection is an inexact science
* at best. You can only ask the JVM to consider doing GC, and that behaves differntly
* on different JVMS. So, there's no reliable way to make sure this test runs on various
* JVMs. So, it is disabled. See the test that runns in a similar loop creating lots of
* services and ports, and then explicitly calls the relese method. That test should
* reliably and predictably not produce an OOM because of the explicit release call.
*/
public void _DISABLED_testServiceReleaseServiceDescriptionFinalizer() {
// Create a bunch of different services, make sure the service desc finalizer is called
try {
ClientMetadataTest.installCachingFactory();
final int MAX_OOM_COUNT = 5;
int oomCountService = 0;
for (int i = 0; i < 1000; i++) {
try {
int oomCount = 0;
QName svcQN = new QName(namespaceURI, svcLocalPart + "_" + i);
System.out.println("Creating service " + svcQN);
Service svc1 = Service.create(svcQN);
for (int j = 0; j < 200; j++) {
try {
QName portQN = new QName(namespaceURI, dynamicPort1 + "_svc_" + i + "_port_" + j);
System.out.println("Adding port " + portQN);
svc1.addPort(portQN, bindingID1, epr1);
// Pause every so often to give the garbage collection thread a chance to run
if ((j > 0) && (j % 50) == 0) {
System.out.println("Pausing port add for GC to run");
Thread.sleep(500);
}
} catch (OutOfMemoryError e) {
System.out.println("Caught OOM number " + ++oomCount);
if (oomCount <= MAX_OOM_COUNT) {
System.out.println("Sleeping to allow for GC after OOM caught");
Thread.sleep(15000);
System.out.println("Waking up and focing gc");
System.gc();
System.out.println("gc() method returned; continuing loop");
} else {
fail ("Maximum OOM count exceeded " + MAX_OOM_COUNT);
}
}
}
// don't call release; the finalizer should do it
// org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
// Pause to give the garbage collection thread a chance to run
System.out.println("Pausing service add for GC to run");
Thread.sleep(500);
} catch (OutOfMemoryError e) {
System.out.println("Caught Service OOM number " + ++oomCountService);
if (oomCountService <= MAX_OOM_COUNT) {
System.out.println("Sleeping to allow for GC after Service OOM caught");
Thread.sleep(15000);
System.out.println("Waking up and forcing gc");
System.gc();
System.out.println("Forced gc complete, continuing service loop");
} else {
fail ("Maximum Servcice OOM count exceeded " + MAX_OOM_COUNT);
}
}
}
} catch (Throwable t) {
System.out.println("Test failed, caught: " + t.toString());
t.printStackTrace();
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
/**
* Verify that after a service is released, it can be re-used with the same dynamic ports
* being added
*/
public void testServiceReuseDynamicPort() {
QName svcQN = new QName(namespaceURI, svcLocalPart);
try {
ClientMetadataTest.installCachingFactory();
Service svc1 = Service.create(svcQN);
QName portQN = new QName(namespaceURI, dynamicPort1);
svc1.addPort(portQN, bindingID1, epr1);
// Use internal state to verify all is well
ServiceDelegate delegate1 = DescriptionTestUtils2.getServiceDelegate(svc1);
ServiceDescription svcDesc1 = delegate1.getServiceDescription();
assertNotNull(svcDesc1);
EndpointDescription epDesc1= svcDesc1.getEndpointDescription(portQN, delegate1);
assertNotNull(epDesc1);
AxisService axisService1 = epDesc1.getAxisService();
assertNotNull(axisService1);
AxisConfiguration axisConfig1 = svcDesc1.getAxisConfigContext().getAxisConfiguration();
HashMap axisServices1 = axisConfig1.getServices();
assertEquals(1, axisServices1.size());
// Close the delegate, which should release resources and remove objects from caches
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
Service svc2 = Service.create(svcQN);
svc2.addPort(portQN, bindingID1, epr1);
// Use internal state to verify all is well; compare to values from the first time
// around to make sure the cache values for things like the ServiceDescription got
// cleared out when the last ServiceDelegate (in the test the only one) relesaed
// the resources.
ServiceDelegate delegate2 = DescriptionTestUtils2.getServiceDelegate(svc2);
assertNotSame(delegate1, delegate2);
ServiceDescription svcDesc2 = delegate2.getServiceDescription();
assertNotNull(svcDesc2);
assertNotSame(svcDesc1, svcDesc2);
EndpointDescription epDesc2= svcDesc2.getEndpointDescription(portQN, delegate2);
assertNotNull(epDesc2);
assertNotSame(epDesc1, epDesc2);
AxisService axisService2 = epDesc2.getAxisService();
assertNotNull(axisService2);
assertNotSame(axisService1, axisService2);
AxisConfiguration axisConfig2 = svcDesc2.getAxisConfigContext().getAxisConfiguration();
HashMap axisServices2 = axisConfig2.getServices();
assertEquals(1, axisServices2.size());
// Verify the service from the map and EndpointDesc are the same
// Since there's only one element in the map, we can get it directly off the iterator
assertSame(axisService2, ((Map.Entry) axisServices2.entrySet().iterator().next()).getValue());
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
/**
* Verify that if multiple service are sharing a service description, the release of
* resources does not happen on the first close.
*/
public void testMultipleServiceMultiplePortRelease() {
QName svcQN = new QName(namespaceURI, svcLocalPart);
try {
ClientMetadataTest.installCachingFactory();
Service svc1 = Service.create(svcQN);
Service svc2 = Service.create(svcQN);
QName portQN1 = new QName(namespaceURI, dynamicPort1);
QName portQN2 = new QName(namespaceURI, dynamicPort1 + "_2");
svc1.addPort(portQN1,bindingID1, epr1);
svc1.addPort(portQN2, bindingID1, epr1);
svc2.addPort(portQN1,bindingID1, epr1);
svc2.addPort(portQN2, bindingID1, epr1);
ServiceDelegate sd1 = DescriptionTestUtils2.getServiceDelegate(svc1);
ServiceDelegate sd2 = DescriptionTestUtils2.getServiceDelegate(svc2);
assertNotSame(sd1, sd2);
ServiceDescription svcDesc1 = sd1.getServiceDescription();
ServiceDescription svcDesc2 = sd2.getServiceDescription();
AxisConfiguration axisConfig = svcDesc1.getAxisConfigContext().getAxisConfiguration();
assertSame(svcDesc1, svcDesc2);
EndpointDescription epDesc1_port1 = svcDesc1.getEndpointDescription(portQN1, sd1);
EndpointDescription epDesc2_port1 = svcDesc1.getEndpointDescription(portQN1, sd2);
assertSame(epDesc1_port1, epDesc2_port1);
AxisService axisSvc1_port1 = epDesc1_port1.getAxisService();
AxisService axisSvc2_port1 = epDesc2_port1.getAxisService();
assertSame(axisSvc1_port1, axisSvc2_port1);
EndpointDescription epDesc1_port2 = svcDesc1.getEndpointDescription(portQN2, sd1);
EndpointDescription epDesc2_port2 = svcDesc1.getEndpointDescription(portQN2, sd2);
assertSame(epDesc1_port2, epDesc2_port2);
AxisService axisSvc1_port2 = epDesc1_port2.getAxisService();
AxisService axisSvc2_port2 = epDesc2_port2.getAxisService();
assertSame(axisSvc1_port2, axisSvc2_port2);
// First close should NOT cleanup the endpoints since the other service is
// still using them.
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
ServiceDescription svcDesc2_afterClose = sd2.getServiceDescription();
assertSame(svcDesc2, svcDesc2_afterClose);
EndpointDescription epDesc2_port1_afterClose =
svcDesc2_afterClose.getEndpointDescription(portQN1, sd2);
assertSame(epDesc2_port1, epDesc2_port1_afterClose);
EndpointDescription epDesc2_port2_afterClose =
svcDesc2_afterClose.getEndpointDescription(portQN2, sd2);
assertSame(epDesc2_port2, epDesc2_port2_afterClose);
// Add a third, should use the same
Service svc3 = Service.create(svcQN);
svc3.addPort(portQN1,bindingID1, epr1);
svc3.addPort(portQN2, bindingID1, epr1);
ServiceDelegate sd3 = DescriptionTestUtils2.getServiceDelegate(svc3);
assertNotSame(sd2, sd3);
ServiceDescription svcDesc3 = sd3.getServiceDescription();
assertSame(svcDesc2_afterClose, svcDesc3);
EndpointDescription epDesc3_port1 = svcDesc3.getEndpointDescription(portQN1, sd3);
assertSame(epDesc3_port1, epDesc2_port1_afterClose);
EndpointDescription epDesc3_port2 = svcDesc3.getEndpointDescription(portQN2, sd3);
assertSame(epDesc3_port2, epDesc2_port2_afterClose);
// Close the 2nd delegate and make sure cahced objects are still there
// since there's a 3rd delegate now
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc2);
ServiceDescription svcDesc3_afterClose = sd3.getServiceDescription();
assertSame(svcDesc3, svcDesc3_afterClose);
EndpointDescription epDesc3_port1_afterClose =
svcDesc3_afterClose.getEndpointDescription(portQN1, sd3);
assertSame(epDesc3_port1, epDesc3_port1_afterClose);
EndpointDescription epDesc3_port2_afterClose =
svcDesc3_afterClose.getEndpointDescription(portQN2, sd3);
assertSame(epDesc3_port2, epDesc3_port2_afterClose);
// Close the last delegate then verify all the services have been removed
// from the AxisConfiguration
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc3);
HashMap axisServices = axisConfig.getServices();
assertEquals(0, axisServices.size());
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
public void testSeviceUseAfterClose() {
QName svcQN = new QName(namespaceURI, svcLocalPart);
try {
ClientMetadataTest.installCachingFactory();
Service svc1 = Service.create(svcQN);
QName portQN = new QName(namespaceURI, dynamicPort1);
svc1.addPort(portQN, bindingID1, epr1);
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
svc1.addPort(portQN, bindingID1, epr1);
fail("Should have caught an exception");
} catch (WebServiceException e) {
// expected path
} catch (Exception e) {
fail("Caught wrong exception " + e);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
static final String declared_namespaceURI = "http://description.jaxws.axis2.apache.org";
static final String declared_svcLocalPart = "svcLocalPart";
static final String multiPortWsdl = "ClientMetadataMultiPort.wsdl";
static final String multiPortWsdl_portLocalPart1 = "portLocalPartMulti1";
static final String multiPortWsdl_portLocalPart2 = "portLocalPartMulti2";
static final String multiPortWsdl_portLocalPart3 = "portLocalPartMulti3";
public void testMultipleServiceMultipeDeclaredPorts() {
QName serviceQName = new QName(declared_namespaceURI , declared_svcLocalPart);
URL wsdlUrl = getWsdlURL(multiPortWsdl);
QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1);
QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2);
QName portQN3 = new QName(namespaceURI, multiPortWsdl_portLocalPart3);
try {
ClientMetadataTest.installCachingFactory();
// Open 2 services
Service svc1 = Service.create(wsdlUrl, serviceQName);
Service svc2 = Service.create(wsdlUrl, serviceQName);
ClientMetadataPortSEI svc1_port1 = svc1.getPort(portQN1, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc1_port2 = svc1.getPort(portQN2, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc1_port3 = svc1.getPort(portQN3, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc2_port1 = svc2.getPort(portQN1, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc2_port2 = svc2.getPort(portQN2, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc2_port3 = svc2.getPort(portQN3, ClientMetadataPortSEI.class);
ServiceDelegate sd1 = DescriptionTestUtils2.getServiceDelegate(svc1);
ServiceDelegate sd2 = DescriptionTestUtils2.getServiceDelegate(svc2);
assertNotSame(sd1, sd2);
ServiceDescription svcDesc1 = sd1.getServiceDescription();
ServiceDescription svcDesc2 = sd2.getServiceDescription();
AxisConfiguration axisConfig = svcDesc1.getAxisConfigContext().getAxisConfiguration();
assertSame(svcDesc1, svcDesc2);
EndpointDescription epDesc1_port1 = svcDesc1.getEndpointDescription(portQN1, sd1);
EndpointDescription epDesc2_port1 = svcDesc1.getEndpointDescription(portQN1, sd2);
assertSame(epDesc1_port1, epDesc2_port1);
AxisService axisSvc1_port1 = epDesc1_port1.getAxisService();
AxisService axisSvc2_port1 = epDesc2_port1.getAxisService();
assertSame(axisSvc1_port1, axisSvc2_port1);
EndpointDescription epDesc1_port2 = svcDesc1.getEndpointDescription(portQN2, sd1);
EndpointDescription epDesc2_port2 = svcDesc1.getEndpointDescription(portQN2, sd2);
assertSame(epDesc1_port2, epDesc2_port2);
AxisService axisSvc1_port2 = epDesc1_port2.getAxisService();
AxisService axisSvc2_port2 = epDesc2_port2.getAxisService();
assertSame(axisSvc1_port2, axisSvc2_port2);
// First close should NOT cleanup the endpoints since the other service is
// still using them.
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc1);
ServiceDescription svcDesc2_afterClose = sd2.getServiceDescription();
assertSame(svcDesc2, svcDesc2_afterClose);
EndpointDescription epDesc2_port1_afterClose =
svcDesc2_afterClose.getEndpointDescription(portQN1, sd2);
assertSame(epDesc2_port1, epDesc2_port1_afterClose);
EndpointDescription epDesc2_port2_afterClose =
svcDesc2_afterClose.getEndpointDescription(portQN2, sd2);
assertSame(epDesc2_port2, epDesc2_port2_afterClose);
// Add a third, should use the same
Service svc3 = Service.create(wsdlUrl, serviceQName);
ClientMetadataPortSEI svc3_port1 = svc3.getPort(portQN1, ClientMetadataPortSEI.class);
ClientMetadataPortSEI svc3_port2 = svc3.getPort(portQN2, ClientMetadataPortSEI.class);
ServiceDelegate sd3 = DescriptionTestUtils2.getServiceDelegate(svc3);
assertNotSame(sd2, sd3);
ServiceDescription svcDesc3 = sd3.getServiceDescription();
assertSame(svcDesc2_afterClose, svcDesc3);
EndpointDescription epDesc3_port1 = svcDesc3.getEndpointDescription(portQN1, sd3);
assertSame(epDesc3_port1, epDesc2_port1_afterClose);
EndpointDescription epDesc3_port2 = svcDesc3.getEndpointDescription(portQN2, sd3);
assertSame(epDesc3_port2, epDesc2_port2_afterClose);
// Close the 2nd delegate and make sure cahced objects are still there
// since there's a 3rd delegate now
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc2);
ServiceDescription svcDesc3_afterClose = sd3.getServiceDescription();
assertSame(svcDesc3, svcDesc3_afterClose);
EndpointDescription epDesc3_port1_afterClose =
svcDesc3_afterClose.getEndpointDescription(portQN1, sd3);
assertSame(epDesc3_port1, epDesc3_port1_afterClose);
EndpointDescription epDesc3_port2_afterClose =
svcDesc3_afterClose.getEndpointDescription(portQN2, sd3);
assertSame(epDesc3_port2, epDesc3_port2_afterClose);
// Close the last delegate then verify all the services have been removed
// from the AxisConfiguration
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(svc3);
HashMap axisServices = axisConfig.getServices();
assertEquals(0, axisServices.size());
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
static final String GENERATED_SERVICE_WSDL = "ClientMetadata.wsdl";
static final String GENERATED_SERVICE_NS = "http://description.jaxws.axis2.apache.org";
static final String GENERATED_SERVICE_LP = "svcLocalPart";
public void testGeneratedServiceRelease() {
try {
ClientMetadataTest.installCachingFactory();
ClientMetadataGeneratedService genSvc = new ClientMetadataGeneratedService();
assertNotNull(genSvc);
ClientMetadataPortSEI port = genSvc.getPort(ClientMetadataPortSEI.class);
assertNotNull(port);
// User internal state to verify the port information before and after the close
ServiceDelegate delegate = DescriptionTestUtils2.getServiceDelegate(genSvc);
ServiceDescription svcDesc = delegate.getServiceDescription();
EndpointDescription[] epDescArray= svcDesc.getEndpointDescriptions();
assertNotNull(epDescArray);
assertEquals(1, epDescArray.length);
AxisConfiguration axisConfig = svcDesc.getAxisConfigContext().getAxisConfiguration();
HashMap axisServices = axisConfig.getServices();
assertEquals(1, axisServices.size());
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(genSvc);
axisServices = axisConfig.getServices();
assertEquals(0, axisServices.size());
epDescArray= svcDesc.getEndpointDescriptions();
assertEquals(0, epDescArray.length);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
public void testGeneratedServiceRelaseLoop() {
// Create a bunch of different services, make sure the service desc finalizer is called
try {
ClientMetadataTest.installCachingFactory();
for (int i = 0; i < 1000; i++) {
ClientMetadataGeneratedService genSvc = new ClientMetadataGeneratedService();
ClientMetadataPortSEI port = genSvc.getPort(ClientMetadataPortSEI.class);
org.apache.axis2.jaxws.spi.ServiceDelegate.releaseService(genSvc);
}
} catch (Throwable t) {
fail("Caught throwable " + t);
} finally {
ClientMetadataTest.restoreOriginalFactory();
}
}
// =============================================================================================
// Utility methods
// =============================================================================================
/**
* Given a simple file name (with no base dictory or path), returns a URL to the WSDL file
* with the base directory and path prepended.
*
* @param wsdlFileName
* @return
*/
static URL getWsdlURL(String wsdlFileName) {
URL url = null;
String wsdlLocation = getWsdlLocation(wsdlFileName);
try {
File file = new File(wsdlLocation);
url = file.toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception converting WSDL file to URL: " + e.toString());
}
return url;
}
/**
* Prepends the base directory and the path where the test WSDL lives to a filename.
* @param wsdlFileName
* @return
*/
static String getWsdlLocation(String wsdlFileName) {
String wsdlLocation = null;
String baseDir = System.getProperty("basedir",".");
wsdlLocation = baseDir + "/test-resources/wsdl/" + wsdlFileName;
return wsdlLocation;
}
}
@WebService(name="EchoMessagePortType", targetNamespace="http://description.jaxws.axis2.apache.org")
interface ClientMetadataPortSEI {
public String echoMessage(String string);
}
@WebServiceClient()
class ClientMetadataGeneratedService extends javax.xml.ws.Service {
public ClientMetadataGeneratedService() {
super(ReleaseServiceTests.getWsdlURL(ReleaseServiceTests.GENERATED_SERVICE_WSDL),
new QName(ReleaseServiceTests.GENERATED_SERVICE_NS, ReleaseServiceTests.GENERATED_SERVICE_LP));
}
public ClientMetadataGeneratedService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
}