diff --git a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_POJO.java b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_POJO.java
index 92c18a8..a8c50d4 100644
--- a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_POJO.java
+++ b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_POJO.java
@@ -26,8 +26,10 @@ import static org.jboss.as.webservices.util.ASHelper.getEndpointClassName;
 import static org.jboss.as.webservices.util.ASHelper.getEndpointName;
 import static org.jboss.as.webservices.util.ASHelper.getJBossWebMetaData;
 import static org.jboss.as.webservices.util.ASHelper.getJaxwsDeployment;
+import static org.jboss.as.webservices.util.ASHelper.getJBossWebserviceMetaDataPortComponent;
 import static org.jboss.as.webservices.util.ASHelper.getRequiredAttachment;
 import static org.jboss.as.webservices.util.ASHelper.isJaxwsEndpoint;
+import static org.jboss.as.webservices.util.ASHelper.getWebserviceMetadataEJBEndpoint;
 import static org.jboss.as.webservices.util.WSAttachmentKeys.JMS_ENDPOINT_METADATA_KEY;
 import static org.jboss.as.webservices.util.WebMetaDataHelper.getServlets;
 
@@ -49,6 +51,7 @@ import org.jboss.as.server.deployment.Attachments;
 import org.jboss.as.server.deployment.DeploymentUnit;
 import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
 import org.jboss.as.server.deployment.annotation.CompositeIndex;
+import org.jboss.as.webservices.metadata.model.EJBEndpoint;
 import org.jboss.as.webservices.metadata.model.JAXWSDeployment;
 import org.jboss.as.webservices.metadata.model.POJOEndpoint;
 import org.jboss.jandex.ClassInfo;
@@ -56,8 +59,10 @@ import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.ServletMappingMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
 import org.jboss.msc.service.ServiceName;
+import org.jboss.ws.api.annotation.WebContext;
 import org.jboss.wsf.spi.metadata.jms.JMSEndpointMetaData;
 import org.jboss.wsf.spi.metadata.jms.JMSEndpointsMetaData;
