WsUtilpublic class WsUtil extends Object Web service related utilities. |
Fields Summary |
---|
public static final String | CLIENT_TRANSPORT_LOG_PROPERTY | public static final String | ENDPOINT_ADDRESS_PARAM_NAME | public final String | WSDL_IMPORT_NAMESPACE_PARAM_NAME | public static final String | WSDL_IMPORT_LOCATION_PARAM_NAME | public static final String | WSDL_INCLUDE_LOCATION_PARAM_NAME | public final String | SCHEMA_IMPORT_NAMESPACE_PARAM_NAME | public static final String | SCHEMA_IMPORT_LOCATION_PARAM_NAME | public static final String | SCHEMA_INCLUDE_LOCATION_PARAM_NAME | private static final String | ONE_WAY_OPERATION | private static final String | CLIENT_BAD_REQUEST | private static final String | SECURITY_POLICY_NAMESPACE_URI | private static Logger | logger | private static Logger | deploymentLogger | private com.sun.xml.rpc.spi.JaxRpcObjectFactory | rpcFactory | private static Logger | _logger | static com.sun.enterprise.util.LocalStringManagerImpl | localStrings | private static boolean | readProperty | private static com.sun.xml.messaging.saaj.soap.ExpressMessageFactoryImpl | soapMsgFactory | private static final String | EXPRESS_MSG_FACTORY |
Constructors Summary |
---|
public WsUtil()
rpcFactory = JaxRpcObjectFactory.newInstance();
|
Methods Summary |
---|
private void | addFileAndDecendents(java.io.File file, java.util.ArrayList cumulative)
try {
//JAX-WS has trouble with "..'s" in paths here
file = file.getCanonicalFile();
} catch (IOException e) {
//hope JAX-WS can deal with the original path
}
//make sure we have not processed this file before
URL id = file.toURL();
boolean alreadyProcessed = false;
for (SDDocumentSource source: cumulative) {
if ((id.toString()).equals(source.getSystemId().toString())) {
alreadyProcessed = true;
break;
}
}
if (!alreadyProcessed) {
cumulative.add(0, SDDocumentSource.create(id));
getWsdlsAndSchemas(file, cumulative);
}
| private void | addImportsAndIncludes(org.w3c.dom.NodeList list, java.util.Collection result, java.lang.String namespace, java.lang.String location)
for(int i=0; i<list.getLength(); i++) {
String givenLocation = null;
Node element = list.item(i);
NamedNodeMap attrs = element.getAttributes();
Node n= attrs.getNamedItem(location);
if(n != null) {
givenLocation = n.getNodeValue();
}
if((givenLocation == null) ||
((givenLocation != null) && givenLocation.startsWith("http"))) {
continue;
}
Import imp = new Import();
imp.setLocation(givenLocation);
if(namespace != null) {
n = attrs.getNamedItem(namespace);
if(n != null) {
imp.setNamespace(n.getNodeValue());
}
}
result.add(imp);
}
return;
| private java.lang.String | addJarsToClassPath(java.lang.String cp, java.lang.String dirName)
try {
File dir = new File(dirName);
if(dir.exists()) {
Iterator fileSetIter = com.sun.enterprise.util.FileUtil.getAllFilesUnder(dir, new JarFilter(), false).iterator();
while(fileSetIter.hasNext()) {
cp+=(File.pathSeparator+((File)fileSetIter.next()).getAbsolutePath());
}
}
} catch (IOException ioex) {
throw new IASDeploymentException("IOException : " + ioex.getMessage() +
" when trying to get list of files under " + dirName);
}
return cp;
| private java.lang.String | addModuleDirsToClassPath(java.lang.String cp, java.lang.String dirName)
File dir = new File(dirName);
if (dir.exists()) {
cp+=File.pathSeparator+ dir.getAbsolutePath();
}
return cp;
| private void | checkCatalog(com.sun.enterprise.deployment.BundleDescriptor bundle, com.sun.enterprise.deployment.WebService ws, java.io.File moduleDir)
// If no catalog file is present, return
File catalogFile = new File(moduleDir,
bundle.getDeploymentDescriptorDir() +
File.separator + "jax-ws-catalog.xml");
if(!catalogFile.exists()) {
return;
}
resolveCatalog(catalogFile, ws.getWsdlFileUri(), ws);
| public void | configureHandlerChain(com.sun.enterprise.deployment.ServiceReferenceDescriptor serviceRef, javax.xml.rpc.Service service, java.util.Iterator ports, java.lang.ClassLoader loader)
if( !serviceRef.hasHandlers() ) {
return;
}
HandlerRegistry registry = service.getHandlerRegistry();
while(ports.hasNext()) {
QName nextPort = (QName) ports.next();
List handlerChain = registry.getHandlerChain(nextPort);
Collection soapRoles = new HashSet();
for(Iterator iter = serviceRef.getHandlers().iterator();
iter.hasNext();) {
WebServiceHandler nextHandler = (WebServiceHandler) iter.next();
Collection portNames = nextHandler.getPortNames();
if( portNames.isEmpty() ||
portNames.contains(nextPort.getLocalPart()) ) {
soapRoles.addAll(nextHandler.getSoapRoles());
HandlerInfo handlerInfo =
createHandlerInfo(nextHandler, loader);
handlerChain.add(handlerInfo);
}
}
}
| public void | configureJAXWSClientHandlers(javax.xml.ws.Service svcClass, com.sun.enterprise.deployment.ServiceReferenceDescriptor desc)
// Create a resolver and get all ports for the Service
HandlerResolverImpl resolver = new HandlerResolverImpl();
Set<String> roles = new HashSet();
Iterator<QName> ports = svcClass.getPorts();
// Set handler chain for each port of this service
while(ports.hasNext()) {
QName nextPort = ports.next();
LinkedList handlerChainList = desc.getHandlerChain();
for(Iterator<WebServiceHandlerChain> i = handlerChainList.iterator(); i.hasNext();) {
WebServiceHandlerChain hc = i.next();
// Apply the serviceName / portName filter to ensure
// that the handlers are for this service and this port
if(!patternsMatch(hc, desc.getServiceName(), nextPort, null)) {
continue;
}
// Decide for what all protocols this handler should be applied
ArrayList<String> protocols = new ArrayList<String>();
if(hc.getProtocolBindings() == null) {
// No protocol bindings given in descriptor; apply this handler
// for all protocols
protocols.add(HTTPBinding.HTTP_BINDING);
protocols.add(SOAPBinding.SOAP11HTTP_BINDING);
protocols.add(SOAPBinding.SOAP12HTTP_BINDING);
protocols.add(SOAPBinding.SOAP11HTTP_MTOM_BINDING);
protocols.add(SOAPBinding.SOAP12HTTP_MTOM_BINDING);
} else {
// protocols specified; handlers are for only these protocols
String specifiedProtocols = hc.getProtocolBindings();
if((specifiedProtocols.indexOf(HTTPBinding.HTTP_BINDING) != -1) ||
(specifiedProtocols.indexOf(WebServiceEndpoint.XML_TOKEN) != -1)) {
protocols.add(HTTPBinding.HTTP_BINDING);
}
if((specifiedProtocols.indexOf(SOAPBinding.SOAP11HTTP_BINDING) != -1) ||
(specifiedProtocols.indexOf(WebServiceEndpoint.SOAP11_TOKEN) != -1)) {
protocols.add(SOAPBinding.SOAP11HTTP_BINDING);
}
if((specifiedProtocols.indexOf(SOAPBinding.SOAP12HTTP_BINDING) != -1) ||
(specifiedProtocols.indexOf(WebServiceEndpoint.SOAP12_TOKEN) != -1)) {
protocols.add(SOAPBinding.SOAP12HTTP_BINDING);
}
if((specifiedProtocols.indexOf(SOAPBinding.SOAP11HTTP_MTOM_BINDING) != -1) ||
(specifiedProtocols.indexOf(WebServiceEndpoint.SOAP11_MTOM_TOKEN) != -1)) {
protocols.add(SOAPBinding.SOAP11HTTP_MTOM_BINDING);
}
if((specifiedProtocols.indexOf(SOAPBinding.SOAP12HTTP_MTOM_BINDING) != -1) ||
(specifiedProtocols.indexOf(WebServiceEndpoint.SOAP12_MTOM_TOKEN) != -1)) {
protocols.add(SOAPBinding.SOAP12HTTP_MTOM_BINDING);
}
}
// Iterate through all handlers that have been configured
List<WebServiceHandler> handlersList = hc.getHandlers();
// From this list, remove those handlers that have port-name that is different
// than the current port
for(WebServiceHandler thisOne : handlersList) {
Collection portNames = thisOne.getPortNames();
if(!portNames.isEmpty() &&
!portNames.contains(nextPort.getLocalPart())) {
handlersList.remove(thisOne);
}
}
// Now you have the handlers that need to be added; process them
List<Handler> handlerInfo = processConfiguredHandlers(handlersList, roles);
// Now you have the handler list; Set it in resolver;
// one set for each protocol
for(Iterator<String> s = protocols.iterator(); s.hasNext();) {
javax.xml.ws.handler.PortInfo portInfo;
portInfo = new PortInfoImpl(BindingID.parse(s.next()),
nextPort, desc.getServiceName());
resolver.setHandlerChain(portInfo, handlerInfo);
}
}
}
// Now that processing of all handlers is over, set HandlerResolver for
// the service
svcClass.setHandlerResolver(resolver);
//XXX TODO : What to do with soap roles on client side ?
| public void | configureJAXWSServiceHandlers(com.sun.enterprise.deployment.WebServiceEndpoint ep, java.lang.String bindingId, com.sun.xml.ws.api.WSBinding bindingObj)
// No handler chains; do nothing
if(!ep.hasHandlerChain()) {
return;
}
LinkedList handlerChainList = ep.getHandlerChain();
List<Handler> finalHandlerList = new ArrayList<Handler>();
Set<String> roles = new HashSet();
for(Iterator<WebServiceHandlerChain> i = handlerChainList.iterator(); i.hasNext();) {
WebServiceHandlerChain hc = i.next();
// Apply the serviceName / portName / bindings filter to ensure
// that the handlers are for this endpoint
if(!patternsMatch(hc, ep.getServiceName(), ep.getWsdlPort(), bindingId)) {
continue;
}
// OK - this handler has to be configured for this endpoint
// Iterate through all handlers that have been configured
List<Handler> handlerInfo = processConfiguredHandlers(hc.getHandlers(), roles);
finalHandlerList.addAll(handlerInfo);
}
// Processing of all handlers over;
// set final list of handler in RuntimeEndpointInfo
bindingObj.setHandlerChain(finalHandlerList);
// Set soap roles for soap bindings only
if(bindingObj instanceof javax.xml.ws.soap.SOAPBinding) {
((javax.xml.ws.soap.SOAPBinding)bindingObj).setRoles(roles);
}
| public javax.xml.rpc.Service | createConfiguredService(com.sun.enterprise.deployment.ServiceReferenceDescriptor desc)
final ServiceReferenceDescriptor serviceRef = desc;
javax.xml.rpc.Service service = null;
try {
// Configured service can be created with any kind of URL.
// Since resolving it might require file system access,
// do operation in a doPrivivileged block. JAXRPC RI should
// probably have the doPrivileged as well.
final URL wsdlFileURL = privilegedGetServiceRefWsdl(serviceRef);
final QName serviceName = serviceRef.getServiceName();
final ServiceFactory serviceFactory = ServiceFactory.newInstance();
service = (javax.xml.rpc.Service)
java.security.AccessController.doPrivileged
(new java.security.PrivilegedExceptionAction() {
public java.lang.Object run() throws Exception {
return serviceFactory.createService
(wsdlFileURL, serviceName);
}
});
} catch(PrivilegedActionException pae) {
logger.log(Level.WARNING, "", pae);
Exception e = new Exception();
e.initCause(pae.getCause());
throw e;
}
return service;
| public javax.xml.rpc.handler.HandlerInfo | createHandlerInfo(com.sun.enterprise.deployment.WebServiceHandler handler, java.lang.ClassLoader loader)
QName[] headers = new QName[handler.getSoapHeaders().size()];
int i = 0;
for(Iterator iter = handler.getSoapHeaders().iterator();
iter.hasNext();) {
headers[i] = (QName) iter.next();
i++;
}
Map properties = new HashMap();
for(Iterator iter = handler.getInitParams().iterator();
iter.hasNext();) {
NameValuePairDescriptor next = (NameValuePairDescriptor)
iter.next();
properties.put(next.getName(), next.getValue());
}
Class handlerClass = loader.loadClass(handler.getHandlerClass());
return new HandlerInfo(handlerClass, properties, headers);
| private javax.xml.transform.Templates | createTemplatesFor(java.util.Collection endpoints, java.util.Collection wsdlRelativeImports, java.util.Collection wsdlIncludes, java.util.Collection schemaRelativeImports, java.util.Collection schemaIncludes)Create an xslt template for transforming the packaged webservice
WSDL to a final WSDL.
// create the stylesheet
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(bos, "UTF-8");
writer.write("<xsl:transform version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\">\n");
int wsdlImportNum = 0;
for(Iterator iter = wsdlRelativeImports.iterator(); iter.hasNext();) {
Import next = (Import) iter.next();
String importNamespaceParam =
WSDL_IMPORT_NAMESPACE_PARAM_NAME + wsdlImportNum;
String importLocationParam =
WSDL_IMPORT_LOCATION_PARAM_NAME + wsdlImportNum;
writer.write("<xsl:param name=\"" + importNamespaceParam + "\"/>\n");
writer.write("<xsl:param name=\"" + importLocationParam + "\"/>\n");
writer.write("<xsl:template match=\"/\"><xsl:apply-templates mode=\"copy\"/></xsl:template>\n");
writer.write("<xsl:template match=\"wsdl:definitions/wsdl:import[@location='");
writer.write(next.getLocation());
writer.write("']\" mode=\"copy\">");
writer.write("<wsdl:import>");
writer.write("<xsl:attribute name=\"namespace\"><xsl:value-of select=\"$" + importNamespaceParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("<xsl:attribute name=\"location\"><xsl:value-of select=\"$" + importLocationParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("</wsdl:import></xsl:template>");
wsdlImportNum++;
}
int wsdlIncludeNum = 0;
for(Iterator iter = wsdlIncludes.iterator(); iter.hasNext();) {
Import next = (Import) iter.next();
String importLocationParam =
WSDL_INCLUDE_LOCATION_PARAM_NAME + wsdlIncludeNum;
writer.write("<xsl:param name=\"" + importLocationParam + "\"/>\n");
writer.write("<xsl:template match=\"/\"><xsl:apply-templates mode=\"copy\"/></xsl:template>\n");
writer.write("<xsl:template match=\"wsdl:definitions/wsdl:include[@location='");
writer.write(next.getLocation());
writer.write("']\" mode=\"copy\">");
writer.write("<wsdl:include>");
writer.write("<xsl:attribute name=\"location\"><xsl:value-of select=\"$" + importLocationParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("</wsdl:include></xsl:template>");
wsdlIncludeNum++;
}
int schemaImportNum = 0;
for(Iterator iter = schemaRelativeImports.iterator(); iter.hasNext();) {
Import next = (Import) iter.next();
String importNamespaceParam =
SCHEMA_IMPORT_NAMESPACE_PARAM_NAME + schemaImportNum;
String importLocationParam =
SCHEMA_IMPORT_LOCATION_PARAM_NAME + schemaImportNum;
writer.write("<xsl:param name=\"" + importNamespaceParam + "\"/>\n");
writer.write("<xsl:param name=\"" + importLocationParam + "\"/>\n");
writer.write("<xsl:template match=\"/\"><xsl:apply-templates mode=\"copy\"/></xsl:template>\n");
writer.write("<xsl:template match=\"wsdl:definitions/wsdl:types/xsd:schema/xsd:import[@schemaLocation='");
writer.write(next.getLocation());
writer.write("']\" mode=\"copy\">");
writer.write("<xsd:import>");
writer.write("<xsl:attribute name=\"namespace\"><xsl:value-of select=\"$" + importNamespaceParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("<xsl:attribute name=\"schemaLocation\"><xsl:value-of select=\"$" + importLocationParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("</xsd:import></xsl:template>");
schemaImportNum++;
}
int schemaIncludeNum = 0;
for(Iterator iter = schemaIncludes.iterator(); iter.hasNext();) {
Import next = (Import) iter.next();
String importLocationParam =
SCHEMA_INCLUDE_LOCATION_PARAM_NAME + schemaIncludeNum;
writer.write("<xsl:param name=\"" + importLocationParam + "\"/>\n");
writer.write("<xsl:template match=\"/\"><xsl:apply-templates mode=\"copy\"/></xsl:template>\n");
writer.write("<xsl:template match=\"wsdl:definitions/wsdl:types/xsd:schema/xsd:include[@schemaLocation='");
writer.write(next.getLocation());
writer.write("']\" mode=\"copy\">");
writer.write("<xsd:include>");
writer.write("<xsl:attribute name=\"schemaLocation\"><xsl:value-of select=\"$" + importLocationParam + "\"/>");
writer.write("</xsl:attribute>");
writer.write("</xsd:include></xsl:template>");
schemaIncludeNum++;
}
int endpointNum = 0;
for(Iterator iter = endpoints.iterator(); iter.hasNext();) {
WebServiceEndpoint endpoint = (WebServiceEndpoint) iter.next();
if( !endpoint.hasWsdlPort() ) {
throw new Exception("No WSDL port specified for endpoint " +
endpoint.getEndpointName());
}
if( !endpoint.hasServiceName() ) {
throw new Exception("Runtime settings error. Cannot find " +
"service name for endpoint " +
endpoint.getEndpointName());
}
String actualAddressParam =
ENDPOINT_ADDRESS_PARAM_NAME + endpointNum;
writer.write("<xsl:param name=\"" + actualAddressParam + "\"/>\n");
writer.write("<xsl:template match=\"/\"><xsl:apply-templates mode=\"copy\"/></xsl:template>\n");
writer.write("<xsl:template match=\"wsdl:definitions[@targetNamespace='");
writer.write(endpoint.getServiceName().getNamespaceURI());
writer.write("']/wsdl:service[@name='");
writer.write(endpoint.getServiceName().getLocalPart());
writer.write("']/wsdl:port[@name='");
writer.write(endpoint.getWsdlPort().getLocalPart());
writer.write("']/"+endpoint.getSoapAddressPrefix()+":address\" mode=\"copy\">");
writer.write("<"+endpoint.getSoapAddressPrefix()+":address><xsl:attribute name=\"location\"><xsl:value-of select=\"$" + actualAddressParam + "\"/>");
writer.write("</xsl:attribute></"+endpoint.getSoapAddressPrefix()+":address></xsl:template>");
endpointNum++;
}
writer.write("<xsl:template match=\"@*|node()\" mode=\"copy\"><xsl:copy><xsl:apply-templates select=\"@*\" mode=\"copy\"/><xsl:apply-templates mode=\"copy\"/></xsl:copy></xsl:template>\n");
writer.write("</xsl:transform>\n");
writer.close();
byte[] stylesheet = bos.toByteArray();
if( logger.isLoggable(Level.FINE) ) {
logger.fine(new String(stylesheet));
}
Source stylesheetSource =
new StreamSource(new ByteArrayInputStream(stylesheet));
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Templates templates = transformerFactory.newTemplates(stylesheetSource);
return templates;
| public void | doPostConstruct(java.lang.Class impl, java.lang.Object implObj)
invokeServiceMethod(javax.annotation.PostConstruct.class, impl,
implObj);
| public void | doPreDestroy(com.sun.enterprise.deployment.WebServiceEndpoint ep, java.lang.ClassLoader loader)
// Call @PreDestroy in endpoint, if any
try {
Class impl = Class.forName(ep.getServletImplClass(),
true, loader);
invokeServiceMethod(javax.annotation.PreDestroy.class, impl,
impl.newInstance());
} catch (Throwable ex) {
logger.log(Level.SEVERE, "Class " + ep.getServletImplClass() +
"not found during PreDestroy processing", ex);
}
// Call @PreDestroy in the handlers if any
if(!ep.hasHandlerChain()) {
return;
}
for(Iterator<WebServiceHandlerChain> hc = ep.getHandlerChain().iterator();
hc.hasNext();) {
WebServiceHandlerChain thisHc = hc.next();
for(Iterator<WebServiceHandler> h = thisHc.getHandlers().iterator();
h.hasNext();) {
WebServiceHandler thisHandler = h.next();
try {
Class handlerClass = Class.forName(thisHandler.getHandlerClass(),
true, loader);
invokeServiceMethod(javax.annotation.PreDestroy.class, handlerClass,
handlerClass.newInstance());
} catch (Throwable ex) {
logger.log(Level.SEVERE, "Handler class " + thisHandler.getHandlerClass() +
"not found during PreDestroy processing", ex);
}
}
}
| public void | downloadFile(java.net.URL httpUrl, java.io.File toFile)
InputStream is = null;
FileOutputStream os = null;
try {
if(!toFile.createNewFile()) {
throw new Exception("Unable to create new File " + toFile.getAbsolutePath());
}
is = httpUrl.openStream();
os = new FileOutputStream(toFile, true);
int readCount;
byte[] buffer = new byte[10240]; // Read 10KB at a time
while(true) {
readCount = is.read(buffer, 0, 10240);
if(readCount != -1) {
os.write(buffer, 0, readCount);
} else {
break;
}
}
} finally {
if(is != null) {
is.close();
}
if(os != null) {
os.flush();
os.close();
}
}
| private void | downloadWsdlsAndSchemas(com.sun.enterprise.deployment.WebService ws, java.net.URL httpUrl, java.io.File wsdlDir)
// First make required directories and download this wsdl file
wsdlDir.mkdirs();
String fileName = httpUrl.toString().substring(httpUrl.toString().lastIndexOf("/")+1);
File toFile = new File(wsdlDir.getAbsolutePath()+File.separator+fileName);
downloadFile(httpUrl, toFile);
// Get a list of wsdl and schema relative imports in this wsdl
Collection<Import> wsdlRelativeImports = new HashSet();
Collection<Import> schemaRelativeImports = new HashSet();
Collection<Import> wsdlIncludes = new HashSet();
Collection<Import> schemaIncludes = new HashSet();
parseRelativeImports(httpUrl, wsdlRelativeImports, wsdlIncludes,
schemaRelativeImports, schemaIncludes);
wsdlRelativeImports.addAll(wsdlIncludes);
schemaRelativeImports.addAll(schemaIncludes);
// Download all schema relative imports
String urlWithoutFileName = httpUrl.toString().substring(0, httpUrl.toString().lastIndexOf("/"));
for(Import next : schemaRelativeImports) {
String location = next.getLocation();
location = location.replaceAll("/", "\\"+File.separator);
if(location.lastIndexOf(File.separator) != -1) {
File newDir = new File(wsdlDir.getAbsolutePath()+File.separator+
location.substring(0, location.lastIndexOf(File.separator)));
newDir.mkdirs();
}
downloadFile(new URL(urlWithoutFileName+"/"+next.getLocation()),
new File(wsdlDir.getAbsolutePath()+File.separator+location));
}
// Download all wsdl relative imports
for(Import next : wsdlRelativeImports) {
String newWsdlLocation = next.getLocation();
newWsdlLocation = newWsdlLocation.replaceAll("/", "\\"+File.separator);
File newWsdlDir;
if(newWsdlLocation.lastIndexOf(File.separator) != -1) {
newWsdlDir = new File(wsdlDir.getAbsolutePath() + File.separator +
newWsdlLocation.substring(0, newWsdlLocation.lastIndexOf(File.separator)));
} else {
newWsdlDir = wsdlDir;
}
downloadWsdlsAndSchemas(ws, new URL(urlWithoutFileName+"/"+next.getLocation()), newWsdlDir);
}
return;
| public void | genWSInfo(com.sun.enterprise.deployment.Application app, com.sun.enterprise.deployment.backend.DeploymentRequest request)Creates missing wsdl from SEI/SIB declared in the deployment descriptors or
through the @WebService annotation
Set<BundleDescriptor> bundles = (Set<BundleDescriptor>) app.getBundleDescriptors();
for(BundleDescriptor bundle : bundles) {
WebServicesDescriptor wsDesc = bundle.getWebServices();
for (WebService ws : wsDesc.getWebServices()) {
// for modules this is domains/<domain-name>/j2ee-modules/<module-name>
// for apps this is domains/<domain-name>/j2ee-apps/<app-name>/<foo_war> (in case of embedded wars)
// or domains/<domain-name>/j2ee-apps/<app-name>/<foo_jar> (in case of embedded jars)
File moduleDir = request.getDeployedDirectory();
File wsdlDir = request.getGeneratedXMLDirectory();
File stubsDir = request.getStubsDirectory();
if(request.isApplication()) {
String subDirName = DeploymentUtils.getRelativeEmbeddedModulePath(moduleDir.getAbsolutePath(), bundle.getModuleDescriptor().getArchiveUri());
//moduleDir = new File(moduleDir, subDirName.replaceAll("\\.", "_"));
moduleDir =new File(moduleDir, subDirName);
wsdlDir =new File( wsdlDir,subDirName);
// wsdlDir = new File(wsdlDir, subDirName.replaceAll("\\.", "_"));
}
File classesDir;
String webinfLibDir = null;
if (ModuleType.WAR.equals(bundle.getModuleType())) {
classesDir = new File(moduleDir, "WEB-INF"+File.separator+"classes");
webinfLibDir = moduleDir.getAbsolutePath() + File.separator + "WEB-INF"+File.separator+"lib";
} else if (ModuleType.EJB.equals(bundle.getModuleType())) {
classesDir = moduleDir;
} else {
// unknown module type with @WebService, just ignore...
continue;
}
wsdlDir = new File(wsdlDir, bundle.getWsdlDir().replaceAll("/", "\\"+File.separator));
// Check if catalog file is present, if so get mapped WSDLs
String wsdlFileUri;
File wsdlFile;
checkCatalog(bundle, ws, moduleDir);
if (ws.hasWsdlFile()) {
// If wsdl file is an http URL, download that WSDL and all embedded relative wsdls, schemas
if (ws.getWsdlFileUri().startsWith("http")) {
try {
downloadWsdlsAndSchemas(ws, new URL(ws.getWsdlFileUri()), wsdlDir);
} catch(Exception e) {
throw new IASDeploymentException(e.toString(), e);
}
wsdlFileUri = ws.getWsdlFileUri().substring(ws.getWsdlFileUri().lastIndexOf("/")+1);
wsdlFile = new File(wsdlDir, wsdlFileUri);
// at this point, we don't care we got it from and it simplifies
// the rest of the deployment process to just think that is was
// generated during deployment
// ws.setWsdlFileUri(null);
} else {
wsdlFileUri = ws.getWsdlFileUri();
if(wsdlFileUri.startsWith("/")) {
wsdlFile = new File(wsdlFileUri);
} else {
wsdlFile = new File(moduleDir, wsdlFileUri);
}
if (!wsdlFile.exists()) {
throw new IASDeploymentException("WebService " + ws.getName() + " wsdl file "
+ ws.getWsdlFileUri() + " not found in archive "
+ bundle.getModuleDescriptor().getArchiveUri());
}
}
} else {
//make required dirs in case they are not present
wsdlFileUri = JAXBRIContext.mangleNameToClassName(ws.getName()) + ".wsdl";
wsdlDir.mkdirs();
wsdlFile = new File(wsdlDir, wsdlFileUri);
}
for (WebServiceEndpoint endpoint : ws.getEndpoints()) {
String implClassName;
boolean jaxwsEndPtFound = false;
boolean jaxrpcEndPtFound = false;
if (endpoint.implementedByEjbComponent()) {
implClassName = endpoint.getEjbComponentImpl().getEjbClassName();
} else {
implClassName = endpoint.getWebComponentImpl().getWebComponentImplementation();
}
// check this is NOT a provider interface
Class implClass;
try {
implClass = app.getClassLoader().loadClass(implClassName);
} catch(Exception e) {
throw new IASDeploymentException("WebService " + ws.getName() + "implementation "
+ implClassName + " not found in archive "
+ bundle.getModuleDescriptor().getArchiveUri());
}
if (implClass!=null) {
if(implClass.getAnnotation(javax.xml.ws.WebServiceProvider.class) != null) {
// if we already found a jaxrpcendpoint, flag error since we do not support jaxws+jaxrpc endpoint
// in the same service
if(jaxrpcEndPtFound) {
throw new IASDeploymentException("WebService " + ws.getName() +
"has a JAXWS and a JAXRPC endpoint; this is not supported now");
}
//This is a JAXWS endpoint with @WebServiceProvider
//Do not run wsgen for this endpoint
jaxwsEndPtFound = true;
continue;
}
if(implClass.getAnnotation(javax.jws.WebService.class) != null) {
// if we already found a jaxrpcendpoint, flag error since we do not support jaxws+jaxrpc endpoint
// in the same service
if(jaxrpcEndPtFound) {
throw new IASDeploymentException("WebService " + ws.getName() +
"has a JAXWS and a JAXRPC endpoint; this is not supported now");
}
// This is a JAXWS endpoint with @WebService; Invoke wsgen
jaxwsEndPtFound = true;
String wsgenClassPath = getWsgenClassPath(classesDir, webinfLibDir,
request.getDeployedDirectory().getAbsolutePath()+File.separator+app.getLibraryDirectory(),
moduleDir.getAbsolutePath(),app);
boolean wsgenDone =
runWsGen(implClassName, wsdlFile.exists(), wsgenClassPath,
stubsDir, wsdlDir, endpoint.getServiceName(), endpoint.getWsdlPort());
if(!wsgenDone) {
// wsgen failed; if WSDL file were present, just throw a warning
// assuming that the user would have packaged everything
if(!wsdlFile.exists()) {
throw new IASDeploymentException("WSGEN FAILED");
} else {
logger.log(Level.WARNING,
"wsgen failed - proceeding under the assumption that the user packaged all required objects properly");
}
}
try {
endpoint.getWebService().setWsdlFileUrl(wsdlFile.toURI().toURL());
} catch(java.net.MalformedURLException mue) {
throw new IASDeploymentException("WSGEN Failed");
}
logger.log(Level.INFO, "wsgen successful");
} else {
// this is a jaxrpc endpoint
// if we already found a jaxws endpoint, flag error since we do not support jaxws+jaxrpc endpoint
// in the same service
if(jaxwsEndPtFound) {
throw new IASDeploymentException("WebService " + ws.getName() +
"has a JAXWS and a JAXRPC endpoint; this is not supported now");
}
// Set spec version to 1.1 to indicate later the wscompile should be run
// We do this here so that jaxrpc endpoint having J2EE1.4 or JavaEE5
// descriptors will work properly
jaxrpcEndPtFound = true;
ws.getWebServicesDescriptor().setSpecVersion("1.1");
}
}
}
}
}
| public static java.lang.Class | generateAndLoad(com.sun.ejb.codegen.ClassGeneratorFactory cgf, java.lang.ClassLoader loader)
cgf.evaluate();
Properties props = new Properties();
if( logger.isLoggable(Level.FINE) ) {
props.put(Wrapper.DUMP_AFTER_SETUP_VISITOR, "true");
props.put(Wrapper.TRACE_BYTE_CODE_GENERATION, "true");
props.put(Wrapper.USE_ASM_VERIFIER, "true");
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
Wrapper._sourceCode(ps, props);
logger.log(Level.FINE,baos.toString());
} catch(Exception e) {
logger.log(Level.FINE, "exception generating src", e);
}
}
return Wrapper._generate(loader, null, props);
| public void | generateFinalWsdl(java.net.URL wsdlFileUrl, com.sun.enterprise.deployment.WebService webService, com.sun.enterprise.deployment.util.WebServerInfo wsi, java.io.File finalWsdlFile)Transform the deployed WSDL document for a given webservice by
replacing the ENDPOINT ADDRESS for each port with the actual
endpoint address on which it will be listening.
/**
// Before generating final WSDL, ensure that the @WebService svcName/portName
// attributes (if any) match with those in wsdl - lets do this only for jaxws ervices
if(webService.getMappingFileUri() == null) {
for(WebServiceEndpoint endpoint : webService.getEndpoints()) {
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
InputSource inputSource =
new InputSource(new BufferedInputStream(new FileInputStream(wsdlFileUrl.getPath())));
Document wsdlDoc =
dFactory.newDocumentBuilder().parse(new BufferedInputStream(new FileInputStream(wsdlFileUrl.getPath())));
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
NamespaceContext context =
new com.sun.enterprise.webservice.monitoring.NamespaceContextImpl(wsdlDoc);
xPath.setNamespaceContext(context);
String xpathExpression = "/:definitions/:service/@name";
String expStr = xPath.evaluate(xpathExpression, inputSource);
if (!endpoint.getWsdlService().getLocalPart().equals(expStr)) {
throw new Exception(localStrings.getLocalString(
"enterprise.webservice.serviceNameMismatch",
"There is a mismatch in the serviceName specified with @WebService annotation in the endpoint implementation and the serviceName found in the WSDL; ServiceName in WSDL={0}; ServiceName in endpoint={1}",
new Object[] {expStr,endpoint.getWsdlService().getLocalPart()}));
}
inputSource =
new InputSource(new BufferedInputStream(new FileInputStream(wsdlFileUrl.getPath())));
xpathExpression = "/:definitions/:service/:port/@name";
expStr = xPath.evaluate(xpathExpression, inputSource);
if (!endpoint.getWsdlPort().getLocalPart().equals(expStr)) {
throw new Exception(localStrings.getLocalString(
"enterprise.webservice.portNameMismatch",
"There is a mismatch in the portName specified with @WebService annotation in the endpoint implementation and the portName found in the WSDL; PortName in WSDL={0}; PortName in endpoint={1}",
new Object[] {expStr,endpoint.getWsdlPort().getLocalPart()}));
}
}
}
*/
OutputStream outputStream =
new BufferedOutputStream(new FileOutputStream(finalWsdlFile));
generateFinalWsdl(wsdlFileUrl, webService, wsi, outputStream);
| public void | generateFinalWsdl(java.net.URL wsdlFileUrl, com.sun.enterprise.deployment.WebService webService, com.sun.enterprise.deployment.util.WebServerInfo wsi, java.io.OutputStream outputStream)
Switch theSwitch = Switch.getSwitch();
String webServiceName = webService.getName();
Collection wsdlRelativeImports = new HashSet();
Collection wsdlIncludes = new HashSet();
Collection schemaRelativeImports = new HashSet();
Collection schemaIncludes = new HashSet();
if( webService.hasUrlPublishing() ) {
parseRelativeImports(wsdlFileUrl, wsdlRelativeImports,
wsdlIncludes, schemaRelativeImports, schemaIncludes);
}
Collection endpoints = webService.getEndpoints();
// a WSDL file can contain several ports associated to a service.
// however Deployment descriptors can be expressed in two ways
// to describe such a scenario in webservices.xml :
// - One webservice-description with 2 port-components
// - Two webservice-description with 1 port-component
// The issue with #1, is that we need to configure the XSL with
// the two ports so that the resulting unique WSDL has the correct
// endpoint information and the JAXRPC stubs generated correctly.
// So we need to check if this bundle is declaring more webservice
// descriptor pointing to the same WSDL file...
Collection endpointsCopy = new ArrayList();
endpointsCopy.addAll(endpoints);
BundleDescriptor bundle = webService.getBundleDescriptor();
WebServicesDescriptor wsd = bundle.getWebServices();
Collection webServices = wsd.getWebServices();
if (webServices.size()>1) {
for (Iterator wsIter = webServices.iterator();wsIter.hasNext();) {
WebService aWS = (WebService) wsIter.next();
if (webService.getName().equals(aWS.getName())) {
continue;
}
// this is another web service defined in the same bundle.
// let's check if it points to the same WSDL file
if ((webService.getWsdlFileUri() != null) &&
(aWS.getWsdlFileUri() != null) &&
(webService.getWsdlFileUri().equals(aWS.getWsdlFileUri()))) {
endpointsCopy.addAll(aWS.getEndpoints());
} else if ((webService.getWsdlFileUrl() != null) &&
(aWS.getWsdlFileUrl() != null) &&
((webService.getWsdlFileUrl().toString())
.equals(aWS.getWsdlFileUrl().toString()))) {
endpointsCopy.addAll(aWS.getEndpoints());
}
}
}
// Load the wsdl file bytes with caching turned off. This is
// to avoid a jar url consistency problem that can arise if we
// overwrite the module file later on in deployment.
InputStream wsdlInputStream = new BufferedInputStream(wsdlFileUrl.openStream());
Source XsltWsdlDocument = new StreamSource(wsdlInputStream);
Templates templates = createTemplatesFor
(endpointsCopy, wsdlRelativeImports, wsdlIncludes,
schemaRelativeImports, schemaIncludes);
Transformer transformer = templates.newTransformer();
// WSDL is associated with webservice, but url is endpoint-specific,
// so let WebService choose which endpoint to use.
WebServiceEndpoint endpointForImport =
webService.pickEndpointForRelativeImports();
URL root= wsi.getWebServerRootURL(endpointForImport.isSecure());
URL finalWsdlUrl = endpointForImport.composeFinalWsdlUrl(root);
int wsdlImportNum = 0;
for(Iterator iter = wsdlRelativeImports.iterator(); iter.hasNext();){
Import next = (Import) iter.next();
transformer.setParameter
(WSDL_IMPORT_NAMESPACE_PARAM_NAME + wsdlImportNum,
next.getNamespace());
// Convert each relative import into an absolute import, using
// the final wsdl's Url as the context
URL relativeUrl = new URL(finalWsdlUrl, next.getLocation());
transformer.setParameter
(WSDL_IMPORT_LOCATION_PARAM_NAME + wsdlImportNum, relativeUrl);
wsdlImportNum++;
}
int schemaImportNum = 0;
for(Iterator iter = schemaRelativeImports.iterator(); iter.hasNext();){
Import next = (Import) iter.next();
transformer.setParameter
(SCHEMA_IMPORT_NAMESPACE_PARAM_NAME + schemaImportNum,
next.getNamespace());
// Convert each relative import into an absolute import, using
// the final wsdl's Url as the context
URL relativeUrl = new URL(finalWsdlUrl, next.getLocation());
transformer.setParameter
(SCHEMA_IMPORT_LOCATION_PARAM_NAME + schemaImportNum,
relativeUrl);
schemaImportNum++;
}
int wsdlIncludeNum = 0;
for(Iterator iter = wsdlIncludes.iterator(); iter.hasNext();){
Import next = (Import) iter.next();
URL relativeUrl = new URL(finalWsdlUrl, next.getLocation());
transformer.setParameter
(WSDL_INCLUDE_LOCATION_PARAM_NAME + wsdlIncludeNum, relativeUrl);
wsdlIncludeNum++;
}
int schemaIncludeNum = 0;
for(Iterator iter = schemaIncludes.iterator(); iter.hasNext();){
Import next = (Import) iter.next();
URL relativeUrl = new URL(finalWsdlUrl, next.getLocation());
transformer.setParameter
(SCHEMA_INCLUDE_LOCATION_PARAM_NAME + schemaIncludeNum,
relativeUrl);
schemaIncludeNum++;
}
int endpointNum = 0;
for(Iterator iter = endpointsCopy.iterator(); iter.hasNext();) {
WebServiceEndpoint next = (WebServiceEndpoint) iter.next();
// Get a URL for the root of the webserver, where the host portion
// is a canonical host name. Since this will be used to compose the
// endpoint address that is written into WSDL, it's better to use
// hostname as opposed to IP address.
// The protocol and port will be based on whether the endpoint
// has a transport guarantee of INTEGRAL or CONFIDENTIAL.
// If yes, https will be used. Otherwise, http will be used.
URL rootURL = wsi.getWebServerRootURL(next.isSecure());
URL actualAddress = next.composeEndpointAddress(rootURL);
transformer.setParameter(ENDPOINT_ADDRESS_PARAM_NAME + endpointNum,
actualAddress.toExternalForm());
String endpointType = next.implementedByEjbComponent() ?
"EJB" : "Servlet";
deploymentLogger.log(Level.INFO,
"enterprise.deployment.endpoint.registration",
new Object[] { endpointType,
next.getEndpointName(), actualAddress });
endpointNum++;
}
transformer.transform(XsltWsdlDocument, new StreamResult(outputStream));
wsdlInputStream.close();
outputStream.close();
return;
| public java.util.Collection | getAllPorts(com.sun.xml.rpc.spi.model.Model model)
Collection ports = new HashSet();
for(Iterator serviceIter = model.getServices();
serviceIter.hasNext();) {
Service next = (Service) serviceIter.next();
ports.addAll(next.getPortsList());
}
return ports;
| private int | getContentLength(javax.xml.soap.MimeHeaders headers)
String[] contentLength = headers.getHeader("Content-Length");
int length = 0;
if ((contentLength != null) && (contentLength.length > 0)) {
length = new Integer(contentLength[0]).intValue();
}
return length;
| private java.lang.String | getDefaultHostName()
String defaultHostName = "localhost";
try {
InetAddress host = InetAddress.getLocalHost();
defaultHostName = host.getCanonicalHostName();
} catch(java.net.UnknownHostException uhe) {
deploymentLogger.log(Level.FINEST, "mbean.get_local_host_error", uhe);
deploymentLogger.log(Level.INFO, "mbean.use_default_host");
}
return defaultHostName;
| public static java.util.logging.Logger | getDefaultLogger()
return logger;
| public static com.sun.enterprise.util.LocalStringManagerImpl | getDefaultStringManager()
return localStrings;
| javax.xml.soap.MimeHeaders | getHeaders(javax.servlet.http.HttpServletRequest request)
Enumeration e = request.getHeaderNames();
MimeHeaders headers = new MimeHeaders();
while (e.hasMoreElements()) {
String headerName = (String)e.nextElement();
String headerValue = request.getHeader(headerName);
headers.addHeader(headerName, headerValue);
}
return headers;
| public java.lang.reflect.Method | getInvMethod(com.sun.xml.rpc.spi.runtime.Tie webServiceTie, javax.xml.rpc.handler.MessageContext context)
// Use tie to get Method from SOAP message inv.webServiceTie
SOAPMessageContext soapMsgContext = (SOAPMessageContext) context;
SOAPMessage message = soapMsgContext.getMessage();
StreamingHandler streamingHandler = (StreamingHandler) webServiceTie;
int opcode = streamingHandler.getOpcodeForRequestMessage(message);
return streamingHandler.getMethodForOpcode(opcode);
| public static javax.xml.soap.SOAPMessage | getMessage(javax.xml.rpc.handler.soap.SOAPMessageContext c)
// TODO
return c.getMessage();
| private static synchronized javax.xml.soap.SOAPMessage | getMessage(javax.xml.ws.handler.soap.SOAPMessageContext c, boolean nameKnown)
// when called by jaxws Hander or SystemHandlerDelegate
// 2nd parameter should be true if you don't need to
// peek into the message for operationName
SOAPMessage message = null;
// handle else case, and try to avoid returning null message
if (message == null) {
message = c.getMessage();
}
return message;
| public static synchronized javax.xml.soap.SOAPMessage | getMessage(javax.xml.ws.handler.soap.SOAPMessageContext c)
return getMessage(c,true);
| public static synchronized javax.xml.soap.SOAPMessage | getMessageWithName(javax.xml.ws.handler.soap.SOAPMessageContext c)
return getMessage(c,false);
| public boolean | getMtom(com.sun.enterprise.deployment.WebServiceEndpoint ep)
String currentBinding = ep.getProtocolBinding();
if((ep.getMtomEnabled() == null) &&
(SOAPBinding.SOAP11HTTP_MTOM_BINDING.equals(currentBinding) ||
SOAPBinding.SOAP12HTTP_MTOM_BINDING.equals(currentBinding))) {
return true;
}
if((new Boolean(ep.getMtomEnabled())).booleanValue() &&
(SOAPBinding.SOAP11HTTP_BINDING.equals(currentBinding) ||
SOAPBinding.SOAP12HTTP_BINDING.equals(currentBinding) ||
SOAPBinding.SOAP11HTTP_MTOM_BINDING.equals(currentBinding) ||
SOAPBinding.SOAP12HTTP_MTOM_BINDING.equals(currentBinding))) {
return true;
}
return false;
| public com.sun.xml.rpc.spi.model.Port | getPortFromModel(com.sun.xml.rpc.spi.model.Model model, javax.xml.namespace.QName portName)Find a Port object within the JAXRPC Model.
for(Iterator serviceIter = model.getServices(); serviceIter.hasNext();){
Service next = (Service) serviceIter.next();
for(Iterator portIter = next.getPorts(); portIter.hasNext();) {
Port nextPort = (Port) portIter.next();
if( portsEqual(nextPort, portName) ) {
return nextPort;
}
}
}
return null;
| public java.util.Collection | getSEIsFromGeneratedService(java.lang.Class generatedServiceInterface)
Collection seis = new HashSet();
Method[] declaredMethods =
generatedServiceInterface.getDeclaredMethods();
// Use naming convention from jaxrpc spec to derive SEI class name.
for(int i = 0; i < declaredMethods.length; i++) {
Method next = declaredMethods[i];
Class returnType = next.getReturnType();
if( next.getName().startsWith("get") &&
(next.getDeclaringClass() != javax.xml.rpc.Service.class) &&
java.rmi.Remote.class.isAssignableFrom(returnType) ) {
seis.add(returnType.getName());
}
}
return seis;
| public static javax.xml.soap.SOAPMessage | getSOAPFault(java.lang.String protocol, java.lang.String faultString)
if (protocol==null) {
protocol = javax.xml.soap.SOAPConstants.SOAP_1_1_PROTOCOL;
}
try {
MessageFactory factory = MessageFactory.newInstance(protocol);
if (factory==null) {
factory = MessageFactory.newInstance();
}
SOAPMessage message = factory.createMessage();
SOAPBody body = message.getSOAPBody();
SOAPFault fault = body.addFault();
fault.setFaultString(faultString);
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
String envelopeNamespace = envelope.getNamespaceURI();
QName faultCode = new QName(envelopeNamespace, "Server", "env");
fault.setFaultCode(faultCode);
return message;
} catch(SOAPException e) {
logger.log(Level.WARNING, "Cannot create soap fault for " + faultString);
}
return null;
| public com.sun.xml.rpc.spi.model.Service | getServiceForPort(com.sun.xml.rpc.spi.model.Model model, javax.xml.namespace.QName thePortName)Find a Service in which a particular port is defined. Assumes port
QName is unique within a WSDL.
for(Iterator serviceIter = model.getServices();
serviceIter.hasNext();) {
Service nextService = (Service) serviceIter.next();
for(Iterator portIter = nextService.getPorts();
portIter.hasNext();) {
Port nextPort = (Port) portIter.next();
if( portsEqual(nextPort, thePortName) ) {
return nextService;
}
}
}
return null;
| public com.sun.enterprise.deployment.util.WebServerInfo | getWebServerInfo(com.sun.enterprise.deployment.backend.DeploymentRequest request)
/**
* If there is only one target and that target is a stand alone server, WSDL_TARGET_HINT in options would have been set
* by the client. Use this hint to enable WSDL generation with the specific target's host and port.
* Refer to bug 6157923 for more info
*/
String serverTarget = (String) request.getOptionalArguments().get(DeploymentProperties.WSDL_TARGET_HINT);
if(serverTarget == null) {
return(getWebServerInfoForDAS(request));
}
ConfigContext cc = AdminService.getAdminService().getAdminContext().getAdminConfigContext();
if(cc==null) {
return(getWebServerInfoForDAS(request));
}
Config config = ServerHelper.getConfigForServer(cc, serverTarget);
JMXConnectorConfig info = ServerHelper.getJMXConnectorInfo(cc, serverTarget);
if((config==null) || (info==null) ) {
return(getWebServerInfoForDAS(request));
}
String host = info.getHost();
return(getWebServerInfo(cc, config, null, serverTarget, host));
| public com.sun.enterprise.deployment.util.WebServerInfo | getWebServerInfo(java.lang.String moduleID, javax.servlet.http.HttpServletRequest request)
// let's get our admin context
ConfigContext cc = ApplicationServer.getServerContext().getConfigContext();
Server server = ServerBeansFactory.getServerBean(cc);
Config config = ServerBeansFactory.getConfigBean(cc);
ApplicationRef ref = server.getApplicationRefByRef(moduleID);
return(getWebServerInfo(cc, config, ref.getVirtualServers(), null, null));
| private com.sun.enterprise.deployment.util.WebServerInfo | getWebServerInfo(com.sun.enterprise.config.ConfigContext cc, com.sun.enterprise.config.serverbeans.Config config, java.lang.String virtualServers, java.lang.String targetName, java.lang.String targetHostName)
HttpService httpService = config.getHttpService();
VirtualServer[] vServers = null;
List httpListeners = new ArrayList();
if (virtualServers==null) {
vServers = httpService.getVirtualServer();
if (vServers!=null) {
for (int i=0;i<vServers.length;i++) {
VirtualServer vs = vServers[i];
// admin virtual server does not count
if (vs.getId().equals(com.sun.enterprise.web.VirtualServer.ADMIN_VS))
continue;
String httpListenersString = vs.getHttpListeners();
if (httpListenersString!=null) {
String[] httpListenerIDs = httpListenersString.split(",");
if (httpListenerIDs!=null) {
for (int j=0;j<httpListenerIDs.length;j++) {
httpListeners.add(httpService.getHttpListenerById(httpListenerIDs[j]));
}
}
}
}
}
} else {
String virtualServerNames[] = virtualServers.split(",");
if (virtualServerNames!=null) {
for (int i=0;i<virtualServerNames.length;i++) {
VirtualServer vs = httpService.getVirtualServerById(virtualServerNames[i]);
String httpListenersString = vs.getHttpListeners();
if (httpListenersString!=null) {
String[] httpListenerIDs = httpListenersString.split(",");
if (httpListenerIDs!=null) {
for (int j=0;j<httpListenerIDs.length;j++) {
httpListeners.add(httpService.getHttpListenerById(httpListenerIDs[i]));
}
}
}
}
}
}
WebServerInfo wsi = new WebServerInfo();
for (int i=0;i<httpListeners.size();i++) {
HttpListener hl = (HttpListener) httpListeners.get(i);
if (!hl.isEnabled())
continue;
if(targetHostName == null) {
targetHostName = hl.getServerName();
if (targetHostName==null || targetHostName.length()==0) {
targetHostName = getDefaultHostName();
}
}
try {
targetHostName = InetAddress.getByName(targetHostName).getCanonicalHostName();
} catch (java.net.UnknownHostException unex) {
throw new ConfigException(unex.getMessage(), unex);
}
String redirectPortNb = hl.getRedirectPort();
String portNb;
if (redirectPortNb!=null) {
portNb = redirectPortNb;
} else {
portNb = hl.getPort();
}
if(targetName == null) {
targetName = ApplicationServer.getServerContext().getInstanceName();
}
PropertyResolver pr = new PropertyResolver(cc, targetName);
String resolvedPort = pr.resolve(portNb);
int port = Integer.parseInt(resolvedPort);
if (hl.isSecurityEnabled()) {
wsi.setHttpsVS(new VirtualServerInfo("https", targetHostName, port));
} else {
wsi.setHttpVS(new VirtualServerInfo("http", targetHostName, port));
}
if (wsi.getHttpVS()!=null && wsi.getHttpsVS()!=null)
break;
}
return wsi;
| private com.sun.enterprise.deployment.util.WebServerInfo | getWebServerInfoForDAS(com.sun.enterprise.deployment.backend.DeploymentRequest request)
WebServerInfo wsi = new WebServerInfo();
wsi.setHttpVS(new VirtualServerInfo("http", request.getHttpHostName(), request.getHttpPort()));
wsi.setHttpsVS(new VirtualServerInfo("https", request.getHttpsHostName(), request.getHttpsPort()));
return wsi;
| public java.lang.String | getWsdlDir(com.sun.enterprise.deployment.BundleDescriptor bundle)
boolean isWar = (bundle instanceof WebBundleDescriptor);
return isWar ? "WEB-INF/wsdl" : "META-INF/wsdl";
| public java.util.Collection | getWsdlsAndSchemas(java.io.File pkgedWsdl)
ArrayList<SDDocumentSource> cumulative = new ArrayList<SDDocumentSource>();
getWsdlsAndSchemas(pkgedWsdl, cumulative);
//if there are circular imports of wsdls, the original wsdl might
//be in this Collection of imported metadata documents. If so, remove it.
URL id = pkgedWsdl.toURL();
SDDocumentSource toRemove = null;
for (SDDocumentSource source: cumulative) {
if ((id.toString()).equals(source.getSystemId().toString())) {
toRemove = source;
}
}
if (toRemove != null) {
cumulative.remove(toRemove);
}
return cumulative;
| public void | getWsdlsAndSchemas(java.io.File wsdl, java.util.ArrayList cumulative)
// Get a list of wsdl and schema relative imports in this wsdl
Collection<Import> wsdlRelativeImports = new HashSet();
Collection<Import> schemaRelativeImports = new HashSet();
Collection<Import> wsdlIncludes = new HashSet();
Collection<Import> schemaIncludes = new HashSet();
String wsdlRoot = wsdl.getParent();
parseRelativeImports(wsdl.toURL(), wsdlRelativeImports, wsdlIncludes,
schemaRelativeImports, schemaIncludes);
wsdlRelativeImports.addAll(wsdlIncludes);
schemaRelativeImports.addAll(schemaIncludes);
// List of all schema relative imports
for(Import next : schemaRelativeImports) {
String location = next.getLocation();
location = location.replaceAll("/", "\\"+File.separator);
File file = new File(wsdlRoot + File.separator + location)
.getCanonicalFile();
addFileAndDecendents(file, cumulative);
}
// List of all wsdl relative imports
for(Import next : wsdlRelativeImports) {
String location = next.getLocation();
location = location.replaceAll("/", "\\"+File.separator);
File currentWsdlFile = new File(wsdlRoot+File.separator+location)
.getCanonicalFile();
addFileAndDecendents(currentWsdlFile, cumulative);
}
| private java.lang.String | getWsgenClassPath(java.io.File classesDir, java.lang.String webinfLibDir, java.lang.String appLibDirPath, java.lang.String moduleDir, com.sun.enterprise.deployment.Application app)
// First thing in the classpath is modules' classes directory
String classpath = classesDir.getAbsolutePath();
// Next add the Jar files in WEB-INF/lib, if any
if(webinfLibDir != null) {
classpath = addJarsToClassPath(classpath, webinfLibDir);
}
// Next add the jar files in the EAR level lib directory
if(appLibDirPath != null) {
classpath = addJarsToClassPath(classpath, appLibDirPath);
classpath = addJarsToClassPath(classpath,new File(appLibDirPath).getParentFile().getAbsolutePath());
}
//Add expanded modules to classpath
for (Iterator modules = app.getModules(); modules.hasNext();) {
ModuleDescriptor md = (ModuleDescriptor) modules.next();
String moduleUri = md.getArchiveUri();
String parentPath = new File(appLibDirPath).getParentFile(
).getAbsolutePath();
String moduleRoot = DeploymentUtils.getEmbeddedModulePath(
parentPath, moduleUri);
classpath = addModuleDirsToClassPath(classpath,moduleRoot);
}
// Now add the classpath elements in the modules Manifest entries
FileInputStream is = null;
try {
File mfFile = new File(moduleDir+File.separator+"META-INF"+
File.separator+"MANIFEST.MF");
if(mfFile.exists()) {
is = new FileInputStream(mfFile);
Manifest ms = new Manifest(is);
Attributes attrMap = ms.getMainAttributes();
String mfCp = attrMap.getValue(Attributes.Name.CLASS_PATH);
if(mfCp != null && mfCp.length() != 0) {
StringTokenizer strTok = new StringTokenizer(mfCp, " \t");
while(strTok.hasMoreTokens()) {
String givenCP = strTok.nextToken();
// Append moduleDir to all relative classPaths
if(!givenCP.startsWith(File.separator)) {
//Fix for 2629
// Based on J2EE spec the referenced jars
// in Classpath
// must be relative to the referencing jars
givenCP = new File(moduleDir).getParent()+File.separator+givenCP;
}
classpath+=(File.pathSeparator+givenCP);
}
}
}
} catch (Exception e) {
throw new IASDeploymentException("Exception : " + e.getMessage() +
" when trying to process MANIFEST file under " + moduleDir);
} finally {
if(is != null) {
try {
is.close();
} catch(IOException t) {}
}
}
return classpath;
| public boolean | handleGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, com.sun.enterprise.deployment.WebServiceEndpoint endpoint)Serve up the FINAL wsdl associated with this web service.
MimeHeaders headers = getHeaders(request);
if( hasSomeTextXmlContent(headers) ) {
String message = "Received HTTP GET containing text/xml " +
" content for endpoint " + endpoint.getEndpointName() +
" at " + endpoint.getEndpointAddressUri() +
" . HTTP POST should be used instead.";
writeInvalidMethodType(response, message);
logger.info(message);
return false;
}
URL wsdlUrl = null;
String requestUriRaw = request.getRequestURI();
String requestUri = (requestUriRaw.charAt(0) == '/") ?
requestUriRaw.substring(1) : requestUriRaw;
String queryString = request.getQueryString();
WebService webService = endpoint.getWebService();
if( queryString == null ) {
// Get portion of request uri representing location within a module
String wsdlPath = endpoint.getWsdlContentPath(requestUri);
if( wsdlPath != null) {
ModuleDescriptor module =
webService.getBundleDescriptor().getModuleDescriptor();
if( wsdlPath.equals(webService.getWsdlFileUri())){
// If the request is for the main wsdl document, return
// the final wsdl instead of the wsdl from the module.
wsdlUrl = webService.getWsdlFileUrl();
} else if( isWsdlContent(wsdlPath,
webService.getBundleDescriptor()) ) {
// For relative document imports. These documents do not
// require modification during deployment, so serve them
// up directly from the packaged module. isWsdlContent()
// check ensures we don't serve up arbitrary content from
// the module.
URL finalWsdlUrl = webService.getWsdlFileUrl();
String finalWsdlPath = finalWsdlUrl.getPath();
// remove the final wsdl uri from the above path
String wsdlDirPath = finalWsdlPath.substring(0, finalWsdlPath.length()-webService.getWsdlFileUri().length());
File wsdlDir = new File(wsdlDirPath);
File wsdlFile = new File(wsdlDir, wsdlPath.replace('/", File.separatorChar));
try {
wsdlUrl = wsdlFile.toURL();
} catch(MalformedURLException mue) {
logger.log(Level.INFO, "Failure serving WSDL for " +
webService.getName(), mue);
}
}
}
} else if( queryString.equalsIgnoreCase("WSDL") ) {
wsdlUrl = webService.getWsdlFileUrl();
}
boolean success = false;
if( wsdlUrl != null ) {
InputStream is = null;
try {
response.setContentType("text/xml");
response.setStatus(HttpServletResponse.SC_OK);
// if the requested file is the main wsdl document, we are going
// to reprocess it through the XML transformer to change the final
// endpoint URL correct for this particular web server instance.
// This is necessary in the case of SE/EE installations where
// the application can be running on different machines and ports
// than the one they were deployed on (DAS).
if (wsdlUrl.toURI().equals(webService.getWsdlFileUrl().toURI())) {
// get the application module ID
try {
String moduleID = endpoint.getBundleDescriptor().getApplication().getRegistrationName();
WebServerInfo wsi = getWebServerInfo(moduleID, request);
URL url = webService.getWsdlFileUrl();
File originalWsdlFile = new File(url.getPath()+"__orig");
if(!originalWsdlFile.exists()) {
originalWsdlFile = new File(url.getPath());
}
generateFinalWsdl(originalWsdlFile.toURL(), webService, wsi, response.getOutputStream());
} catch(Exception e) {
// if this fail, we revert to service the untouched
// repository item.
URLConnection urlCon = wsdlUrl.openConnection();
urlCon.setUseCaches(false);
is = urlCon.getInputStream();
ArchivistUtils.copy(is, response.getOutputStream());
}
} else {
// Copy bytes into output. Disable caches to avoid jar URL
// caching problem.
URLConnection urlCon = wsdlUrl.openConnection();
urlCon.setUseCaches(false);
is = urlCon.getInputStream();
ArchivistUtils.copy(is, response.getOutputStream());
}
success = true;
if( logger.isLoggable(Level.FINE) ) {
logger.fine("Serving up final wsdl " + wsdlUrl + " for " +
request.getRequestURL() +
(queryString != null ? ("?"+queryString) : ""));
}
} catch(Exception e) {
logger.log(Level.INFO, "Failure serving WSDL for web service " +
webService.getName(), e);
} finally {
if(is != null) {
try {
is.close();
} catch(IOException ex) {}
}
}
}
if( !success ) {
String message =
"Invalid wsdl request " + request.getRequestURL() +
(queryString != null ? ("?"+queryString) : "") +
" for web service "+ webService.getName();
logger.info(message);
writeInvalidMethodType(response, message);
}
return success;
| boolean | hasSomeTextXmlContent(javax.xml.soap.MimeHeaders headers)
return ( hasTextXmlContentType(headers) &&
(getContentLength(headers) > 0) );
| boolean | hasTextXmlContentType(javax.xml.soap.MimeHeaders headers)
String[] contentTypes = headers.getHeader("Content-Type");
if ((contentTypes != null) && (contentTypes.length >= 1)){
if (contentTypes[0].indexOf("text/xml") != -1){
return true;
}
}
return false;
| private void | invokeServiceMethod(java.lang.Class annType, java.lang.Class impl, java.lang.Object implObj)
Method[] methods = impl.getDeclaredMethods();
// Only one method can have @PostConstruct / @PreDestroy
// Call the first method with this annotation and return
for(final Method method : methods) {
if (method.getAnnotation(annType) != null) {
try {
AccessController.doPrivileged(new PrivilegedExceptionAction() {
public Object run() throws IllegalAccessException,
InvocationTargetException {
if (!method.isAccessible()) {
method.setAccessible(true);
}
method.invoke(implObj, new Object[]{});
return null;
}
});
} catch(Throwable e) {
// Should we log or throw an exception
logger.log(Level.SEVERE,
"Failure while calling PostConstruct/PreDestroy method", e);
}
break;
}
}
| boolean | isMessageContextPropertySet(com.sun.xml.rpc.spi.runtime.SOAPMessageContext messageContext, java.lang.String property)
Object prop = messageContext.getProperty(property);
if (prop != null) {
if ( (prop instanceof String) &&
((String)prop).equalsIgnoreCase("true") ) {
return true;
}
}
return false;
| public static boolean | isSecurityEnabled(com.sun.xml.ws.policy.PolicyMap policyMap, com.sun.xml.ws.api.model.wsdl.WSDLPort wsdlPort)Checks to see whether WS-Security is enabled or not.
if (policyMap == null || wsdlPort == null)
return false;
try {
PolicyMapKey endpointKey = policyMap.createWsdlEndpointScopeKey(wsdlPort.getOwner().getName(),
wsdlPort.getName());
Policy policy = policyMap.getEndpointEffectivePolicy(endpointKey);
if ((policy != null) && policy.contains(SECURITY_POLICY_NAMESPACE_URI)) {
return true;
}
for (WSDLBoundOperation wbo : wsdlPort.getBinding().getBindingOperations()) {
PolicyMapKey operationKey = policyMap.createWsdlOperationScopeKey(wsdlPort.getOwner().getName(),
wsdlPort.getName(),
wbo.getName());
policy = policyMap.getOperationEffectivePolicy(operationKey);
if ((policy != null) && policy.contains(SECURITY_POLICY_NAMESPACE_URI))
return true;
policy = policyMap.getInputMessageEffectivePolicy(operationKey);
if ((policy != null) && policy.contains(SECURITY_POLICY_NAMESPACE_URI))
return true;
policy = policyMap.getOutputMessageEffectivePolicy(operationKey);
if ((policy != null) && policy.contains(SECURITY_POLICY_NAMESPACE_URI))
return true;
policy = policyMap.getFaultMessageEffectivePolicy(operationKey);
if ((policy != null) && policy.contains(SECURITY_POLICY_NAMESPACE_URI))
return true;
}
} catch (PolicyException e) {
return false;
}
return false;
| public boolean | isWsdlContent(java.lang.String uri, com.sun.enterprise.deployment.BundleDescriptor bundle)All wsdl files and wsdl imported files live under a well-known
wsdl directory.
String wsdlDir = getWsdlDir(bundle);
return (uri != null) && uri.startsWith(wsdlDir);
| private boolean | matchQNamePatterns(javax.xml.namespace.QName cfgQName, javax.xml.namespace.QName givenPattern)
if (givenPattern.getNamespaceURI().equals(cfgQName.getNamespaceURI())) {
String expr = givenPattern.getLocalPart().replaceAll("\\*", ".*");
return java.util.regex.Pattern.matches(expr, cfgQName.getLocalPart());
}
return false;
| public void | parseRelativeImports(java.net.URL wsdlFileUrl, java.util.Collection wsdlRelativeImports, java.util.Collection wsdlIncludes, java.util.Collection schemaRelativeImports, java.util.Collection schemaIncludes)Collect all relative imports from a web service's main wsdl document.
// We will use our little parser rather than using JAXRPC's heavy weight WSDL parser
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
InputStream is = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
is = wsdlFileUrl.openStream();
Document document = builder.parse(is);
procesSchemaImports(document, schemaRelativeImports);
procesWsdlImports(document, wsdlRelativeImports);
procesSchemaIncludes(document, schemaIncludes);
procesWsdlIncludes(document, wsdlIncludes);
} catch (SAXParseException spe) {
// Error generated by the parser
logger.log(Level.SEVERE,"\n** Parsing error" + ", line " +
spe.getLineNumber() + ", uri " + spe.getSystemId());
// Use the contained exception, if any
Exception x = spe;
if (spe.getException() != null) {
x = spe.getException();
}
x.printStackTrace();
} catch (Exception sxe) {
logger.log(Level.SEVERE, "Error parsing WSDL" + sxe.getMessage());
} finally {
try {
if(is != null) {
is.close();
}
} catch (IOException io) {}
}
| private boolean | patternsMatch(com.sun.enterprise.deployment.WebServiceHandlerChain hc, javax.xml.namespace.QName svcName, javax.xml.namespace.QName portName, java.lang.String bindingId)
// If service name pattern in handler chain does not match the service name
// for this endpoint, skip handler processing
if(hc.getServiceNamePattern() != null && svcName != null) {
QName svcPattern = QName.valueOf(hc.getServiceNamePattern());
if(!matchQNamePatterns(svcName, svcPattern)) {
return false;
}
}
// If port name pattern in handler chain does not match the port name
// for this endpoint, skip handler processing
if(hc.getPortNamePattern() != null && portName != null) {
QName portPattern = QName.valueOf(hc.getPortNamePattern());
if(!matchQNamePatterns(portName, portPattern)) {
return false;
}
}
// Check if the binding protocol for this endpoint is present
// as part of the protocol-bindings list
if(hc.getProtocolBindings() != null && bindingId != null) {
String givenBindings = hc.getProtocolBindings();
if( (bindingId.equals(HTTPBinding.HTTP_BINDING)) &&
((givenBindings.indexOf(HTTPBinding.HTTP_BINDING) != -1) ||
(givenBindings.indexOf(WebServiceEndpoint.XML_TOKEN) != -1))) {
return true;
}
if( (bindingId.equals(SOAPBinding.SOAP11HTTP_BINDING)) &&
((givenBindings.indexOf(SOAPBinding.SOAP11HTTP_BINDING) != -1) ||
(givenBindings.indexOf(WebServiceEndpoint.SOAP11_TOKEN) != -1))) {
return true;
}
if( (bindingId.equals(SOAPBinding.SOAP12HTTP_BINDING)) &&
((givenBindings.indexOf(SOAPBinding.SOAP12HTTP_BINDING) != -1) ||
(givenBindings.indexOf(WebServiceEndpoint.SOAP12_TOKEN) != -1))) {
return true;
}
if( (bindingId.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING)) &&
((givenBindings.indexOf(SOAPBinding.SOAP11HTTP_MTOM_BINDING) != -1) ||
(givenBindings.indexOf(WebServiceEndpoint.SOAP11_MTOM_TOKEN) != -1))) {
return true;
}
if( (bindingId.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING)) &&
((givenBindings.indexOf(SOAPBinding.SOAP12HTTP_MTOM_BINDING) != -1) ||
(givenBindings.indexOf(WebServiceEndpoint.SOAP12_MTOM_TOKEN) != -1))) {
return true;
}
}
return true;
| public boolean | portsEqual(com.sun.xml.rpc.spi.model.Port port, javax.xml.namespace.QName candidatePortName)Logic for matching a port qname with a Port object from
the JAXRPC-RI Model.
boolean equal = false;
// Better to use Port object's WSDL_PORT property for port
// QName than Port.getName(). If that returns null, use
// Port.getName().
QName portPropertyName = (QName) port.getProperty
(ModelProperties.PROPERTY_WSDL_PORT_NAME);
if( portPropertyName != null ) {
equal = candidatePortName.equals(portPropertyName);
} else {
equal = candidatePortName.equals(port.getName());
}
return equal;
| public java.net.URL | privilegedGetServiceRefWsdl(com.sun.enterprise.deployment.ServiceReferenceDescriptor desc)Accessing wsdl URL might involve file system access, so wrap
operation in a doPrivileged block.
URL wsdlFileURL;
try {
final ServiceReferenceDescriptor serviceRef = desc;
wsdlFileURL = (URL) java.security.AccessController.doPrivileged
(new java.security.PrivilegedExceptionAction() {
public java.lang.Object run() throws Exception {
URL retVal;
if(serviceRef.hasWsdlOverride()) {
retVal = serviceRef.getWsdlOverride();
} else {
// Upon server restart, wsdlfileURL can be null
// check that and return value from wsdlFileURI
if(serviceRef.getWsdlFileUrl() != null) {
retVal = serviceRef.getWsdlFileUrl();
} else {
if(serviceRef.getWsdlFileUri().startsWith("http")) {
retVal = new URL(serviceRef.getWsdlFileUri());
} else {
retVal = (new File(serviceRef.getWsdlFileUri())).toURL();
}
}
}
return retVal;
}
});
} catch(PrivilegedActionException pae) {
logger.log(Level.WARNING, "", pae);
Exception e = new Exception();
e.initCause(pae.getCause());
throw e;
}
return wsdlFileURL;
| private void | procesSchemaImports(org.w3c.dom.Document document, java.util.Collection schemaImportCollection)
NodeList schemaImports =
document.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "import");
addImportsAndIncludes(schemaImports, schemaImportCollection, "namespace", "schemaLocation");
| private void | procesSchemaIncludes(org.w3c.dom.Document document, java.util.Collection schemaIncludeCollection)
NodeList schemaIncludes =
document.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "include");
addImportsAndIncludes(schemaIncludes, schemaIncludeCollection, null, "schemaLocation");
| private void | procesWsdlImports(org.w3c.dom.Document document, java.util.Collection wsdlImportCollection)
NodeList wsdlImports =
document.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "import");
addImportsAndIncludes(wsdlImports, wsdlImportCollection, "namespace", "location");
| private void | procesWsdlIncludes(org.w3c.dom.Document document, java.util.Collection wsdlIncludesCollection)
NodeList wsdlIncludes =
document.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "include");
addImportsAndIncludes(wsdlIncludes, wsdlIncludesCollection, null, "location");
| private java.util.List | processConfiguredHandlers(java.util.List handlersList, java.util.Set roles)
List<Handler> handlerChain = new ArrayList<Handler>();
for(WebServiceHandler h : handlersList) {
Handler handler = null;
Map<String, Object> params = new HashMap<String, Object>();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
// Get Handler Class instance
Class handlerClass;
try {
handlerClass = Class.forName(h.getHandlerClass(), true, loader);
handler = (Handler)handlerClass.newInstance();
} catch (Throwable t) {
logger.log(Level.SEVERE, "Unable to load handler class " +
h.getHandlerClass());
t.printStackTrace();
continue;
}
// perform injection
try {
new InjectionManagerImpl().injectInstance(handler);
} catch(InjectionException e) {
logger.severe("Handler " + h.getHandlerClass() +
" instance injection failed : " + e.getMessage());
continue;
}
// Call @PostConstruct if any
doPostConstruct(handlerClass, handler);
// Add soap-roles
Collection<String> rolesColl = h.getSoapRoles();
roles.addAll(rolesColl);
// Add this handler to the mail list
handlerChain.add(handler);
}
return handlerChain;
| public java.io.File | publishFinalWsdl(java.net.URL clientPublishUrl, java.lang.String finalWsdlUri, byte[] finalWsdlBytes)Called from client side deployment object on receipt of final
wsdl from server.
File finalWsdlFile = null;
FileOutputStream fos = null;
try {
finalWsdlFile = new File
(clientPublishUrl.getFile(),
finalWsdlUri.replace('/", File.separatorChar));
File parent = finalWsdlFile.getParentFile();
if( !parent.exists() ) {
boolean madeDirs = parent.mkdirs();
if( !madeDirs ) {
throw new IOException("Error creating " + parent);
}
}
fos = new FileOutputStream(finalWsdlFile);
fos.write(finalWsdlBytes, 0, finalWsdlBytes.length);
} finally {
if( fos != null ) {
try {
fos.close();
} catch(IOException ioe) {
logger.log(Level.INFO, "", ioe);
}
}
}
return finalWsdlFile;
| private static void | putHeaders(javax.xml.soap.MimeHeaders headers, javax.servlet.http.HttpServletResponse response)
headers.removeHeader("Content-Type");
headers.removeHeader("Content-Length");
Iterator it = headers.getAllHeaders();
while (it.hasNext()) {
MimeHeader header = (MimeHeader)it.next();
response.setHeader(header.getName(), header.getValue());
}
| public static void | raiseException(javax.servlet.http.HttpServletResponse resp, java.lang.String binding, java.lang.String faultString)
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
if (HTTPBinding.HTTP_BINDING.equals(binding)) {
resp.setContentType("text/xml");
try {
PrintWriter writer = new PrintWriter(resp.getOutputStream());
writer.println("<error>" + faultString + "</error>");
} catch(IOException ioe) {
logger.log(Level.WARNING, "Cannot write out a HTTP XML exception : " + ioe.getMessage());
}
} else {
String protocol;
if (SOAPBinding.SOAP12HTTP_BINDING.equals(binding)) {
protocol = javax.xml.soap.SOAPConstants.SOAP_1_2_PROTOCOL;
} else {
protocol = javax.xml.soap.SOAPConstants.SOAP_1_1_PROTOCOL;
}
SOAPMessage fault = WsUtil.getSOAPFault(protocol, faultString);
if (fault!=null) {
resp.setContentType("text/xml");
try {
fault.writeTo(resp.getOutputStream());
} catch(Exception ex) {
logger.log(Level.WARNING, "cannot write SOAPFault to the HTTP response", ex);
}
}
}
| public java.net.URL | resolveCatalog(java.io.File catalogFile, java.lang.String wsdlFile, com.sun.enterprise.deployment.WebService ws)
try {
URL retVal = null;
// Get an entity resolver
org.xml.sax.EntityResolver resolver =
XmlUtil.createEntityResolver(catalogFile.toURL());
org.xml.sax.InputSource source = resolver.resolveEntity(null, wsdlFile);
if(source != null) {
String mappedEntry = source.getSystemId();
// For entries with relative paths, Entity resolver always
// return file://<absolute path
if(mappedEntry.startsWith("file:")) {
File f = new File(mappedEntry.substring(mappedEntry.indexOf(":")+1));
if(!f.exists()) {
throw new IASDeploymentException("File " + mappedEntry + " not found");
}
retVal = f.toURI().toURL();
if(ws != null) {
ws.setWsdlFileUri(f.getAbsolutePath());
ws.setWsdlFileUrl(retVal);
}
} else if(mappedEntry.startsWith("http")) {
retVal = new URL(mappedEntry);
if(ws != null) {
ws.setWsdlFileUrl(retVal);
}
}
}
return retVal;
} catch (Throwable t) {
throw new IASDeploymentException("Exception while processing catalog "
+ catalogFile.getAbsolutePath() + "; Reason " + t.getMessage());
}
| private boolean | runWsGen(java.lang.String implClass, boolean skipGenWsdl, java.lang.String classPath, java.io.File stubsDir, java.io.File wsdlDir, javax.xml.namespace.QName sQname, javax.xml.namespace.QName port)
int numArgs;
if(skipGenWsdl) {
numArgs = 6;
} else {
numArgs = 13;
}
String[] wsgenArgs = new String[numArgs];
int argIndex= 0 ;
wsgenArgs[argIndex++] = "-cp";
wsgenArgs[argIndex++] = classPath;
wsgenArgs[argIndex++] = "-keep";
if(!skipGenWsdl) {
wsgenArgs[argIndex++] = "-wsdl";
wsgenArgs[argIndex++] = "-r";
wsgenArgs[argIndex++] = wsdlDir.getAbsolutePath();
wsgenArgs[argIndex++] = "-servicename";
wsgenArgs[argIndex++] = sQname.toString();
wsgenArgs[argIndex++] = "-portname";
wsgenArgs[argIndex++] = port.toString();
}
wsgenArgs[argIndex++] = "-d";
wsgenArgs[argIndex++] = stubsDir.getAbsolutePath();
wsgenArgs[argIndex++] = implClass;
WSToolsObjectFactory wsTools = WSToolsObjectFactory.newInstance();
return(wsTools.wsgen(System.out, wsgenArgs));
| public void | setClientTransportLog(com.sun.enterprise.deployment.ServiceReferenceDescriptor serviceRef, javax.xml.rpc.Stub stub, java.lang.String transportLogUrlStr)Set up a stub for request/response SOAP message logging.
try {
final String logUrlString = transportLogUrlStr;
OutputStream os = (OutputStream)
java.security.AccessController.doPrivileged
(new java.security.PrivilegedExceptionAction() {
public java.lang.Object run() throws Exception {
URL transportLogUrl = new URL(logUrlString);
File transportFile =new File(transportLogUrl.getFile());
return new FileOutputStream(transportFile, true);
}
});
ClientTransportFactory transportFactory =
rpcFactory.createClientTransportFactory(
ClientTransportFactoryTypes.HTTP, os);
if( stub instanceof StubBase ) {
((StubBase)stub)._setTransportFactory(transportFactory);
logger.info("Logging client transport for service-ref " +
serviceRef.getName() + " to file " +
transportLogUrlStr);
}
} catch(PrivilegedActionException pae) {
logger.log(Level.INFO, "", pae.getCause());
} catch(Throwable t) {
logger.log(Level.INFO, "", t);
}
| private void | setContentTypeAndFlush(javax.servlet.http.HttpServletResponse response)
response.setContentType("text/xml");
response.flushBuffer(); // prevent html message in response
response.getWriter().close();
| public static void | start()Notification of server startup, good place for services initialization
// force monitoring initialization
WebServiceEngineImpl.getInstance();
ApplicationLoaderEventListener listener = ServiceEngineUtil.getListener();
ApplicationLoaderEventNotifier.getInstance().addListener(listener);
| public void | throwSOAPFaultException(java.lang.String faultString, javax.xml.rpc.handler.MessageContext msgContext)Convenience method for throwing a SOAP fault exception.
SOAPMessage soapMessage =
((SOAPMessageContext)msgContext).getMessage();
throwSOAPFaultException(faultString, soapMessage);
| public void | throwSOAPFaultException(java.lang.String faultString, javax.xml.soap.SOAPMessage soapMessage)
SOAPFaultException sfe = null;
try {
SOAPPart sp = soapMessage.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
// Consume the request
SOAPBody sb = se.getBody();
// Access the child elements of body
Iterator iter = sb.getChildElements();
// Response should only include the fault, so remove
// any request body nodes.
if (iter.hasNext()) {
SOAPBodyElement requestBody = (SOAPBodyElement)iter.next();
// detach this node from the tree
requestBody.detachNode();
}
SOAPFault soapFault = sb.addFault();
se.setEncodingStyle(SOAPConstants.URI_ENCODING);
String faultActor = "http://schemas.xmlsoap.org/soap/actor/next";
QName faultCode = SOAPConstants.FAULT_CODE_SERVER;
soapFault.setFaultCode("env:" + faultCode.getLocalPart());
soapFault.setFaultString(faultString);
soapFault.setFaultActor(faultActor);
sfe = new SOAPFaultException(faultCode, faultActor, faultString,
null);
} catch(SOAPException se) {
logger.log(Level.FINE, "", se);
}
if( sfe != null ) {
throw sfe;
}
| public void | updateServletEndpointRuntime(com.sun.enterprise.deployment.WebServiceEndpoint endpoint)
// Copy the value of the servlet impl bean class into
// the runtime information. This way, we'll still
// remember it after the servlet-class element has been
// replaced with the name of the container's servlet class.
endpoint.saveServletImplClass();
WebComponentDescriptor webComp =
(WebComponentDescriptor) endpoint.getWebComponentImpl();
WebBundleDescriptor bundle = webComp.getWebBundleDescriptor();
WebServicesDescriptor webServices = bundle.getWebServices();
Collection endpoints =
webServices.getEndpointsImplementedBy(webComp);
if( endpoints.size() > 1 ) {
String msg = "Servlet " + endpoint.getWebComponentLink() +
" implements " + endpoints.size() + " web service endpoints " +
" but must only implement 1";
throw new IllegalStateException(msg);
}
if( endpoint.getEndpointAddressUri() == null ) {
Set urlPatterns = webComp.getUrlPatternsSet();
if( urlPatterns.size() == 1 ) {
// Set endpoint-address-uri runtime info to uri.
// Final endpoint address will still be relative to context root
String uri = (String) urlPatterns.iterator().next();
endpoint.setEndpointAddressUri(uri);
// Set transport guarantee in runtime info if transport
// guarantee is INTEGRAL or CONDIFIDENTIAL for any
// security constraint with this url-pattern.
Collection constraints =
bundle.getSecurityConstraintsForUrlPattern(uri);
for(Iterator i = constraints.iterator(); i.hasNext();) {
SecurityConstraint next = (SecurityConstraint) i.next();
UserDataConstraint dataConstraint =
next.getUserDataConstraint();
String guarantee = (dataConstraint != null) ?
dataConstraint.getTransportGuarantee() : null;
if( (guarantee != null) &&
( guarantee.equals
(UserDataConstraint.INTEGRAL_TRANSPORT) ||
guarantee.equals
(UserDataConstraint.CONFIDENTIAL_TRANSPORT) ) ) {
endpoint.setTransportGuarantee(guarantee);
break;
}
}
} else {
String msg = "Endpoint " + endpoint.getEndpointName() +
" has not been assigned an endpoint address " +
" and is associated with servlet " +
webComp.getCanonicalName() + " , which has " +
urlPatterns.size() + " url patterns";
throw new IllegalStateException(msg);
}
}
| public void | validateEjbEndpoint(com.sun.enterprise.deployment.WebServiceEndpoint ejbEndpoint)
EjbDescriptor ejbDescriptor = ejbEndpoint.getEjbComponentImpl();
EjbBundleDescriptor bundle = ejbDescriptor.getEjbBundleDescriptor();
WebServicesDescriptor webServices = bundle.getWebServices();
Collection endpoints =
webServices.getEndpointsImplementedBy(ejbDescriptor);
if( endpoints.size() == 1 ) {
if( ejbDescriptor.hasWebServiceEndpointInterface() ) {
if(!ejbEndpoint.getServiceEndpointInterface().equals
(ejbDescriptor.getWebServiceEndpointInterfaceName())) {
String msg = "Ejb " + ejbDescriptor.getName() +
" service endpoint interface does not match " +
" port component " + ejbEndpoint.getEndpointName();
throw new IllegalStateException(msg);
}
} else {
String msg = "Ejb " + ejbDescriptor.getName() +
" must declare <service-endpoint> interface";
throw new IllegalStateException(msg);
}
} else if( endpoints.size() > 1 ) {
String msg = "Ejb " + ejbDescriptor.getName() +
" implements " + endpoints.size() + " web service endpoints " +
" but must only implement 1";
throw new IllegalStateException(msg);
}
| void | writeInvalidContentType(javax.servlet.http.HttpServletResponse response)
//bad client content-type
response.setStatus(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
setContentTypeAndFlush(response);
| void | writeInvalidMethodType(javax.servlet.http.HttpServletResponse response, java.lang.String message)
response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>");
out.println("Invalid Method Type");
out.println("</title></head>");
out.println("<body>");
out.println(message);
out.println("</body>");
out.println("</html>");
| private void | writeNotFoundErrorPage(javax.servlet.http.HttpServletResponse response, java.lang.String message)
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>");
out.println("J2EE Web Services");
out.println("</title></head>");
out.println("<body>");
out.println("<h1>404 Not Found: " + message + "</h1>");
out.println("</body>");
out.println("</html>");
| void | writeReply(javax.servlet.http.HttpServletResponse response, com.sun.xml.rpc.spi.runtime.SOAPMessageContext messageContext)
// In case of a one-way operation, send no reply or fault.
if (isMessageContextPropertySet(messageContext, ONE_WAY_OPERATION)) {
return;
}
SOAPMessage reply = messageContext.getMessage();
int statusCode = 0;
if (messageContext.isFailure()) {
if (isMessageContextPropertySet(messageContext,
CLIENT_BAD_REQUEST)) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
setContentTypeAndFlush(response);
return;
} else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
} else {
response.setStatus(HttpServletResponse.SC_OK);
}
OutputStream os = response.getOutputStream();
String[] headers = reply.getMimeHeaders().getHeader("Content-Type");
if (headers != null && headers.length > 0) {
response.setContentType(headers[0]);
} else {
response.setContentType("text/xml");
}
putHeaders(reply.getMimeHeaders(), response);
reply.writeTo(os);
os.flush();
|
|