diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceWSDLLocationRule.java b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceWSDLLocationRule.java
index 78a33a7..fb7db74 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceWSDLLocationRule.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceWSDLLocationRule.java
@@ -167,6 +167,9 @@
                             JAXWSCoreMessages.WEBSERVICE_WSDL_LOCATION_NO_SERVICE_NAME,
                             new Object[] {serviceQName.getLocalPart(), wsdlLocation}));
                 }
+            } else {
+                printWarning(wsdlLocationValue.getPosition(), JAXWSCoreMessages.bind(
+                        JAXWSCoreMessages.WEBSERVICE_WSDL_LOCATION_UNABLE_TO_LOCATE, wsdlLocation));
             }
         } catch (MalformedURLException murle) {
             printError(wsdlLocationValue.getPosition(), murle.getLocalizedMessage());
@@ -176,7 +179,6 @@
         }
     }
 
-    @SuppressWarnings("unchecked")
     private void validateBinding(Binding binding, ClassDeclaration classDeclaration,
             AnnotationMirror webService, String wsdlLocation) {
         String style = javax.jws.soap.SOAPBinding.Style.DOCUMENT.name();
@@ -189,11 +191,11 @@
             }
         }
 
-        List extensibilityElements =  binding.getExtensibilityElements();
+        List<?> extensibilityElements =  binding.getExtensibilityElements();
         for (Object elementExtensible : extensibilityElements) {
             if (elementExtensible instanceof SOAPBinding) {
                 SOAPBinding soapBinding = (SOAPBinding) elementExtensible;
-                if (style.compareToIgnoreCase(soapBinding.getStyle()) != 0) {
+                if (soapBinding.getStyle() != null && style.compareToIgnoreCase(soapBinding.getStyle()) != 0) {
                     printError(soapBindingAnnotation == null ? webService.getPosition()
                             : soapBindingAnnotation.getPosition(),
                             JAXWSCoreMessages.bind(JAXWSCoreMessages.WEBSERVICE_WSDL_LOCATION_SOAP_BINDING_STYLE,
@@ -202,7 +204,7 @@
             }
             if (elementExtensible instanceof SOAP12Binding) {
                 SOAP12Binding soap12Binding = (SOAP12Binding) elementExtensible;
-                if (style.compareToIgnoreCase(soap12Binding.getStyle()) != 0) {
+                if (soap12Binding.getStyle() != null && style.compareToIgnoreCase(soap12Binding.getStyle()) != 0) {
                     printError(soapBindingAnnotation == null ? webService.getPosition()
                             : soapBindingAnnotation.getPosition(),
                             JAXWSCoreMessages.bind(JAXWSCoreMessages.WEBSERVICE_WSDL_LOCATION_SOAP_BINDING_STYLE,
@@ -262,7 +264,7 @@
         return methodDeclaration.getSimpleName();
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     private Service getService(Definition definition, QName serviceQName) {
         Map servicesMap = definition.getServices();
         Set<Map.Entry> servicesSet = servicesMap.entrySet();
@@ -275,7 +277,7 @@
         return null;
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     private Port getPort(Service service, String portName) {
         Map portsMap = service.getPorts();
         Set<Map.Entry> portsSet = portsMap.entrySet();
diff --git a/features/org.eclipse.jst.ws.jaxws.feature/feature.xml b/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
index 145ac76..f623142 100644
--- a/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
+++ b/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.ws.jaxws.feature"
       label="%featureName"
-      version="1.1.100.qualifier"
+      version="1.2.0.qualifier"
       provider-name="%featureProvider"
       plugin="org.eclipse.jst.ws.jaxws.core"
       image="eclipse_update_120.jpg"
diff --git a/features/org.eclipse.jst.ws.jaxws_sdk.feature/feature.xml b/features/org.eclipse.jst.ws.jaxws_sdk.feature/feature.xml
index be7c4a4..91c174d 100644
--- a/features/org.eclipse.jst.ws.jaxws_sdk.feature/feature.xml
+++ b/features/org.eclipse.jst.ws.jaxws_sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.ws.jaxws_sdk.feature"
       label="%featureName"
-      version="1.1.100.qualifier"
+      version="1.2.0.qualifier"
       provider-name="%featureProvider"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.license"
