Fixes #23148
Fixes #23147
Server was not finding WSDL when contained within a WAR in an EAR
Signed-off-by: smillidge <steve.millidge@payara.fish>
diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/BundleDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/BundleDescriptor.java
index 8dd5802..c75361b 100644
--- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/BundleDescriptor.java
+++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/BundleDescriptor.java
@@ -643,7 +643,9 @@
return DEPLOYMENT_DESCRIPTOR_DIR;
}
-
+ public String getRawModuleID() {
+ return moduleID;
+ }
/**
* @return the wsdl directory location inside the archive file
*/
diff --git a/appserver/webservices/jsr109-impl/src/main/java/org/glassfish/webservices/WsUtil.java b/appserver/webservices/jsr109-impl/src/main/java/org/glassfish/webservices/WsUtil.java
index 05ee71b..1656b96 100644
--- a/appserver/webservices/jsr109-impl/src/main/java/org/glassfish/webservices/WsUtil.java
+++ b/appserver/webservices/jsr109-impl/src/main/java/org/glassfish/webservices/WsUtil.java
@@ -544,9 +544,21 @@
WebServiceContractImpl wscImpl = WebServiceContractImpl.getInstance();
ServerEnvironment se = wscImpl.getServerEnvironment();
+ // First look in the root of the deployment
File appFile = new File(se.getApplicationRepositoryPath(), serviceRef.getBundleDescriptor().getApplication().getAppName());
if (appFile.exists()) {
- retVal = new File(appFile, serviceRef.getWsdlFileUri()).toURL();
+ File wsdlFile = new File(appFile, serviceRef.getWsdlFileUri());
+ retVal = wsdlFile.toURI().toURL();
+ if (!wsdlFile.exists()) {
+ // try the module path for example when we are in an EAR file
+ wsdlFile = new File(serviceRef.getBundleDescriptor().getRawModuleID(), serviceRef.getWsdlFileUri());
+ if (!wsdlFile.exists()) {
+ // finally try to load via classloader
+ retVal = Thread.currentThread().getContextClassLoader().getResource(serviceRef.getWsdlFileUri());
+ } else {
+ retVal = wsdlFile.toURI().toURL();
+ }
+ }
} else {
// Fix for 6853656 and 6868695
// In case of appclients the wsdl will be in the classpath
@@ -556,7 +568,7 @@
retVal = Thread.currentThread().getContextClassLoader().getResource(serviceRef.getWsdlFileUri());
}
} else {
- retVal = new File(serviceRef.getWsdlFileUri()).toURL();
+ retVal = new File(serviceRef.getWsdlFileUri()).toURI().toURL();
}
}
}