Skip to content

Commit

Permalink
ENTESB-6418 SwitchYard TestRunner should respect jaxws endpoint files
Browse files Browse the repository at this point in the history
  • Loading branch information
cunningt committed Feb 7, 2017
1 parent 94b6946 commit dca5dd9
Showing 1 changed file with 66 additions and 0 deletions.
Expand Up @@ -14,11 +14,20 @@

package org.switchyard.component.soap.endpoint;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.MessageContext;

import org.switchyard.ServiceDomain;
Expand All @@ -28,6 +37,14 @@
import org.switchyard.component.soap.WebServicePublishException;
import org.switchyard.component.soap.config.model.SOAPBindingModel;

import org.switchyard.common.type.Classes;
import org.switchyard.deploy.internal.Deployment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* Handles publishing of Webservice Endpoints on CXF JAX-WS implementations.
*
Expand All @@ -51,8 +68,15 @@ public synchronized Endpoint publish(ServiceDomain domain, final SOAPBindingMode

String publishUrl = HTTP_SCHEME + "://" + config.getSocketAddr().getHost() + ":" + config.getSocketAddr().getPort() + "/" + getContextPath();

String configFile = null;
wsEndpoint = new CXFJettyEndpoint(bindingId, config, handler, new AddressingInterceptor(), features);
//wsEndpoint.getEndpoint().setProperties(properties);

if (config.getEndpointConfig() != null) {
String endpointFile = config.getEndpointConfig().getConfigFile();
wsEndpoint = parseJaxWSConfig(endpointFile, wsEndpoint);
}

wsEndpoint.getEndpoint().setWsdlURL(getWsdlLocation());
wsEndpoint.getEndpoint().setServiceName(config.getPort().getServiceQName());
wsEndpoint.publish(publishUrl);
Expand All @@ -61,4 +85,46 @@ public synchronized Endpoint publish(ServiceDomain domain, final SOAPBindingMode
}
return wsEndpoint;
}

/**
* ENTESB-6418 : parse the endpoint file for properties and attach those
* properties to the endpoint we publish. Note that we are only supporting
* properties here and not pre/post handler chains.
* @param fileName jaxws-endpoint-config.xml to parse for properties
* @return list of properties
*/
private CXFJettyEndpoint parseJaxWSConfig(String fileName, CXFJettyEndpoint endpoint) {
Map<String, Object> props = new HashMap<String, Object>();
List<Handler> handlerList = new ArrayList<Handler>();
try {
URL url = Classes.getResource(fileName);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(url.openStream());
doc.getDocumentElement().normalize();

NodeList endpointConfigs = doc.getElementsByTagName("endpoint-config");
for (int temp = 0; temp < endpointConfigs.getLength(); temp++) {
Node node = endpointConfigs.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
NodeList propertyNodeList = element.getElementsByTagName("property");
for (int count = 0; count < propertyNodeList.getLength(); count++) {
Node propNode = propertyNodeList.item(count);
String propertyName = element.getElementsByTagName("property-name").item(0).getTextContent();
String propertyValue = element.getElementsByTagName("property-value").item(0).getTextContent();
props.put(propertyName, propertyValue);
}

// TODO : run through the list of pre-handler-chains and post-handler-chains
// and add the handlers to the endpoint
}
}
} catch (IOException ioe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException se) {
}
endpoint.getEndpoint().setProperties(props);
return endpoint;
}
}

0 comments on commit dca5dd9

Please sign in to comment.