+import org.jboss.wsf.spi.metadata.webservices.JBossPortComponentMetaData;
 
 /**
  * @author <a href="mailto:ropalka@redhat.com">Richard Opalka</a>
@@ -72,7 +77,7 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
     // @Override
     protected void processAnnotation(final DeploymentUnit unit, final EEModuleDescription moduleDescription)
             throws DeploymentUnitProcessingException {
-        final Map<String, EEModuleClassDescription> classDescriptionMap = new HashMap<String, EEModuleClassDescription>();
+        final Map<String, EEModuleClassDescription> classDescriptionMap = new java.util.HashMap<String, org.jboss.as.ee.component.EEModuleClassDescription>();
         final CompositeIndex index = unit.getAttachment(Attachments.COMPOSITE_ANNOTATION_INDEX);
         for (EEModuleClassDescription classDescritpion : moduleDescription.getClassDescriptions()) {
             if (isJaxwsEndpoint(classDescritpion, index) && !exclude(unit, classDescritpion)) {
@@ -82,7 +87,7 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
         final JBossWebMetaData jbossWebMD = getJBossWebMetaData(unit);
         final JAXWSDeployment jaxwsDeployment = getJaxwsDeployment(unit);
         if (jbossWebMD != null) {
-            final Set<String> matchedEps = new HashSet<String>();
+            final java.util.Set<String> matchedEps = new java.util.HashSet<String>();
             for (final ServletMetaData servletMD : getServlets(jbossWebMD)) {
                 final String endpointClassName = getEndpointClassName(servletMD);
                 final String endpointName = getEndpointName(servletMD);
@@ -119,12 +124,16 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
         for (EEModuleClassDescription classDescription : classDescriptionMap.values()) {
             ClassInfo classInfo = null;
             String serviceName = null;
+            String urlPattern = null;
+
+            // #1 use serviceName declared in a class annotation
             final ClassAnnotationInformation<WebService, WebServiceAnnotationInfo> annotationInfo = classDescription
                     .getAnnotationInformation(WebService.class);
             if (annotationInfo != null) {
                 WebServiceAnnotationInfo wsInfo = annotationInfo.getClassLevelAnnotations().get(0);
                 serviceName = wsInfo.getServiceName();
                 classInfo = (ClassInfo)wsInfo.getTarget();
+                urlPattern = getUrlPattern(classInfo, serviceName, wsInfo.getName());
             }
             final ClassAnnotationInformation<WebServiceProvider, WebServiceProviderAnnotationInfo> annotationProviderInfo = classDescription
                         .getAnnotationInformation(WebServiceProvider.class);
@@ -133,14 +142,40 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
                 serviceName = wsInfo.getServiceName();
                 classInfo = (ClassInfo)wsInfo.getTarget();
             }
+
+            // #2 Override serviceName with @WebContext.urlPattern
+            final ClassAnnotationInformation<WebContext, WebContextAnnotationInfo> annotationWebContext =
+                classDescription.getAnnotationInformation(WebContext.class);
+            if (annotationWebContext != null) {
+                WebContextAnnotationInfo wsInfo = annotationWebContext.getClassLevelAnnotations().get(0);
+                if (wsInfo != null && wsInfo.getUrlPattern().length() > 0) {
+                    urlPattern = wsInfo.getUrlPattern();
+                }
+            }
+
+            // #3 Override serviceName with the explicit urlPattern from port-component/port-component-uri in jboss-webservices.xml
+            EJBEndpoint ejbEndpoint = getWebserviceMetadataEJBEndpoint(jaxwsDeployment, classDescription.getClassName());
+            if (ejbEndpoint != null) {
+                JBossPortComponentMetaData portComponent = getJBossWebserviceMetaDataPortComponent(unit, ejbEndpoint.getName());
+                if (portComponent != null) {
+                    String portComponentURI = portComponent.getPortComponentURI();
+                    if (portComponentURI != null && portComponentURI.length() > 0) {
+                        urlPattern = portComponentURI;
+                    }
+                }
+            }
+
             if (classInfo != null) {
                 final String endpointClassName = classDescription.getClassName();
                 final ComponentDescription pojoComponent = createComponentDescription(unit, endpointClassName,
                         endpointClassName, endpointClassName);
                 final ServiceName pojoViewName = registerView(pojoComponent, endpointClassName);
+                if (urlPattern == null) {
+                    urlPattern = getUrlPattern(classInfo, serviceName);
+                }
                 // register POJO endpoint
-                final String urlPattern = getUrlPattern(classInfo, serviceName);
-                jaxwsDeployment.addEndpoint(new POJOEndpoint(endpointClassName, pojoViewName, urlPattern));
+                final String endpointUrlPattern = (urlPattern.startsWith("/") == false) ? "/" + urlPattern : urlPattern;
+                jaxwsDeployment.addEndpoint(new POJOEndpoint(endpointClassName, pojoViewName, endpointUrlPattern));
             }
         }
 
@@ -169,6 +204,15 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
         return "/" + (!serviceName.equals("") ? serviceName : clazz.name().local());
     }
 
+
+    private static String getUrlPattern(ClassInfo clazz, String serviceName, String name) {
+        String urlPattern = !isEmpty(name) ? name : clazz.name().local();
+        if (!isEmpty(serviceName)) {
+            urlPattern = serviceName + "/" + urlPattern;
+        }
+        return urlPattern;
+    }
+
     private static String getUrlPattern(final String servletName, final DeploymentUnit unit) {
         final JBossWebMetaData jbossWebMD = getJBossWebMetaData(unit);
         for (final ServletMappingMetaData servletMappingMD : jbossWebMD.getServletMappings()) {
@@ -189,4 +233,10 @@ public class WSIntegrationProcessorJAXWS_POJO extends AbstractIntegrationProcess
         }
         return false;
     }
+
+
+    private static boolean isEmpty(final String s) {
+        return s == null || s.length() == 0;
+    }
+
 }
diff --git a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInfo.java b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInfo.java
new file mode 100644
index 0000000..db24ef1
--- /dev/null
+++ b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInfo.java
@@ -0,0 +1,50 @@
+package org.jboss.as.webservices.deployers;
+
+/**
+ * User: rsearls
+ * Date: 7/17/14
+ */
+public class WebContextAnnotationInfo {
+    private final String authMethod;
+    private final String contextRoot;
+    private final boolean secureWSDLAccess;
+    private final String transportGuarantee;
+    private final String urlPattern;
+    private final String virtualHost;
+
+    public WebContextAnnotationInfo(final String authMethod, final String contextRoot, final boolean secureWSDLAccess, final String transportGuarantee, final String urlPattern, final String virtualHost) {
+
+        this.authMethod = authMethod;
+        this.contextRoot = contextRoot;
+        this.secureWSDLAccess = secureWSDLAccess;
+        this.transportGuarantee = transportGuarantee;
+        this.urlPattern = urlPattern;
+        this.virtualHost = virtualHost;
+
+    }
+
+    public String getAuthMethod() {
+        return authMethod;
+    }
+
+    public String getContextRoot() {
+        return contextRoot;
+    }
+
+    public boolean isSecureWSDLAccess() {
+        return secureWSDLAccess;
+    }
+
+    public String getTransportGuarantee() {
+        return transportGuarantee;
+    }
+
+    public String getUrlPattern() {
+        return urlPattern;
+    }
+
+    public String getVirtualHost() {
+        return virtualHost;
+    }
+
+}
diff --git a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInformationFactory.java b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInformationFactory.java
new file mode 100644
index 0000000..0db2d11
--- /dev/null
+++ b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebContextAnnotationInformationFactory.java
@@ -0,0 +1,43 @@
+package org.jboss.as.webservices.deployers;
+
+import org.jboss.ws.api.annotation.WebContext;
+
+import org.jboss.as.ee.metadata.ClassAnnotationInformationFactory;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationValue;
+import org.jboss.metadata.property.PropertyReplacer;
+
+/**
+ * User: rsearls
+ * Date: 7/17/14
+ */
+public class WebContextAnnotationInformationFactory extends
+    ClassAnnotationInformationFactory<WebContext, WebContextAnnotationInfo> {
+
+    protected WebContextAnnotationInformationFactory() {
+        super(org.jboss.ws.api.annotation.WebContext.class, null);
+    }
+
+    @Override
+    protected WebContextAnnotationInfo fromAnnotation(final AnnotationInstance annotationInstance, final PropertyReplacer propertyReplacer) {
+        String authMethodValue = asString(annotationInstance, "authMethod");
+        String contextRootValue = asString(annotationInstance, "contextRoot");
+        boolean secureWSDLAccessValue = asBoolean(annotationInstance, "secureWSDLAccessValue");
+        String transportGuaranteeValue = asString(annotationInstance, "transportGuarantee");
+        String urlPatternValue = asString(annotationInstance, "urlPattern");
+        String virtualHostValue = asString(annotationInstance, "virtualHost");
+        return new  WebContextAnnotationInfo(authMethodValue, contextRootValue,
+            secureWSDLAccessValue, transportGuaranteeValue, urlPatternValue, virtualHostValue);
+    }
+
+
+    private String asString(final AnnotationInstance annotation, String property) {
+        AnnotationValue value = annotation.value(property);
+        return value == null ? "" : value.asString();
+    }
+
+    private boolean asBoolean(final AnnotationInstance annotation, String property) {
+        AnnotationValue value = annotation.value(property);
+        return value == null ? false : Boolean.getBoolean(value.asString());
+    }
+}
diff --git a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebServiceAnnotationProcessor.java b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebServiceAnnotationProcessor.java
index 6247460..0d357e4 100644
--- a/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebServiceAnnotationProcessor.java
+++ b/webservices/server-integration/src/main/java/org/jboss/as/webservices/deployers/WebServiceAnnotationProcessor.java
@@ -50,6 +50,7 @@ public class WebServiceAnnotationProcessor implements DeploymentUnitProcessor {
         List<ClassAnnotationInformationFactory> factories = new ArrayList<ClassAnnotationInformationFactory>();
         factories.add(new WebServiceAnnotationInformationFactory());
         factories.add(new WebServiceProviderAnnotationInformationFactory());
+        factories.add(new WebContextAnnotationInformationFactory());
         this.factories = Collections.unmodifiableList(factories);
     }
 
