You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/03 12:08:48 UTC
tomee git commit: TOMEE-1466 Apply WS-Security config (cxf
interceptor) when use @WebService with javax.xml.ws.Service,
thanks Yann Blazart
Repository: tomee
Updated Branches:
refs/heads/tomee-1.7.x 9a340c02f -> 3f1f037e5
TOMEE-1466 Apply WS-Security config (cxf interceptor) when use @WebService with javax.xml.ws.Service, thanks Yann Blazart
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/3f1f037e
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/3f1f037e
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/3f1f037e
Branch: refs/heads/tomee-1.7.x
Commit: 3f1f037e532e2fe32033597391b6f99625359056
Parents: 9a340c0
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Dec 3 12:08:37 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Wed Dec 3 12:08:37 2014 +0100
----------------------------------------------------------------------
.../core/ivm/naming/JaxWsServiceReference.java | 12 +-
.../core/webservices/ProviderWrapper.java | 181 ++++++++++---------
.../core/webservices/ProviderWrapperTest.java | 2 +-
.../client/WebServiceInjectionConfigurator.java | 13 +-
.../server/cxf/WebServiceInjectionTest.java | 74 +++++++-
5 files changed, 178 insertions(+), 104 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/3f1f037e/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JaxWsServiceReference.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JaxWsServiceReference.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JaxWsServiceReference.java
index b139075..3be9fb4 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JaxWsServiceReference.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JaxWsServiceReference.java
@@ -123,7 +123,10 @@ public class JaxWsServiceReference extends Reference {
}
}
- ProviderWrapper.beforeCreate(ports);
+ final WebServiceClientCustomizer customizer = SystemInstance.get().getComponent(WebServiceClientCustomizer.class);
+ final Properties configuration = properties == null ? new Properties() : properties;
+
+ ProviderWrapper.beforeCreate(ports, customizer, properties);
Service instance;
try {
instance = null;
@@ -145,9 +148,6 @@ public class JaxWsServiceReference extends Reference {
instance.setHandlerResolver(handlerResolver);
}
- final WebServiceClientCustomizer customizer = SystemInstance.get().getComponent(WebServiceClientCustomizer.class);
- final Properties configuration = properties == null ? new Properties() : properties;
-
final Object port;
if (referenceClass != null && !Service.class.isAssignableFrom(referenceClass)) {
final WebServiceFeature[] features = customizer == null ? null : customizer.features(serviceQName, configuration);
@@ -172,10 +172,6 @@ public class JaxWsServiceReference extends Reference {
portRefs);
ServiceRefData.putServiceRefData(port, serviceRefData);
- if (customizer != null) {
- customizer.customize(port, configuration);
- }
-
return port;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/3f1f037e/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/ProviderWrapper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/ProviderWrapper.java b/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/ProviderWrapper.java
index a7ae404..5c172dd 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/ProviderWrapper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/ProviderWrapper.java
@@ -18,6 +18,7 @@
package org.apache.openejb.core.webservices;
import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.core.ivm.naming.JaxWsServiceReference;
import org.apache.openejb.loader.IO;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
@@ -63,9 +64,9 @@ public class ProviderWrapper extends Provider {
// Magic to get our provider wrapper installed with the PortRefData
//
- private static ThreadLocal<ProviderWrapperData> threadPortRefs = new ThreadLocal<ProviderWrapperData>();
+ private static final ThreadLocal<ProviderWrapperData> threadPortRefs = new ThreadLocal<ProviderWrapperData>();
- public static void beforeCreate(final List<PortRefData> portRefData) {
+ public static void beforeCreate(final List<PortRefData> portRefData, final JaxWsServiceReference.WebServiceClientCustomizer customizer, final Properties properties) {
// Axis JAXWS api is non compliant and checks system property before classloader
// so we replace system property so this wrapper is selected. The original value
// is saved into an openejb property so we can load the class in the find method
@@ -83,7 +84,7 @@ public class ProviderWrapper extends Provider {
} else {
Thread.currentThread().setContextClassLoader(new ProviderClassLoader());
}
- threadPortRefs.set(new ProviderWrapperData(portRefData, oldClassLoader));
+ threadPortRefs.set(new ProviderWrapperData(portRefData, oldClassLoader, customizer, properties));
}
public static void afterCreate() {
@@ -94,10 +95,14 @@ public class ProviderWrapper extends Provider {
private static class ProviderWrapperData {
private final List<PortRefData> portRefData;
private final ClassLoader callerClassLoader;
+ private final JaxWsServiceReference.WebServiceClientCustomizer customizer;
+ private final Properties properties;
- public ProviderWrapperData(final List<PortRefData> portRefData, final ClassLoader callerClassLoader) {
+ public ProviderWrapperData(final List<PortRefData> portRefData, final ClassLoader callerClassLoader, final JaxWsServiceReference.WebServiceClientCustomizer customizer, final Properties properties) {
this.portRefData = portRefData;
this.callerClassLoader = callerClassLoader;
+ this.customizer = customizer;
+ this.properties = properties;
}
}
@@ -145,12 +150,12 @@ public class ProviderWrapper extends Provider {
final List<Element> referenceParameters) {
return (W3CEndpointReference) invoke21Delegate(delegate, createW3CEndpointReference,
- address,
- serviceName,
- portName,
- metadata,
- wsdlDocumentLocation,
- referenceParameters);
+ address,
+ serviceName,
+ portName,
+ metadata,
+ wsdlDocumentLocation,
+ referenceParameters);
}
public EndpointReference readEndpointReference(final Source source) {
@@ -164,15 +169,32 @@ public class ProviderWrapper extends Provider {
private class ServiceDelegateWrapper extends ServiceDelegate {
private final ServiceDelegate serviceDelegate;
+ private final JaxWsServiceReference.WebServiceClientCustomizer customizer;
+ private final Properties configuration;
public ServiceDelegateWrapper(final ServiceDelegate serviceDelegate) {
this.serviceDelegate = serviceDelegate;
+ final ProviderWrapperData providerWrapperData = threadPortRefs.get();
+ if (providerWrapperData != null) {
+ this.customizer = providerWrapperData.customizer;
+ this.configuration = providerWrapperData.properties;
+ } else {
+ this.customizer = null;
+ this.configuration = null;
+ }
+ }
+
+ private <T> T customizePort(final T port) {
+ if (customizer != null && configuration != null) {
+ customizer.customize(port, configuration);
+ }
+ return port;
}
public <T> T getPort(final QName portName, final Class<T> serviceEndpointInterface) {
final T t = serviceDelegate.getPort(portName, serviceEndpointInterface);
setProperties((BindingProvider) t, portName);
- return t;
+ return customizePort(t);
}
public <T> T getPort(final Class<T> serviceEndpointInterface) {
@@ -189,7 +211,7 @@ public class ProviderWrapper extends Provider {
}
setProperties((BindingProvider) t, qname);
- return t;
+ return customizePort(t);
}
public void addPort(final QName portName, final String bindingId, final String endpointAddress) {
@@ -211,32 +233,32 @@ public class ProviderWrapper extends Provider {
@SuppressWarnings({"unchecked"})
public <T> Dispatch<T> createDispatch(final QName portName, final Class<T> type, final Service.Mode mode, final WebServiceFeature... features) {
return (Dispatch<T>) invoke21Delegate(serviceDelegate, createDispatchInterface,
- portName,
- type,
- mode,
- features);
+ portName,
+ type,
+ mode,
+ features);
}
@SuppressWarnings({"unchecked"})
public Dispatch<Object> createDispatch(final QName portName, final JAXBContext context, final Service.Mode mode, final WebServiceFeature... features) {
return (Dispatch<Object>) invoke21Delegate(serviceDelegate, createDispatchJaxBContext,
- portName,
- context,
- mode,
- features);
+ portName,
+ context,
+ mode,
+ features);
}
@SuppressWarnings({"unchecked"})
public Dispatch<Object> createDispatch(
- final EndpointReference endpointReference,
- final JAXBContext context,
- final Service.Mode mode,
- final WebServiceFeature... features) {
+ final EndpointReference endpointReference,
+ final JAXBContext context,
+ final Service.Mode mode,
+ final WebServiceFeature... features) {
return (Dispatch<Object>) invoke21Delegate(serviceDelegate, createDispatchReferenceJaxB,
- endpointReference,
- context,
- mode,
- features);
+ endpointReference,
+ context,
+ mode,
+ features);
}
@SuppressWarnings({"unchecked"})
@@ -245,54 +267,42 @@ public class ProviderWrapper extends Provider {
final Service.Mode mode,
final WebServiceFeature... features) {
return (Dispatch<T>) invoke21Delegate(serviceDelegate, createDispatchReferenceClass,
- endpointReference,
- type,
- mode,
- features);
+ endpointReference,
+ type,
+ mode,
+ features);
}
@SuppressWarnings({"unchecked"})
public <T> T getPort(final QName portName, final Class<T> serviceEndpointInterface, final WebServiceFeature... features) {
- return (T) invoke21Delegate(serviceDelegate, serviceGetPortByQName,
- portName,
- serviceEndpointInterface,
- features);
+ return customizePort((T) invoke21Delegate(serviceDelegate, serviceGetPortByQName, portName, serviceEndpointInterface, features));
}
@SuppressWarnings({"unchecked"})
public <T> T getPort(final EndpointReference endpointReference, final Class<T> serviceEndpointInterface, final WebServiceFeature... features) {
- return (T) invoke21Delegate(serviceDelegate, serviceGetPortByEndpointReference,
- endpointReference,
- serviceEndpointInterface,
- features);
+ return customizePort((T) invoke21Delegate(serviceDelegate, serviceGetPortByEndpointReference, endpointReference, serviceEndpointInterface, features));
}
@SuppressWarnings({"unchecked"})
public <T> T getPort(final Class<T> serviceEndpointInterface, final WebServiceFeature... features) {
- return (T) invoke21Delegate(serviceDelegate, serviceGetPortByInterface,
- serviceEndpointInterface,
- features);
+ return customizePort((T) invoke21Delegate(serviceDelegate, serviceGetPortByInterface, serviceEndpointInterface, features));
}
public QName getServiceName() {
- final QName qName = serviceDelegate.getServiceName();
- return qName;
+ return serviceDelegate.getServiceName();
}
public Iterator<QName> getPorts() {
- final Iterator<QName> ports = serviceDelegate.getPorts();
- return ports;
+ return serviceDelegate.getPorts();
}
public URL getWSDLDocumentLocation() {
- final URL documentLocation = serviceDelegate.getWSDLDocumentLocation();
- return documentLocation;
+ return serviceDelegate.getWSDLDocumentLocation();
}
public HandlerResolver getHandlerResolver() {
- final HandlerResolver handlerResolver = serviceDelegate.getHandlerResolver();
- return handlerResolver;
+ return serviceDelegate.getHandlerResolver();
}
public void setHandlerResolver(final HandlerResolver handlerResolver) {
@@ -300,8 +310,7 @@ public class ProviderWrapper extends Provider {
}
public Executor getExecutor() {
- final Executor executor = serviceDelegate.getExecutor();
- return executor;
+ return serviceDelegate.getExecutor();
}
public void setExecutor(final Executor executor) {
@@ -530,12 +539,12 @@ public class ProviderWrapper extends Provider {
Method method = null;
try {
method = Provider.class.getMethod("createW3CEndpointReference",
- String.class,
- QName.class,
- QName.class,
- List.class,
- String.class,
- List.class);
+ String.class,
+ QName.class,
+ QName.class,
+ List.class,
+ String.class,
+ List.class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -544,9 +553,9 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = Provider.class.getMethod("getPort",
- EndpointReference.class,
- Class.class,
- WebServiceFeature[].class);
+ EndpointReference.class,
+ Class.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -564,10 +573,10 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("createDispatch",
- EndpointReference.class,
- JAXBContext.class,
- Service.Mode.class,
- WebServiceFeature[].class);
+ EndpointReference.class,
+ JAXBContext.class,
+ Service.Mode.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -576,10 +585,10 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("createDispatch",
- EndpointReference.class,
- Class.class,
- Service.Mode.class,
- WebServiceFeature[].class);
+ EndpointReference.class,
+ Class.class,
+ Service.Mode.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -588,10 +597,10 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("createDispatch",
- QName.class,
- JAXBContext.class,
- Service.Mode.class,
- WebServiceFeature[].class);
+ QName.class,
+ JAXBContext.class,
+ Service.Mode.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -600,10 +609,10 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("createDispatch",
- QName.class,
- Class.class,
- Service.Mode.class,
- WebServiceFeature[].class);
+ QName.class,
+ Class.class,
+ Service.Mode.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -612,9 +621,9 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("getPort",
- EndpointReference.class,
- Class.class,
- WebServiceFeature[].class);
+ EndpointReference.class,
+ Class.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -623,9 +632,9 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("getPort",
- QName.class,
- Class.class,
- WebServiceFeature[].class);
+ QName.class,
+ Class.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
@@ -634,8 +643,8 @@ public class ProviderWrapper extends Provider {
method = null;
try {
method = ServiceDelegate.class.getMethod("getPort",
- Class.class,
- WebServiceFeature[].class);
+ Class.class,
+ WebServiceFeature[].class);
} catch (final NoSuchMethodException e) {
// no-op
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/3f1f037e/container/openejb-core/src/test/java/org/apache/openejb/core/webservices/ProviderWrapperTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/core/webservices/ProviderWrapperTest.java b/container/openejb-core/src/test/java/org/apache/openejb/core/webservices/ProviderWrapperTest.java
index 230f257..7c7c99c 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/core/webservices/ProviderWrapperTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/core/webservices/ProviderWrapperTest.java
@@ -38,7 +38,7 @@ public class ProviderWrapperTest extends TestCase {
assertNotNull("provider is null", provider);
assertFalse("provider should not be an instance of ProviderWrapper", provider instanceof ProviderWrapper);
- ProviderWrapper.beforeCreate(null);
+ ProviderWrapper.beforeCreate(null, null, null);
try {
provider = Provider.provider();
assertNotNull("provider is null", provider);
http://git-wip-us.apache.org/repos/asf/tomee/blob/3f1f037e/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
index 7c242ce..422365b 100644
--- a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
@@ -28,8 +28,6 @@ import org.apache.openejb.config.sys.Openejb;
import org.apache.openejb.config.sys.Service;
import org.apache.openejb.core.ivm.naming.JaxWsServiceReference;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceFeature;
@@ -89,15 +87,14 @@ public class WebServiceInjectionConfigurator implements JaxWsServiceReference.We
@Override
public void customize(final Object o, final Properties properties) {
+ final Client client;
try {
- if (!javax.xml.ws.Service.class.isInstance(o)) {
- final Client client = ClientProxy.getClient(o);
- configure(client, properties);
- }
+ client = ClientProxy.getClient(o);
} catch (final Exception e) {
- Logger.getInstance(LogCategory.CXF, WebServiceInjectionConfigurator.class.getName())
- .error(e.getMessage(), e);
+ return;
}
+
+ configure(client, properties);
}
private void configure(final Client client, final Properties properties) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/3f1f037e/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
index c4f1606..4382fc7 100644
--- a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
+++ b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
@@ -21,6 +21,8 @@ import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.message.Message;
+import org.apache.cxf.ws.addressing.impl.MAPAggregatorImpl;
+import org.apache.cxf.ws.addressing.soap.MAPCodec;
import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.openejb.config.sys.MapFactory;
@@ -37,7 +39,16 @@ import org.junit.runner.RunWith;
import javax.ejb.Singleton;
import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.soap.AddressingFeature;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Iterator;
import java.util.Properties;
@@ -57,10 +68,20 @@ public class WebServiceInjectionTest {
@WebServiceRef
private MyWsApi api;
+ @WebServiceRef
+ private MyWebservice_Service service;
+
@Test
- public void checkInjection() {
+ public void checkConfiguration() {
// assertEquals("ok", api.test()); // local call so skip it but check config which is actually the only interesting thing
final Client client = ClientProxy.getClient(api);
+ testPort(client);
+
+ testPort(ClientProxy.getClient(service.getMyWsApi()));
+ testPortWithFeature(ClientProxy.getClient(service.getMyWsApi(new AddressingFeature())));
+ }
+
+ private void testPort(final Client client) {
assertNotNull(client);
assertEquals(2, client.getOutInterceptors().size());
assertEquals(1, client.getInInterceptors().size());
@@ -74,6 +95,23 @@ public class WebServiceInjectionTest {
assertEquals("b", WSS4JInInterceptor.class.cast(wss4jin).getProperties().get("a"));
}
+ private void testPortWithFeature(final Client client) {
+ assertNotNull(client);
+ assertEquals(4, client.getOutInterceptors().size());
+ assertEquals(3, client.getInInterceptors().size());
+ final Iterator<Interceptor<? extends Message>> Out = client.getOutInterceptors().iterator();
+ assertTrue(MAPAggregatorImpl.class.isInstance(Out.next()));
+ assertTrue(MAPCodec.class.isInstance(Out.next()));
+ assertTrue(LoggingOutInterceptor.class.isInstance(Out.next()));
+ final Interceptor<? extends Message> wss4jout = Out.next();
+ assertTrue(WSS4JOutInterceptor.class.isInstance(wss4jout));
+
+ final Iterator<Interceptor<? extends Message>> iteratorIn = client.getInInterceptors().iterator();
+ assertTrue(MAPAggregatorImpl.class.isInstance(iteratorIn.next()));
+ assertTrue(MAPCodec.class.isInstance(iteratorIn.next()));
+ assertTrue(WSS4JInInterceptor.class.isInstance(iteratorIn.next()));
+ }
+
@ApplicationConfiguration
public Properties props() {
// return new PropertiesBuilder().p("cxf.jaxws.client.out-interceptors", LoggingOutInterceptor.class.getName()).build();
@@ -82,6 +120,9 @@ public class WebServiceInjectionTest {
.p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.in-interceptors", "wss4jin")
.p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.out-interceptors", "loo,wss4jout")
+ .p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}myWebservice.in-interceptors", "wss4jin")
+ .p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}myWebservice.out-interceptors", "loo,wss4jout")
+
.p("loo", "new://Service?class-name=" + LoggingOutInterceptor.class.getName())
.p("wss4jin", "new://Service?class-name=" + WSS4JInInterceptorFactory.class.getName() + "&factory-name=create")
@@ -109,4 +150,35 @@ public class WebServiceInjectionTest {
return "ok";
}
}
+
+ @WebServiceClient(name = "MyWebservice")
+ public static class MyWebservice_Service extends Service {
+ public MyWebservice_Service() {
+ super(getWsdl(), new QName("http://cxf.server.openejb.apache.org/", "MyWebservice_Service"));
+ }
+
+ public MyWebservice_Service(final URL wsdlDocumentLocation, final QName serviceName) {
+ super(wsdlDocumentLocation, serviceName);
+ }
+
+ public MyWebservice_Service(final URL wsdlDocumentLocation, final QName serviceName, final WebServiceFeature... features) {
+ super(wsdlDocumentLocation, serviceName, features);
+ }
+
+
+ static URL getWsdl() throws WebServiceException {
+ try {
+ return new URL("http://wsdl");
+ } catch (final MalformedURLException ex) {
+ throw new WebServiceException(ex);
+ }
+ }
+
+ @WebEndpoint(name = "myWebserviceWS")
+ public MyWsApi getMyWsApi(final WebServiceFeature... features) {
+ return super.getPort(new QName("http://cxf.server.openejb.apache.org/", "myWebservice"), MyWsApi.class, features);
+ }
+
+
+ }
}