diff --git a/webservices/server-integration/src/main/java/org/jboss/as/webservices/util/ASHelper.java b/webservices/server-integration/src/main/java/org/jboss/as/webservices/util/ASHelper.java
index a714633..b1e545f 100644
--- a/webservices/server-integration/src/main/java/org/jboss/as/webservices/util/ASHelper.java
+++ b/webservices/server-integration/src/main/java/org/jboss/as/webservices/util/ASHelper.java
@@ -27,6 +27,7 @@ import static org.jboss.as.webservices.util.DotNames.JAXWS_SERVICE_CLASS;
 import static org.jboss.as.webservices.util.DotNames.WEB_SERVICE_ANNOTATION;
 import static org.jboss.as.webservices.util.DotNames.WEB_SERVICE_PROVIDER_ANNOTATION;
 import static org.jboss.as.webservices.util.WSAttachmentKeys.JAXWS_ENDPOINTS_KEY;
+import static org.jboss.as.webservices.util.WSAttachmentKeys.JBOSS_WEBSERVICES_METADATA_KEY;
 
 import java.lang.reflect.Modifier;
 import java.util.Collections;
@@ -68,6 +69,8 @@ import org.jboss.msc.service.ServiceController;
 import org.jboss.msc.service.ServiceName;
 import org.jboss.ws.common.integration.WSHelper;
 import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.metadata.webservices.JBossPortComponentMetaData;
+import org.jboss.wsf.spi.metadata.webservices.JBossWebservicesMetaData;
 
 /**
  * JBoss AS integration helper class.
@@ -297,6 +300,51 @@ public final class ASHelper {
     }
 
     /**
+     * Return a named port-component from the jboss-webservices.xml
+     * @param unit
+     * @param name
+     * @return
+     */
+    public static JBossPortComponentMetaData getJBossWebserviceMetaDataPortComponent(
+        final DeploymentUnit unit, final String name) {
+
+        if (name != null) {
+            final JBossWebservicesMetaData jbossWebserviceMetaData = unit.getAttachment(JBOSS_WEBSERVICES_METADATA_KEY);
+
+            if (jbossWebserviceMetaData != null) {
+                JBossPortComponentMetaData[] portComponent = jbossWebserviceMetaData.getPortComponents();
+
+                if (portComponent != null) {
+                    for (JBossPortComponentMetaData component : portComponent) {
+                        if (name.equals(component.getEjbName())) {
+                            return component;
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns an EJBEndpoint based upon fully qualified classname.
+     * @param jaxwsDeployment
+     * @param className
+     * @return
+     */
+    public static EJBEndpoint getWebserviceMetadataEJBEndpoint(final JAXWSDeployment jaxwsDeployment,
+                                                               final String className) {
+
+        java.util.List<EJBEndpoint> ejbEndpointList = jaxwsDeployment.getEjbEndpoints();
+        for (EJBEndpoint ejbEndpoint : ejbEndpointList) {
+            if (className.equals(ejbEndpoint.getClassName())) {
+                return ejbEndpoint;
+            }
+        }
+        return null;
+    }
+
+    /**
      * Returns context root associated with webservice deployment.
      *
      * If there's application.xml descriptor provided defining nested web module, then context root defined there will be
